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

Side by Side Diff: extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/declarative_webrequest/webrequest_condition_att ribute.h" 5 #include "extensions/browser/api/declarative_webrequest/webrequest_condition_att ribute.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/values.h" 19 #include "base/values.h"
20 #include "content/public/browser/resource_request_info.h" 20 #include "content/public/browser/resource_request_info.h"
21 #include "extensions/browser/api/declarative/deduping_factory.h" 21 #include "extensions/browser/api/declarative/deduping_factory.h"
22 #include "extensions/browser/api/declarative_webrequest/request_stage.h" 22 #include "extensions/browser/api/declarative_webrequest/request_stage.h"
23 #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h" 23 #include "extensions/browser/api/declarative_webrequest/webrequest_condition.h"
24 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" 24 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
25 #include "extensions/browser/api/web_request/web_request_api_helpers.h" 25 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
26 #include "extensions/browser/api/web_request/web_request_resource_type.h"
26 #include "extensions/common/error_utils.h" 27 #include "extensions/common/error_utils.h"
27 #include "net/base/net_errors.h" 28 #include "net/base/net_errors.h"
28 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 29 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
29 #include "net/base/static_cookie_policy.h" 30 #include "net/base/static_cookie_policy.h"
30 #include "net/http/http_request_headers.h" 31 #include "net/http/http_request_headers.h"
31 #include "net/http/http_util.h" 32 #include "net/http/http_util.h"
32 #include "net/url_request/url_request.h" 33 #include "net/url_request/url_request.h"
33 34
34 using base::CaseInsensitiveCompareASCII; 35 using base::CaseInsensitiveCompareASCII;
35 using base::DictionaryValue; 36 using base::DictionaryValue;
36 using base::ListValue; 37 using base::ListValue;
37 using base::StringValue; 38 using base::StringValue;
38 using base::Value; 39 using base::Value;
39 using content::ResourceType;
40 40
41 namespace helpers = extension_web_request_api_helpers; 41 namespace helpers = extension_web_request_api_helpers;
42 namespace keys = extensions::declarative_webrequest_constants; 42 namespace keys = extensions::declarative_webrequest_constants;
43 43
44 namespace extensions { 44 namespace extensions {
45 45
46 namespace { 46 namespace {
47 // Error messages. 47 // Error messages.
48 const char kInvalidValue[] = "Condition '*' has an invalid value"; 48 const char kInvalidValue[] = "Condition '*' has an invalid value";
49 49
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 bool bad_message = false; 123 bool bad_message = false;
124 return g_web_request_condition_attribute_factory.Get().factory.Instantiate( 124 return g_web_request_condition_attribute_factory.Get().factory.Instantiate(
125 name, value, error, &bad_message); 125 name, value, error, &bad_message);
126 } 126 }
127 127
128 // 128 //
129 // WebRequestConditionAttributeResourceType 129 // WebRequestConditionAttributeResourceType
130 // 130 //
131 131
132 WebRequestConditionAttributeResourceType:: 132 WebRequestConditionAttributeResourceType::
133 WebRequestConditionAttributeResourceType( 133 WebRequestConditionAttributeResourceType(
134 const std::vector<ResourceType>& types) 134 const std::vector<WebRequestResourceType>& types)
135 : types_(types) {} 135 : types_(types) {}
136 136
137 WebRequestConditionAttributeResourceType:: 137 WebRequestConditionAttributeResourceType::
138 ~WebRequestConditionAttributeResourceType() {} 138 ~WebRequestConditionAttributeResourceType() {}
139 139
140 // static 140 // static
141 scoped_refptr<const WebRequestConditionAttribute> 141 scoped_refptr<const WebRequestConditionAttribute>
142 WebRequestConditionAttributeResourceType::Create( 142 WebRequestConditionAttributeResourceType::Create(
143 const std::string& instance_type, 143 const std::string& instance_type,
144 const base::Value* value, 144 const base::Value* value,
145 std::string* error, 145 std::string* error,
146 bool* bad_message) { 146 bool* bad_message) {
147 DCHECK(instance_type == keys::kResourceTypeKey); 147 DCHECK(instance_type == keys::kResourceTypeKey);
148 const base::ListValue* value_as_list = NULL; 148 const base::ListValue* value_as_list = NULL;
149 if (!value->GetAsList(&value_as_list)) { 149 if (!value->GetAsList(&value_as_list)) {
150 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, 150 *error = ErrorUtils::FormatErrorMessage(kInvalidValue,
151 keys::kResourceTypeKey); 151 keys::kResourceTypeKey);
152 return scoped_refptr<const WebRequestConditionAttribute>(NULL); 152 return scoped_refptr<const WebRequestConditionAttribute>(NULL);
153 } 153 }
154 154
155 size_t number_types = value_as_list->GetSize(); 155 size_t number_types = value_as_list->GetSize();
156 156
157 std::vector<ResourceType> passed_types; 157 std::vector<WebRequestResourceType> passed_types;
158 passed_types.reserve(number_types); 158 passed_types.reserve(number_types);
159 for (size_t i = 0; i < number_types; ++i) { 159 for (size_t i = 0; i < number_types; ++i) {
160 std::string resource_type_string; 160 std::string resource_type_string;
161 if (!value_as_list->GetString(i, &resource_type_string) || 161 auto resource_type = WebRequestResourceType::UNDEFINED;
162 !helpers::ParseResourceType(resource_type_string, &passed_types)) { 162 if (value_as_list->GetString(i, &resource_type_string))
163 resource_type = ParseWebRequestResourceType(resource_type_string);
164
165 if (resource_type == WebRequestResourceType::UNDEFINED) {
163 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, 166 *error = ErrorUtils::FormatErrorMessage(kInvalidValue,
164 keys::kResourceTypeKey); 167 keys::kResourceTypeKey);
165 return scoped_refptr<const WebRequestConditionAttribute>(NULL); 168 return scoped_refptr<const WebRequestConditionAttribute>(NULL);
166 } 169 }
170 passed_types.push_back(resource_type);
167 } 171 }
168 172
169 return scoped_refptr<const WebRequestConditionAttribute>( 173 return scoped_refptr<const WebRequestConditionAttribute>(
170 new WebRequestConditionAttributeResourceType(passed_types)); 174 new WebRequestConditionAttributeResourceType(passed_types));
171 } 175 }
172 176
173 int WebRequestConditionAttributeResourceType::GetStages() const { 177 int WebRequestConditionAttributeResourceType::GetStages() const {
174 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | 178 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS |
175 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | 179 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT |
176 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; 180 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR;
177 } 181 }
178 182
179 bool WebRequestConditionAttributeResourceType::IsFulfilled( 183 bool WebRequestConditionAttributeResourceType::IsFulfilled(
180 const WebRequestData& request_data) const { 184 const WebRequestData& request_data) const {
181 if (!(request_data.stage & GetStages())) 185 if (!(request_data.stage & GetStages()))
182 return false; 186 return false;
183 const content::ResourceRequestInfo* info = 187 const auto resource_type = GetWebRequestResourceType(request_data.request);
184 content::ResourceRequestInfo::ForRequest(request_data.request); 188 return std::find(types_.begin(), types_.end(), resource_type) != types_.end();
185 if (!info)
186 return false;
187 return std::find(types_.begin(), types_.end(), info->GetResourceType()) !=
188 types_.end();
189 } 189 }
190 190
191 WebRequestConditionAttribute::Type 191 WebRequestConditionAttribute::Type
192 WebRequestConditionAttributeResourceType::GetType() const { 192 WebRequestConditionAttributeResourceType::GetType() const {
193 return CONDITION_RESOURCE_TYPE; 193 return CONDITION_RESOURCE_TYPE;
194 } 194 }
195 195
196 std::string WebRequestConditionAttributeResourceType::GetName() const { 196 std::string WebRequestConditionAttributeResourceType::GetName() const {
197 return keys::kResourceTypeKey; 197 return keys::kResourceTypeKey;
198 } 198 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 251 }
252 252
253 int WebRequestConditionAttributeContentType::GetStages() const { 253 int WebRequestConditionAttributeContentType::GetStages() const {
254 return ON_HEADERS_RECEIVED; 254 return ON_HEADERS_RECEIVED;
255 } 255 }
256 256
257 bool WebRequestConditionAttributeContentType::IsFulfilled( 257 bool WebRequestConditionAttributeContentType::IsFulfilled(
258 const WebRequestData& request_data) const { 258 const WebRequestData& request_data) const {
259 if (!(request_data.stage & GetStages())) 259 if (!(request_data.stage & GetStages()))
260 return false; 260 return false;
261
261 std::string content_type; 262 std::string content_type;
262 request_data.original_response_headers->GetNormalizedHeader( 263 request_data.original_response_headers->GetNormalizedHeader(
263 net::HttpRequestHeaders::kContentType, &content_type); 264 net::HttpRequestHeaders::kContentType, &content_type);
264 std::string mime_type; 265 std::string mime_type;
265 std::string charset; 266 std::string charset;
266 bool had_charset = false; 267 bool had_charset = false;
267 net::HttpUtil::ParseContentType( 268 net::HttpUtil::ParseContentType(
268 content_type, &mime_type, &charset, &had_charset, NULL); 269 content_type, &mime_type, &charset, &had_charset, NULL);
269 270
270 if (inclusive_) { 271 if (inclusive_) {
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 bool WebRequestConditionAttributeStages::Equals( 876 bool WebRequestConditionAttributeStages::Equals(
876 const WebRequestConditionAttribute* other) const { 877 const WebRequestConditionAttribute* other) const {
877 if (!WebRequestConditionAttribute::Equals(other)) 878 if (!WebRequestConditionAttribute::Equals(other))
878 return false; 879 return false;
879 const WebRequestConditionAttributeStages* casted_other = 880 const WebRequestConditionAttributeStages* casted_other =
880 static_cast<const WebRequestConditionAttributeStages*>(other); 881 static_cast<const WebRequestConditionAttributeStages*>(other);
881 return allowed_stages_ == casted_other->allowed_stages_; 882 return allowed_stages_ == casted_other->allowed_stages_;
882 } 883 }
883 884
884 } // namespace extensions 885 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698