1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/cache_storage/cache_storage_trace_utils.h"
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "base/trace_event/traced_value.h"
9 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
10
11 namespace content {
12
13 namespace {
14
15 template <typename T>
MojoEnumToString(T value)16 std::string MojoEnumToString(T value) {
17 std::ostringstream oss;
18 oss << value;
19 return oss.str();
20 }
21
22 } // namespace
23
24 using base::trace_event::TracedValue;
25
CacheStorageTracedValue(blink::mojom::CacheStorageError error)26 std::string CacheStorageTracedValue(blink::mojom::CacheStorageError error) {
27 return MojoEnumToString(error);
28 }
29
CacheStorageTracedValue(const blink::mojom::FetchAPIRequestPtr & request)30 std::unique_ptr<TracedValue> CacheStorageTracedValue(
31 const blink::mojom::FetchAPIRequestPtr& request) {
32 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
33 if (request) {
34 value->SetString("url", request->url.spec());
35 value->SetString("method", MojoEnumToString(request->method));
36 value->SetString("mode", MojoEnumToString(request->mode));
37 }
38 return value;
39 }
40
CacheStorageTracedValue(const std::vector<blink::mojom::FetchAPIRequestPtr> & request_list)41 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
42 const std::vector<blink::mojom::FetchAPIRequestPtr>& request_list) {
43 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
44 value->SetInteger("count", request_list.size());
45 if (!request_list.empty()) {
46 value->SetValue("first",
47 CacheStorageTracedValue(request_list.front()).get());
48 }
49 return value;
50 }
51
CacheStorageTracedValue(const blink::mojom::FetchAPIResponsePtr & response)52 std::unique_ptr<TracedValue> CacheStorageTracedValue(
53 const blink::mojom::FetchAPIResponsePtr& response) {
54 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
55 if (response) {
56 if (!response->url_list.empty())
57 value->SetString("url", response->url_list.back().spec());
58 value->SetString("type", MojoEnumToString(response->response_type));
59 }
60 return value;
61 }
62
CacheStorageTracedValue(const std::vector<blink::mojom::FetchAPIResponsePtr> & response_list)63 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
64 const std::vector<blink::mojom::FetchAPIResponsePtr>& response_list) {
65 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
66 value->SetInteger("count", response_list.size());
67 if (!response_list.empty()) {
68 value->SetValue("first",
69 CacheStorageTracedValue(response_list.front()).get());
70 }
71 return value;
72 }
73
CacheStorageTracedValue(const blink::mojom::CacheQueryOptionsPtr & options)74 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
75 const blink::mojom::CacheQueryOptionsPtr& options) {
76 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
77 if (options) {
78 value->SetBoolean("ignore_method", options->ignore_method);
79 value->SetBoolean("ignore_search", options->ignore_search);
80 value->SetBoolean("ignore_vary", options->ignore_vary);
81 }
82 return value;
83 }
84
CacheStorageTracedValue(const blink::mojom::MultiCacheQueryOptionsPtr & options)85 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
86 const blink::mojom::MultiCacheQueryOptionsPtr& options) {
87 if (!options)
88 return std::make_unique<TracedValue>();
89 std::unique_ptr<TracedValue> value =
90 CacheStorageTracedValue(options->query_options);
91 if (options->cache_name) {
92 value->SetString("cache_name", base::UTF16ToUTF8(*options->cache_name));
93 }
94 return value;
95 }
96
CacheStorageTracedValue(const blink::mojom::BatchOperationPtr & op)97 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
98 const blink::mojom::BatchOperationPtr& op) {
99 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
100 if (op) {
101 value->SetString("operation_type", MojoEnumToString(op->operation_type));
102 value->SetValue("request", CacheStorageTracedValue(op->request).get());
103 value->SetValue("response", CacheStorageTracedValue(op->response).get());
104 value->SetValue("options",
105 CacheStorageTracedValue(op->match_options).get());
106 }
107 return value;
108 }
109
CacheStorageTracedValue(const std::vector<blink::mojom::BatchOperationPtr> & operation_list)110 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
111 const std::vector<blink::mojom::BatchOperationPtr>& operation_list) {
112 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
113 value->SetInteger("count", operation_list.size());
114 if (!operation_list.empty()) {
115 value->SetValue("first",
116 CacheStorageTracedValue(operation_list.front()).get());
117 }
118 return value;
119 }
120
CacheStorageTracedValue(const std::vector<base::string16> string_list)121 std::unique_ptr<base::trace_event::TracedValue> CacheStorageTracedValue(
122 const std::vector<base::string16> string_list) {
123 std::unique_ptr<TracedValue> value = std::make_unique<TracedValue>();
124 value->SetInteger("count", string_list.size());
125 if (!string_list.empty()) {
126 value->SetString("first", base::UTF16ToUTF8(string_list.front()));
127 }
128 return value;
129 }
130
131 } // namespace content
132