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

Unified Diff: extensions/browser/api/web_request/web_request_resource_type.cc

Issue 2700553002: Introduce WebRequestResourceType. (Closed)
Patch Set: Address comments; add 'media'; make type mapping consistent. 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..cc1c60dfd104d54c551816e6ce03b714ef599a4b
--- /dev/null
+++ b/extensions/browser/api/web_request/web_request_resource_type.cc
@@ -0,0 +1,99 @@
+// 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 {
+
+constexpr const char* const kResourceTypeStrings[] = {
+ "main_frame", "sub_frame", "stylesheet", "script",
+ "image", "font", "object", "xmlhttprequest",
+ "ping", "media", "websocket", "other",
+};
+
+constexpr size_t kResourceTypeStringsLength = arraysize(kResourceTypeStrings);
+
+static_assert(kResourceTypeStringsLength ==
+ base::strict_cast<size_t>(
+ extensions::WebRequestResourceType::UNDEFINED),
+ "Each WebRequestResourceType should have a string value.");
+
+} // namespace
+
+namespace extensions {
+
+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:
pkalinnikov 2017/02/16 19:43:38 Devlin, Takeshi: Do you feel this (and PREFETCH, C
+ return WebRequestResourceType::OTHER;
+ 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:
pkalinnikov 2017/02/16 19:43:38 Should LAST_TYPE be UNDEFINED or OTHER?
+ return WebRequestResourceType::OTHER;
+ }
+ NOTREACHED();
+ return WebRequestResourceType::UNDEFINED;
+}
+
+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::UNDEFINED;
+}
+
+const char* WebRequestResourceTypeToString(WebRequestResourceType type) {
+ size_t index = base::strict_cast<size_t>(type);
+ DCHECK_LE(index, kResourceTypeStringsLength);
pkalinnikov 2017/02/16 19:43:38 Oups, DCHECK_LT.
pkalinnikov 2017/02/16 21:24:46 Done.
+ return kResourceTypeStrings[index];
+}
+
+WebRequestResourceType ParseWebRequestResourceType(base::StringPiece text) {
+ for (size_t i = 0; i < kResourceTypeStringsLength; ++i) {
+ if (text == kResourceTypeStrings[i])
+ return static_cast<WebRequestResourceType>(i);
+ }
+ return WebRequestResourceType::UNDEFINED;
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698