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..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 |