Index: extensions/browser/api/web_request/web_request_api_helpers.cc |
diff --git a/extensions/browser/api/web_request/web_request_api_helpers.cc b/extensions/browser/api/web_request/web_request_api_helpers.cc |
index 119fbaf27ab6570cbcea11c463425cf261f9be15..680a9532eef0864765dc3e0efae169d5a5aa9446 100644 |
--- a/extensions/browser/api/web_request/web_request_api_helpers.cc |
+++ b/extensions/browser/api/web_request/web_request_api_helpers.cc |
@@ -4,9 +4,11 @@ |
#include "extensions/browser/api/web_request/web_request_api_helpers.h" |
+#include <algorithm> |
#include <cmath> |
#include "base/bind.h" |
+#include "base/macros.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
@@ -33,6 +35,7 @@ |
// top of this file. |
using base::Time; |
+using content::ResourceType; |
using net::cookie_util::ParsedRequestCookie; |
using net::cookie_util::ParsedRequestCookies; |
@@ -42,6 +45,39 @@ namespace extension_web_request_api_helpers { |
namespace { |
+static const char* kResourceTypeStrings[] = { |
+ "main_frame", |
+ "sub_frame", |
+ "stylesheet", |
+ "script", |
+ "image", |
+ "object", |
+ "xmlhttprequest", |
+ "other", |
+ "other", |
+}; |
+ |
+const size_t kResourceTypeStringsLength = arraysize(kResourceTypeStrings); |
+ |
+static ResourceType kResourceTypeValues[] = { |
+ content::RESOURCE_TYPE_MAIN_FRAME, |
+ content::RESOURCE_TYPE_SUB_FRAME, |
+ content::RESOURCE_TYPE_STYLESHEET, |
+ content::RESOURCE_TYPE_SCRIPT, |
+ content::RESOURCE_TYPE_IMAGE, |
+ content::RESOURCE_TYPE_OBJECT, |
+ content::RESOURCE_TYPE_XHR, |
+ content::RESOURCE_TYPE_LAST_TYPE, // represents "other" |
+ // TODO(jochen): We duplicate the last entry, so the array's size is not a |
+ // power of two. If it is, this triggers a bug in gcc 4.4 in Release builds |
+ // (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43949). Once we use a version |
+ // of gcc with this bug fixed, or the array is changed so this duplicate |
+ // entry is no longer required, this should be removed. |
+ content::RESOURCE_TYPE_LAST_TYPE, |
+}; |
+ |
+const size_t kResourceTypeValuesLength = arraysize(kResourceTypeValues); |
+ |
typedef std::vector<linked_ptr<net::ParsedCookie> > ParsedResponseCookies; |
void ClearCacheOnNavigationOnUI() { |
@@ -1217,4 +1253,37 @@ base::DictionaryValue* CreateHeaderDictionary( |
return header; |
} |
+#define ARRAYEND(array) (array + arraysize(array)) |
+ |
+bool IsRelevantResourceType(ResourceType type) { |
+ ResourceType* iter = |
+ std::find(kResourceTypeValues, |
+ kResourceTypeValues + kResourceTypeValuesLength, |
+ type); |
+ return iter != (kResourceTypeValues + kResourceTypeValuesLength); |
+} |
+ |
+const char* ResourceTypeToString(ResourceType type) { |
+ ResourceType* iter = |
+ std::find(kResourceTypeValues, |
+ kResourceTypeValues + kResourceTypeValuesLength, |
+ type); |
+ if (iter == (kResourceTypeValues + kResourceTypeValuesLength)) |
+ return "other"; |
+ |
+ return kResourceTypeStrings[iter - kResourceTypeValues]; |
+} |
+ |
+bool ParseResourceType(const std::string& type_str, |
+ ResourceType* type) { |
+ const char** iter = |
+ std::find(kResourceTypeStrings, |
+ kResourceTypeStrings + kResourceTypeStringsLength, |
+ type_str); |
+ if (iter == (kResourceTypeStrings + kResourceTypeStringsLength)) |
+ return false; |
+ *type = kResourceTypeValues[iter - kResourceTypeStrings]; |
+ return true; |
+} |
+ |
} // namespace extension_web_request_api_helpers |