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

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

Issue 2700553002: Introduce WebRequestResourceType. (Closed)
Patch Set: Address comments from Devlin. 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>
(...skipping 18 matching lines...) Expand all
29 #include "net/base/static_cookie_policy.h" 29 #include "net/base/static_cookie_policy.h"
30 #include "net/http/http_request_headers.h" 30 #include "net/http/http_request_headers.h"
31 #include "net/http/http_util.h" 31 #include "net/http/http_util.h"
32 #include "net/url_request/url_request.h" 32 #include "net/url_request/url_request.h"
33 33
34 using base::CaseInsensitiveCompareASCII; 34 using base::CaseInsensitiveCompareASCII;
35 using base::DictionaryValue; 35 using base::DictionaryValue;
36 using base::ListValue; 36 using base::ListValue;
37 using base::StringValue; 37 using base::StringValue;
38 using base::Value; 38 using base::Value;
39 using content::ResourceType;
40 39
41 namespace helpers = extension_web_request_api_helpers; 40 namespace helpers = extension_web_request_api_helpers;
42 namespace keys = extensions::declarative_webrequest_constants; 41 namespace keys = extensions::declarative_webrequest_constants;
43 42
44 namespace extensions { 43 namespace extensions {
45 44
46 namespace { 45 namespace {
47 // Error messages. 46 // Error messages.
48 const char kInvalidValue[] = "Condition '*' has an invalid value"; 47 const char kInvalidValue[] = "Condition '*' has an invalid value";
49 48
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 bool bad_message = false; 122 bool bad_message = false;
124 return g_web_request_condition_attribute_factory.Get().factory.Instantiate( 123 return g_web_request_condition_attribute_factory.Get().factory.Instantiate(
125 name, value, error, &bad_message); 124 name, value, error, &bad_message);
126 } 125 }
127 126
128 // 127 //
129 // WebRequestConditionAttributeResourceType 128 // WebRequestConditionAttributeResourceType
130 // 129 //
131 130
132 WebRequestConditionAttributeResourceType:: 131 WebRequestConditionAttributeResourceType::
133 WebRequestConditionAttributeResourceType( 132 WebRequestConditionAttributeResourceType(
134 const std::vector<ResourceType>& types) 133 const std::vector<WebRequestResourceType>& types)
135 : types_(types) {} 134 : types_(types) {}
136 135
137 WebRequestConditionAttributeResourceType:: 136 WebRequestConditionAttributeResourceType::
138 ~WebRequestConditionAttributeResourceType() {} 137 ~WebRequestConditionAttributeResourceType() {}
139 138
140 // static 139 // static
141 scoped_refptr<const WebRequestConditionAttribute> 140 scoped_refptr<const WebRequestConditionAttribute>
142 WebRequestConditionAttributeResourceType::Create( 141 WebRequestConditionAttributeResourceType::Create(
143 const std::string& instance_type, 142 const std::string& instance_type,
144 const base::Value* value, 143 const base::Value* value,
145 std::string* error, 144 std::string* error,
146 bool* bad_message) { 145 bool* bad_message) {
147 DCHECK(instance_type == keys::kResourceTypeKey); 146 DCHECK(instance_type == keys::kResourceTypeKey);
148 const base::ListValue* value_as_list = NULL; 147 const base::ListValue* value_as_list = NULL;
149 if (!value->GetAsList(&value_as_list)) { 148 if (!value->GetAsList(&value_as_list)) {
150 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, 149 *error = ErrorUtils::FormatErrorMessage(kInvalidValue,
151 keys::kResourceTypeKey); 150 keys::kResourceTypeKey);
152 return scoped_refptr<const WebRequestConditionAttribute>(NULL); 151 return scoped_refptr<const WebRequestConditionAttribute>(NULL);
153 } 152 }
154 153
155 size_t number_types = value_as_list->GetSize(); 154 size_t number_types = value_as_list->GetSize();
156 155
157 std::vector<ResourceType> passed_types; 156 std::vector<WebRequestResourceType> passed_types;
158 passed_types.reserve(number_types); 157 passed_types.reserve(number_types);
159 for (size_t i = 0; i < number_types; ++i) { 158 for (size_t i = 0; i < number_types; ++i) {
160 std::string resource_type_string; 159 std::string resource_type_string;
161 if (!value_as_list->GetString(i, &resource_type_string) || 160 if (!value_as_list->GetString(i, &resource_type_string) ||
162 !helpers::ParseResourceType(resource_type_string, &passed_types)) { 161 !helpers::ParseResourceType(resource_type_string, &passed_types)) {
163 *error = ErrorUtils::FormatErrorMessage(kInvalidValue, 162 *error = ErrorUtils::FormatErrorMessage(kInvalidValue,
164 keys::kResourceTypeKey); 163 keys::kResourceTypeKey);
165 return scoped_refptr<const WebRequestConditionAttribute>(NULL); 164 return scoped_refptr<const WebRequestConditionAttribute>(NULL);
166 } 165 }
167 } 166 }
168 167
169 return scoped_refptr<const WebRequestConditionAttribute>( 168 return scoped_refptr<const WebRequestConditionAttribute>(
170 new WebRequestConditionAttributeResourceType(passed_types)); 169 new WebRequestConditionAttributeResourceType(passed_types));
171 } 170 }
172 171
173 int WebRequestConditionAttributeResourceType::GetStages() const { 172 int WebRequestConditionAttributeResourceType::GetStages() const {
174 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS | 173 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_SEND_HEADERS |
175 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT | 174 ON_HEADERS_RECEIVED | ON_AUTH_REQUIRED | ON_BEFORE_REDIRECT |
176 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR; 175 ON_RESPONSE_STARTED | ON_COMPLETED | ON_ERROR;
177 } 176 }
178 177
179 bool WebRequestConditionAttributeResourceType::IsFulfilled( 178 bool WebRequestConditionAttributeResourceType::IsFulfilled(
180 const WebRequestData& request_data) const { 179 const WebRequestData& request_data) const {
181 if (!(request_data.stage & GetStages())) 180 if (!(request_data.stage & GetStages()))
182 return false; 181 return false;
182
183 const content::ResourceRequestInfo* info = 183 const content::ResourceRequestInfo* info =
184 content::ResourceRequestInfo::ForRequest(request_data.request); 184 content::ResourceRequestInfo::ForRequest(request_data.request);
185 if (!info) 185 return info &&
186 return false; 186 std::find(types_.begin(), types_.end(),
187 return std::find(types_.begin(), types_.end(), info->GetResourceType()) != 187 ToWebRequestResourceType(info->GetResourceType())) !=
Devlin 2017/02/16 16:08:26 This seems like a place where we should be using t
pkalinnikov 2017/02/16 19:27:32 SGTM. How about UNDEFINED?
188 types_.end(); 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