Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: extensions/browser/api/web_request/web_request_resource_type.cc

Issue 2700553002: Introduce WebRequestResourceType. (Closed)
Patch Set: Make compiler happy; make type<->string mapping self-checking. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW
« no previous file with comments | « extensions/browser/api/web_request/web_request_resource_type.h ('k') | extensions/common/api/web_request.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698