OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 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 "extensions/browser/api/web_request/web_request_resource_type.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/numerics/safe_conversions.h" | |
9 #include "content/public/browser/resource_request_info.h" | |
10 #include "net/url_request/url_request.h" | |
11 | |
12 namespace extensions { | |
13 | |
14 namespace { | |
15 | |
16 constexpr struct { | |
17 const char* const name; | |
18 const WebRequestResourceType type; | |
19 } kResourceTypes[] = { | |
20 {"main_frame", WebRequestResourceType::MAIN_FRAME}, | |
21 {"sub_frame", WebRequestResourceType::SUB_FRAME}, | |
22 {"stylesheet", WebRequestResourceType::STYLESHEET}, | |
23 {"script", WebRequestResourceType::SCRIPT}, | |
24 {"image", WebRequestResourceType::IMAGE}, | |
25 {"font", WebRequestResourceType::FONT}, | |
26 {"object", WebRequestResourceType::OBJECT}, | |
27 {"xmlhttprequest", WebRequestResourceType::XHR}, | |
28 {"ping", WebRequestResourceType::PING}, | |
29 {"media", WebRequestResourceType::MEDIA}, | |
30 {"websocket", WebRequestResourceType::WEB_SOCKET}, | |
31 {"other", WebRequestResourceType::OTHER}, | |
32 }; | |
33 | |
34 constexpr size_t kResourceTypesLength = arraysize(kResourceTypes); | |
35 | |
36 static_assert(kResourceTypesLength == | |
37 base::strict_cast<size_t>(WebRequestResourceType::OTHER) + 1, | |
38 "Each WebRequestResourceType should have a string name."); | |
39 | |
40 } // namespace | |
41 | |
42 WebRequestResourceType ToWebRequestResourceType(content::ResourceType type) { | |
43 switch (type) { | |
44 case content::RESOURCE_TYPE_MAIN_FRAME: | |
45 return WebRequestResourceType::MAIN_FRAME; | |
46 case content::RESOURCE_TYPE_SUB_FRAME: | |
47 return WebRequestResourceType::SUB_FRAME; | |
48 case content::RESOURCE_TYPE_STYLESHEET: | |
49 return WebRequestResourceType::STYLESHEET; | |
50 case content::RESOURCE_TYPE_SCRIPT: | |
51 return WebRequestResourceType::SCRIPT; | |
52 case content::RESOURCE_TYPE_IMAGE: | |
53 return WebRequestResourceType::IMAGE; | |
54 case content::RESOURCE_TYPE_FONT_RESOURCE: | |
55 return WebRequestResourceType::FONT; | |
56 case content::RESOURCE_TYPE_SUB_RESOURCE: | |
57 return WebRequestResourceType::OTHER; | |
tyoshino (SeeGerritForStatus)
2017/02/17 10:39:58
how about explaining this change (the 3 types are
pkalinnikov
2017/02/17 11:36:26
Done.
| |
58 case content::RESOURCE_TYPE_OBJECT: | |
59 return WebRequestResourceType::OBJECT; | |
60 case content::RESOURCE_TYPE_MEDIA: | |
61 return WebRequestResourceType::MEDIA; | |
62 case content::RESOURCE_TYPE_WORKER: | |
63 case content::RESOURCE_TYPE_SHARED_WORKER: | |
64 return WebRequestResourceType::SCRIPT; | |
65 case content::RESOURCE_TYPE_PREFETCH: | |
66 return WebRequestResourceType::OTHER; | |
67 case content::RESOURCE_TYPE_FAVICON: | |
68 return WebRequestResourceType::IMAGE; | |
69 case content::RESOURCE_TYPE_XHR: | |
70 return WebRequestResourceType::XHR; | |
71 case content::RESOURCE_TYPE_PING: | |
72 return WebRequestResourceType::PING; | |
73 case content::RESOURCE_TYPE_SERVICE_WORKER: | |
74 return WebRequestResourceType::SCRIPT; | |
75 case content::RESOURCE_TYPE_CSP_REPORT: | |
76 return WebRequestResourceType::OTHER; | |
77 case content::RESOURCE_TYPE_PLUGIN_RESOURCE: | |
78 return WebRequestResourceType::OBJECT; | |
79 case content::RESOURCE_TYPE_LAST_TYPE: | |
80 return WebRequestResourceType::OTHER; | |
81 } | |
82 NOTREACHED(); | |
83 return WebRequestResourceType::OTHER; | |
84 } | |
85 | |
86 WebRequestResourceType GetWebRequestResourceType( | |
87 const net::URLRequest* request) { | |
88 DCHECK(request); | |
89 if (request->url().SchemeIsWSOrWSS()) | |
90 return WebRequestResourceType::WEB_SOCKET; | |
91 const auto* info = content::ResourceRequestInfo::ForRequest(request); | |
92 return info ? ToWebRequestResourceType(info->GetResourceType()) | |
93 : WebRequestResourceType::OTHER; | |
94 } | |
95 | |
96 const char* WebRequestResourceTypeToString(WebRequestResourceType type) { | |
97 size_t index = base::strict_cast<size_t>(type); | |
98 DCHECK_LT(index, kResourceTypesLength); | |
99 DCHECK_EQ(kResourceTypes[index].type, type); | |
100 return kResourceTypes[index].name; | |
101 } | |
102 | |
103 bool ParseWebRequestResourceType(base::StringPiece text, | |
104 WebRequestResourceType* type) { | |
105 for (size_t i = 0; i < kResourceTypesLength; ++i) { | |
106 if (text == kResourceTypes[i].name) { | |
107 *type = kResourceTypes[i].type; | |
108 DCHECK_EQ(static_cast<WebRequestResourceType>(i), *type); | |
109 return true; | |
110 } | |
111 } | |
112 return false; | |
113 } | |
114 | |
115 } // namespace extensions | |
OLD | NEW |