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

Side by Side Diff: extensions/browser/api/declarative_webrequest/webrequest_condition_attribute.cc

Issue 2700553002: Introduce WebRequestResourceType. (Closed)
Patch Set: Make compiler happy; make type<->string mapping self-checking. 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 passed_types.push_back(WebRequestResourceType::OTHER);
161 if (!value_as_list->GetString(i, &resource_type_string) || 162 if (!value_as_list->GetString(i, &resource_type_string) ||
162 !helpers::ParseResourceType(resource_type_string, &passed_types)) { 163 !ParseWebRequestResourceType(resource_type_string,
164 &passed_types.back())) {
163 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, 165 *error = ErrorUtils::FormatErrorMessage(kInvalidValue,
164 keys::kResourceTypeKey); 166 keys::kResourceTypeKey);
165 return scoped_refptr<const WebRequestConditionAttribute>(NULL); 167 return scoped_refptr<const WebRequestConditionAttribute>(NULL);
166 } 168 }
167 } 169 }
168 170
169 return scoped_refptr<const WebRequestConditionAttribute>( 171 return scoped_refptr<const WebRequestConditionAttribute>(
170 new WebRequestConditionAttributeResourceType(passed_types)); 172 new WebRequestConditionAttributeResourceType(passed_types));
171 } 173 }
172 174
173 int WebRequestConditionAttributeResourceType::GetStages() const { 175 int WebRequestConditionAttributeResourceType::GetStages() const {
174 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | 176 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS |
175 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | 177 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT |
176 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; 178 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR;
177 } 179 }
178 180
179 bool WebRequestConditionAttributeResourceType::IsFulfilled( 181 bool WebRequestConditionAttributeResourceType::IsFulfilled(
180 const WebRequestData& request_data) const { 182 const WebRequestData& request_data) const {
181 if (!(request_data.stage & GetStages())) 183 if (!(request_data.stage & GetStages()))
182 return false; 184 return false;
183 const content::ResourceRequestInfo* info = 185 const auto resource_type = GetWebRequestResourceType(request_data.request);
184 content::ResourceRequestInfo::ForRequest(request_data.request); 186 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 } 187 }
190 188
191 WebRequestConditionAttribute::Type 189 WebRequestConditionAttribute::Type
192 WebRequestConditionAttributeResourceType::GetType() const { 190 WebRequestConditionAttributeResourceType::GetType() const {
193 return CONDITION_RESOURCE_TYPE; 191 return CONDITION_RESOURCE_TYPE;
194 } 192 }
195 193
196 std::string WebRequestConditionAttributeResourceType::GetName() const { 194 std::string WebRequestConditionAttributeResourceType::GetName() const {
197 return keys::kResourceTypeKey; 195 return keys::kResourceTypeKey;
198 } 196 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 249 }
252 250
253 int WebRequestConditionAttributeContentType::GetStages() const { 251 int WebRequestConditionAttributeContentType::GetStages() const {
254 return ON_HEADERS_RECEIVED; 252 return ON_HEADERS_RECEIVED;
255 } 253 }
256 254
257 bool WebRequestConditionAttributeContentType::IsFulfilled( 255 bool WebRequestConditionAttributeContentType::IsFulfilled(
258 const WebRequestData& request_data) const { 256 const WebRequestData& request_data) const {
259 if (!(request_data.stage & GetStages())) 257 if (!(request_data.stage & GetStages()))
260 return false; 258 return false;
259
261 std::string content_type; 260 std::string content_type;
262 request_data.original_response_headers->GetNormalizedHeader( 261 request_data.original_response_headers->GetNormalizedHeader(
263 net::HttpRequestHeaders::kContentType, &content_type); 262 net::HttpRequestHeaders::kContentType, &content_type);
264 std::string mime_type; 263 std::string mime_type;
265 std::string charset; 264 std::string charset;
266 bool had_charset = false; 265 bool had_charset = false;
267 net::HttpUtil::ParseContentType( 266 net::HttpUtil::ParseContentType(
268 content_type, &mime_type, &charset, &had_charset, NULL); 267 content_type, &mime_type, &charset, &had_charset, NULL);
269 268
270 if (inclusive_) { 269 if (inclusive_) {
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 bool WebRequestConditionAttributeStages::Equals( 874 bool WebRequestConditionAttributeStages::Equals(
876 const WebRequestConditionAttribute* other) const { 875 const WebRequestConditionAttribute* other) const {
877 if (!WebRequestConditionAttribute::Equals(other)) 876 if (!WebRequestConditionAttribute::Equals(other))
878 return false; 877 return false;
879 const WebRequestConditionAttributeStages* casted_other = 878 const WebRequestConditionAttributeStages* casted_other =
880 static_cast<const WebRequestConditionAttributeStages*>(other); 879 static_cast<const WebRequestConditionAttributeStages*>(other);
881 return allowed_stages_ == casted_other->allowed_stages_; 880 return allowed_stages_ == casted_other->allowed_stages_;
882 } 881 }
883 882
884 } // namespace extensions 883 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698