Chromium Code Reviews| 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 |