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 |