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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: extensions/browser/api/web_request/web_request_resource_type.cc
diff --git a/extensions/browser/api/web_request/web_request_resource_type.cc b/extensions/browser/api/web_request/web_request_resource_type.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e92a5b2de74378c62ca5b3f5510cf2a09ae62e15
--- /dev/null
+++ b/extensions/browser/api/web_request/web_request_resource_type.cc
@@ -0,0 +1,115 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "extensions/browser/api/web_request/web_request_resource_type.h"
+
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
+#include "content/public/browser/resource_request_info.h"
+#include "net/url_request/url_request.h"
+
+namespace extensions {
+
+namespace {
+
+constexpr struct {
+ const char* const name;
+ const WebRequestResourceType type;
+} kResourceTypes[] = {
+ {"main_frame", WebRequestResourceType::MAIN_FRAME},
+ {"sub_frame", WebRequestResourceType::SUB_FRAME},
+ {"stylesheet", WebRequestResourceType::STYLESHEET},
+ {"script", WebRequestResourceType::SCRIPT},
+ {"image", WebRequestResourceType::IMAGE},
+ {"font", WebRequestResourceType::FONT},
+ {"object", WebRequestResourceType::OBJECT},
+ {"xmlhttprequest", WebRequestResourceType::XHR},
+ {"ping", WebRequestResourceType::PING},
+ {"media", WebRequestResourceType::MEDIA},
+ {"websocket", WebRequestResourceType::WEB_SOCKET},
+ {"other", WebRequestResourceType::OTHER},
+};
+
+constexpr size_t kResourceTypesLength = arraysize(kResourceTypes);
+
+static_assert(kResourceTypesLength ==
+ base::strict_cast<size_t>(WebRequestResourceType::OTHER) + 1,
+ "Each WebRequestResourceType should have a string name.");
+
+} // namespace
+
+WebRequestResourceType ToWebRequestResourceType(content::ResourceType type) {
+ switch (type) {
+ case content::RESOURCE_TYPE_MAIN_FRAME:
+ return WebRequestResourceType::MAIN_FRAME;
+ case content::RESOURCE_TYPE_SUB_FRAME:
+ return WebRequestResourceType::SUB_FRAME;
+ case content::RESOURCE_TYPE_STYLESHEET:
+ return WebRequestResourceType::STYLESHEET;
+ case content::RESOURCE_TYPE_SCRIPT:
+ return WebRequestResourceType::SCRIPT;
+ case content::RESOURCE_TYPE_IMAGE:
+ return WebRequestResourceType::IMAGE;
+ case content::RESOURCE_TYPE_FONT_RESOURCE:
+ return WebRequestResourceType::FONT;
+ case content::RESOURCE_TYPE_SUB_RESOURCE:
+ 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.
+ case content::RESOURCE_TYPE_OBJECT:
+ return WebRequestResourceType::OBJECT;
+ case content::RESOURCE_TYPE_MEDIA:
+ return WebRequestResourceType::MEDIA;
+ case content::RESOURCE_TYPE_WORKER:
+ case content::RESOURCE_TYPE_SHARED_WORKER:
+ return WebRequestResourceType::SCRIPT;
+ case content::RESOURCE_TYPE_PREFETCH:
+ return WebRequestResourceType::OTHER;
+ case content::RESOURCE_TYPE_FAVICON:
+ return WebRequestResourceType::IMAGE;
+ case content::RESOURCE_TYPE_XHR:
+ return WebRequestResourceType::XHR;
+ case content::RESOURCE_TYPE_PING:
+ return WebRequestResourceType::PING;
+ case content::RESOURCE_TYPE_SERVICE_WORKER:
+ return WebRequestResourceType::SCRIPT;
+ case content::RESOURCE_TYPE_CSP_REPORT:
+ return WebRequestResourceType::OTHER;
+ case content::RESOURCE_TYPE_PLUGIN_RESOURCE:
+ return WebRequestResourceType::OBJECT;
+ case content::RESOURCE_TYPE_LAST_TYPE:
+ return WebRequestResourceType::OTHER;
+ }
+ NOTREACHED();
+ return WebRequestResourceType::OTHER;
+}
+
+WebRequestResourceType GetWebRequestResourceType(
+ const net::URLRequest* request) {
+ DCHECK(request);
+ if (request->url().SchemeIsWSOrWSS())
+ return WebRequestResourceType::WEB_SOCKET;
+ const auto* info = content::ResourceRequestInfo::ForRequest(request);
+ return info ? ToWebRequestResourceType(info->GetResourceType())
+ : WebRequestResourceType::OTHER;
+}
+
+const char* WebRequestResourceTypeToString(WebRequestResourceType type) {
+ size_t index = base::strict_cast<size_t>(type);
+ DCHECK_LT(index, kResourceTypesLength);
+ DCHECK_EQ(kResourceTypes[index].type, type);
+ return kResourceTypes[index].name;
+}
+
+bool ParseWebRequestResourceType(base::StringPiece text,
+ WebRequestResourceType* type) {
+ for (size_t i = 0; i < kResourceTypesLength; ++i) {
+ if (text == kResourceTypes[i].name) {
+ *type = kResourceTypes[i].type;
+ DCHECK_EQ(static_cast<WebRequestResourceType>(i), *type);
+ return true;
+ }
+ }
+ return false;
+}
+
+} // namespace extensions
« 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