| OLD | NEW |
| 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 "chrome/browser/extensions/api/declarative_webrequest/webrequest_action
.h" | 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action
.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
| 12 #include "base/string_util.h" |
| 12 #include "base/values.h" | 13 #include "base/values.h" |
| 13 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" | 14 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" |
| 14 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta
nts.h" | 15 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta
nts.h" |
| 15 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" | 16 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" |
| 16 #include "net/url_request/url_request.h" | 17 #include "net/url_request/url_request.h" |
| 17 | 18 |
| 18 namespace extensions { | 19 namespace extensions { |
| 19 | 20 |
| 20 namespace keys = declarative_webrequest_constants; | 21 namespace keys = declarative_webrequest_constants; |
| 21 | 22 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 scoped_ptr<WebRequestAction> CreateRemoveRequestHeaderAction( | 73 scoped_ptr<WebRequestAction> CreateRemoveRequestHeaderAction( |
| 73 const base::DictionaryValue* dict, | 74 const base::DictionaryValue* dict, |
| 74 std::string* error, | 75 std::string* error, |
| 75 bool* bad_message) { | 76 bool* bad_message) { |
| 76 std::string name; | 77 std::string name; |
| 77 INPUT_FORMAT_VALIDATE(dict->GetString(keys::kNameKey, &name)); | 78 INPUT_FORMAT_VALIDATE(dict->GetString(keys::kNameKey, &name)); |
| 78 return scoped_ptr<WebRequestAction>( | 79 return scoped_ptr<WebRequestAction>( |
| 79 new WebRequestRemoveRequestHeaderAction(name)); | 80 new WebRequestRemoveRequestHeaderAction(name)); |
| 80 } | 81 } |
| 81 | 82 |
| 83 scoped_ptr<WebRequestAction> CreateAddResponseHeaderAction( |
| 84 const base::DictionaryValue* dict, |
| 85 std::string* error, |
| 86 bool* bad_message) { |
| 87 std::string name; |
| 88 std::string value; |
| 89 INPUT_FORMAT_VALIDATE(dict->GetString(keys::kNameKey, &name)); |
| 90 INPUT_FORMAT_VALIDATE(dict->GetString(keys::kValueKey, &value)); |
| 91 return scoped_ptr<WebRequestAction>( |
| 92 new WebRequestAddResponseHeaderAction(name, value)); |
| 93 } |
| 94 |
| 95 scoped_ptr<WebRequestAction> CreateRemoveResponseHeaderAction( |
| 96 const base::DictionaryValue* dict, |
| 97 std::string* error, |
| 98 bool* bad_message) { |
| 99 std::string name; |
| 100 std::string value; |
| 101 INPUT_FORMAT_VALIDATE(dict->GetString(keys::kNameKey, &name)); |
| 102 bool has_value = dict->GetString(keys::kValueKey, &value); |
| 103 return scoped_ptr<WebRequestAction>( |
| 104 new WebRequestRemoveResponseHeaderAction(name, value, has_value)); |
| 105 } |
| 106 |
| 82 scoped_ptr<WebRequestAction> CreateIgnoreRulesAction( | 107 scoped_ptr<WebRequestAction> CreateIgnoreRulesAction( |
| 83 const base::DictionaryValue* dict, | 108 const base::DictionaryValue* dict, |
| 84 std::string* error, | 109 std::string* error, |
| 85 bool* bad_message) { | 110 bool* bad_message) { |
| 86 int minium_priority; | 111 int minium_priority; |
| 87 INPUT_FORMAT_VALIDATE( | 112 INPUT_FORMAT_VALIDATE( |
| 88 dict->GetInteger(keys::kLowerPriorityThanKey, &minium_priority)); | 113 dict->GetInteger(keys::kLowerPriorityThanKey, &minium_priority)); |
| 89 return scoped_ptr<WebRequestAction>( | 114 return scoped_ptr<WebRequestAction>( |
| 90 new WebRequestIgnoreRulesAction(minium_priority)); | 115 new WebRequestIgnoreRulesAction(minium_priority)); |
| 91 } | 116 } |
| 92 | 117 |
| 93 struct WebRequestActionFactory { | 118 struct WebRequestActionFactory { |
| 94 // Factory methods for WebRequestAction instances. |dict| contains the json | 119 // Factory methods for WebRequestAction instances. |dict| contains the json |
| 95 // dictionary that describes the action. |error| is used to return error | 120 // dictionary that describes the action. |error| is used to return error |
| 96 // messages in case the extension passed an action that was syntactically | 121 // messages in case the extension passed an action that was syntactically |
| 97 // correct but semantically incorrect. |bad_message| is set to true in case | 122 // correct but semantically incorrect. |bad_message| is set to true in case |
| 98 // |dict| does not confirm to the validated JSON specification. | 123 // |dict| does not confirm to the validated JSON specification. |
| 99 typedef scoped_ptr<WebRequestAction> | 124 typedef scoped_ptr<WebRequestAction> |
| 100 (* FactoryMethod)(const base::DictionaryValue* /* dict */ , | 125 (* FactoryMethod)(const base::DictionaryValue* /* dict */ , |
| 101 std::string* /* error */, | 126 std::string* /* error */, |
| 102 bool* /* bad_message */); | 127 bool* /* bad_message */); |
| 103 std::map<std::string, FactoryMethod> factory_methods; | 128 std::map<std::string, FactoryMethod> factory_methods; |
| 104 | 129 |
| 105 WebRequestActionFactory() { | 130 WebRequestActionFactory() { |
| 131 factory_methods[keys::kAddResponseHeaderType] = |
| 132 &CreateAddResponseHeaderAction; |
| 106 factory_methods[keys::kCancelRequestType] = | 133 factory_methods[keys::kCancelRequestType] = |
| 107 &CallConstructorFactoryMethod<WebRequestCancelAction>; | 134 &CallConstructorFactoryMethod<WebRequestCancelAction>; |
| 108 factory_methods[keys::kRedirectRequestType] = | 135 factory_methods[keys::kRedirectRequestType] = |
| 109 &CreateRedirectRequestAction; | 136 &CreateRedirectRequestAction; |
| 110 factory_methods[keys::kRedirectToTransparentImageType] = | 137 factory_methods[keys::kRedirectToTransparentImageType] = |
| 111 &CallConstructorFactoryMethod< | 138 &CallConstructorFactoryMethod< |
| 112 WebRequestRedirectToTransparentImageAction>; | 139 WebRequestRedirectToTransparentImageAction>; |
| 113 factory_methods[keys::kRedirectToEmptyDocumentType] = | 140 factory_methods[keys::kRedirectToEmptyDocumentType] = |
| 114 &CallConstructorFactoryMethod<WebRequestRedirectToEmptyDocumentAction>; | 141 &CallConstructorFactoryMethod<WebRequestRedirectToEmptyDocumentAction>; |
| 115 factory_methods[keys::kSetRequestHeaderType] = | 142 factory_methods[keys::kSetRequestHeaderType] = |
| 116 &CreateSetRequestHeaderAction; | 143 &CreateSetRequestHeaderAction; |
| 117 factory_methods[keys::kRemoveRequestHeaderType] = | 144 factory_methods[keys::kRemoveRequestHeaderType] = |
| 118 &CreateRemoveRequestHeaderAction; | 145 &CreateRemoveRequestHeaderAction; |
| 146 factory_methods[keys::kRemoveResponseHeaderType] = |
| 147 &CreateRemoveResponseHeaderAction; |
| 119 factory_methods[keys::kIgnoreRulesType] = | 148 factory_methods[keys::kIgnoreRulesType] = |
| 120 &CreateIgnoreRulesAction; | 149 &CreateIgnoreRulesAction; |
| 121 } | 150 } |
| 122 }; | 151 }; |
| 123 | 152 |
| 124 base::LazyInstance<WebRequestActionFactory>::Leaky | 153 base::LazyInstance<WebRequestActionFactory>::Leaky |
| 125 g_web_request_action_factory = LAZY_INSTANCE_INITIALIZER; | 154 g_web_request_action_factory = LAZY_INSTANCE_INITIALIZER; |
| 126 | 155 |
| 127 } // namespace | 156 } // namespace |
| 128 | 157 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 return scoped_ptr<WebRequestActionSet>(NULL); | 220 return scoped_ptr<WebRequestActionSet>(NULL); |
| 192 result.push_back(make_linked_ptr(action.release())); | 221 result.push_back(make_linked_ptr(action.release())); |
| 193 } | 222 } |
| 194 | 223 |
| 195 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result)); | 224 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result)); |
| 196 } | 225 } |
| 197 | 226 |
| 198 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas( | 227 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas( |
| 199 net::URLRequest* request, | 228 net::URLRequest* request, |
| 200 RequestStages request_stage, | 229 RequestStages request_stage, |
| 230 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 201 const std::string& extension_id, | 231 const std::string& extension_id, |
| 202 const base::Time& extension_install_time) const { | 232 const base::Time& extension_install_time) const { |
| 203 std::list<LinkedPtrEventResponseDelta> result; | 233 std::list<LinkedPtrEventResponseDelta> result; |
| 204 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { | 234 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { |
| 205 if ((*i)->GetStages() & request_stage) { | 235 if ((*i)->GetStages() & request_stage) { |
| 206 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request, | 236 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request, |
| 207 request_stage, extension_id, extension_install_time); | 237 request_stage, optional_request_data, extension_id, |
| 238 extension_install_time); |
| 208 if (delta.get()) | 239 if (delta.get()) |
| 209 result.push_back(delta); | 240 result.push_back(delta); |
| 210 } | 241 } |
| 211 } | 242 } |
| 212 return result; | 243 return result; |
| 213 } | 244 } |
| 214 | 245 |
| 215 int WebRequestActionSet::GetMinimumPriority() const { | 246 int WebRequestActionSet::GetMinimumPriority() const { |
| 216 int minimum_priority = std::numeric_limits<int>::min(); | 247 int minimum_priority = std::numeric_limits<int>::min(); |
| 217 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { | 248 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 233 ON_AUTH_REQUIRED; | 264 ON_AUTH_REQUIRED; |
| 234 } | 265 } |
| 235 | 266 |
| 236 WebRequestAction::Type WebRequestCancelAction::GetType() const { | 267 WebRequestAction::Type WebRequestCancelAction::GetType() const { |
| 237 return WebRequestAction::ACTION_CANCEL_REQUEST; | 268 return WebRequestAction::ACTION_CANCEL_REQUEST; |
| 238 } | 269 } |
| 239 | 270 |
| 240 LinkedPtrEventResponseDelta WebRequestCancelAction::CreateDelta( | 271 LinkedPtrEventResponseDelta WebRequestCancelAction::CreateDelta( |
| 241 net::URLRequest* request, | 272 net::URLRequest* request, |
| 242 RequestStages request_stage, | 273 RequestStages request_stage, |
| 274 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 243 const std::string& extension_id, | 275 const std::string& extension_id, |
| 244 const base::Time& extension_install_time) const { | 276 const base::Time& extension_install_time) const { |
| 245 CHECK(request_stage & GetStages()); | 277 CHECK(request_stage & GetStages()); |
| 246 LinkedPtrEventResponseDelta result( | 278 LinkedPtrEventResponseDelta result( |
| 247 new extension_web_request_api_helpers::EventResponseDelta( | 279 new extension_web_request_api_helpers::EventResponseDelta( |
| 248 extension_id, extension_install_time)); | 280 extension_id, extension_install_time)); |
| 249 result->cancel = true; | 281 result->cancel = true; |
| 250 return result; | 282 return result; |
| 251 } | 283 } |
| 252 | 284 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 263 return ON_BEFORE_REQUEST; | 295 return ON_BEFORE_REQUEST; |
| 264 } | 296 } |
| 265 | 297 |
| 266 WebRequestAction::Type WebRequestRedirectAction::GetType() const { | 298 WebRequestAction::Type WebRequestRedirectAction::GetType() const { |
| 267 return WebRequestAction::ACTION_REDIRECT_REQUEST; | 299 return WebRequestAction::ACTION_REDIRECT_REQUEST; |
| 268 } | 300 } |
| 269 | 301 |
| 270 LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta( | 302 LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta( |
| 271 net::URLRequest* request, | 303 net::URLRequest* request, |
| 272 RequestStages request_stage, | 304 RequestStages request_stage, |
| 305 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 273 const std::string& extension_id, | 306 const std::string& extension_id, |
| 274 const base::Time& extension_install_time) const { | 307 const base::Time& extension_install_time) const { |
| 275 CHECK(request_stage & GetStages()); | 308 CHECK(request_stage & GetStages()); |
| 276 if (request->url() == redirect_url_) | 309 if (request->url() == redirect_url_) |
| 277 return LinkedPtrEventResponseDelta(NULL); | 310 return LinkedPtrEventResponseDelta(NULL); |
| 278 LinkedPtrEventResponseDelta result( | 311 LinkedPtrEventResponseDelta result( |
| 279 new extension_web_request_api_helpers::EventResponseDelta( | 312 new extension_web_request_api_helpers::EventResponseDelta( |
| 280 extension_id, extension_install_time)); | 313 extension_id, extension_install_time)); |
| 281 result->new_url = redirect_url_; | 314 result->new_url = redirect_url_; |
| 282 return result; | 315 return result; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 298 | 331 |
| 299 WebRequestAction::Type | 332 WebRequestAction::Type |
| 300 WebRequestRedirectToTransparentImageAction::GetType() const { | 333 WebRequestRedirectToTransparentImageAction::GetType() const { |
| 301 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; | 334 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; |
| 302 } | 335 } |
| 303 | 336 |
| 304 LinkedPtrEventResponseDelta | 337 LinkedPtrEventResponseDelta |
| 305 WebRequestRedirectToTransparentImageAction::CreateDelta( | 338 WebRequestRedirectToTransparentImageAction::CreateDelta( |
| 306 net::URLRequest* request, | 339 net::URLRequest* request, |
| 307 RequestStages request_stage, | 340 RequestStages request_stage, |
| 341 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 308 const std::string& extension_id, | 342 const std::string& extension_id, |
| 309 const base::Time& extension_install_time) const { | 343 const base::Time& extension_install_time) const { |
| 310 CHECK(request_stage & GetStages()); | 344 CHECK(request_stage & GetStages()); |
| 311 LinkedPtrEventResponseDelta result( | 345 LinkedPtrEventResponseDelta result( |
| 312 new extension_web_request_api_helpers::EventResponseDelta( | 346 new extension_web_request_api_helpers::EventResponseDelta( |
| 313 extension_id, extension_install_time)); | 347 extension_id, extension_install_time)); |
| 314 result->new_url = GURL(kTransparentImageUrl); | 348 result->new_url = GURL(kTransparentImageUrl); |
| 315 return result; | 349 return result; |
| 316 } | 350 } |
| 317 | 351 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 331 | 365 |
| 332 WebRequestAction::Type | 366 WebRequestAction::Type |
| 333 WebRequestRedirectToEmptyDocumentAction::GetType() const { | 367 WebRequestRedirectToEmptyDocumentAction::GetType() const { |
| 334 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; | 368 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; |
| 335 } | 369 } |
| 336 | 370 |
| 337 LinkedPtrEventResponseDelta | 371 LinkedPtrEventResponseDelta |
| 338 WebRequestRedirectToEmptyDocumentAction::CreateDelta( | 372 WebRequestRedirectToEmptyDocumentAction::CreateDelta( |
| 339 net::URLRequest* request, | 373 net::URLRequest* request, |
| 340 RequestStages request_stage, | 374 RequestStages request_stage, |
| 375 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 341 const std::string& extension_id, | 376 const std::string& extension_id, |
| 342 const base::Time& extension_install_time) const { | 377 const base::Time& extension_install_time) const { |
| 343 CHECK(request_stage & GetStages()); | 378 CHECK(request_stage & GetStages()); |
| 344 LinkedPtrEventResponseDelta result( | 379 LinkedPtrEventResponseDelta result( |
| 345 new extension_web_request_api_helpers::EventResponseDelta( | 380 new extension_web_request_api_helpers::EventResponseDelta( |
| 346 extension_id, extension_install_time)); | 381 extension_id, extension_install_time)); |
| 347 result->new_url = GURL(kEmptyDocumentUrl); | 382 result->new_url = GURL(kEmptyDocumentUrl); |
| 348 return result; | 383 return result; |
| 349 } | 384 } |
| 350 | 385 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 367 | 402 |
| 368 WebRequestAction::Type | 403 WebRequestAction::Type |
| 369 WebRequestSetRequestHeaderAction::GetType() const { | 404 WebRequestSetRequestHeaderAction::GetType() const { |
| 370 return WebRequestAction::ACTION_SET_REQUEST_HEADER; | 405 return WebRequestAction::ACTION_SET_REQUEST_HEADER; |
| 371 } | 406 } |
| 372 | 407 |
| 373 LinkedPtrEventResponseDelta | 408 LinkedPtrEventResponseDelta |
| 374 WebRequestSetRequestHeaderAction::CreateDelta( | 409 WebRequestSetRequestHeaderAction::CreateDelta( |
| 375 net::URLRequest* request, | 410 net::URLRequest* request, |
| 376 RequestStages request_stage, | 411 RequestStages request_stage, |
| 412 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 377 const std::string& extension_id, | 413 const std::string& extension_id, |
| 378 const base::Time& extension_install_time) const { | 414 const base::Time& extension_install_time) const { |
| 379 CHECK(request_stage & GetStages()); | 415 CHECK(request_stage & GetStages()); |
| 380 LinkedPtrEventResponseDelta result( | 416 LinkedPtrEventResponseDelta result( |
| 381 new extension_web_request_api_helpers::EventResponseDelta( | 417 new extension_web_request_api_helpers::EventResponseDelta( |
| 382 extension_id, extension_install_time)); | 418 extension_id, extension_install_time)); |
| 383 result->modified_request_headers.SetHeader(name_, value_); | 419 result->modified_request_headers.SetHeader(name_, value_); |
| 384 return result; | 420 return result; |
| 385 } | 421 } |
| 386 | 422 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 401 | 437 |
| 402 WebRequestAction::Type | 438 WebRequestAction::Type |
| 403 WebRequestRemoveRequestHeaderAction::GetType() const { | 439 WebRequestRemoveRequestHeaderAction::GetType() const { |
| 404 return WebRequestAction::ACTION_REMOVE_REQUEST_HEADER; | 440 return WebRequestAction::ACTION_REMOVE_REQUEST_HEADER; |
| 405 } | 441 } |
| 406 | 442 |
| 407 LinkedPtrEventResponseDelta | 443 LinkedPtrEventResponseDelta |
| 408 WebRequestRemoveRequestHeaderAction::CreateDelta( | 444 WebRequestRemoveRequestHeaderAction::CreateDelta( |
| 409 net::URLRequest* request, | 445 net::URLRequest* request, |
| 410 RequestStages request_stage, | 446 RequestStages request_stage, |
| 447 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 411 const std::string& extension_id, | 448 const std::string& extension_id, |
| 412 const base::Time& extension_install_time) const { | 449 const base::Time& extension_install_time) const { |
| 413 CHECK(request_stage & GetStages()); | 450 CHECK(request_stage & GetStages()); |
| 414 LinkedPtrEventResponseDelta result( | 451 LinkedPtrEventResponseDelta result( |
| 415 new extension_web_request_api_helpers::EventResponseDelta( | 452 new extension_web_request_api_helpers::EventResponseDelta( |
| 416 extension_id, extension_install_time)); | 453 extension_id, extension_install_time)); |
| 417 result->deleted_request_headers.push_back(name_); | 454 result->deleted_request_headers.push_back(name_); |
| 418 return result; | 455 return result; |
| 419 } | 456 } |
| 420 | 457 |
| 421 // | 458 // |
| 459 // WebRequestAddResponseHeaderAction |
| 460 // |
| 461 |
| 462 WebRequestAddResponseHeaderAction::WebRequestAddResponseHeaderAction( |
| 463 const std::string& name, |
| 464 const std::string& value) |
| 465 : name_(name), |
| 466 value_(value) { |
| 467 } |
| 468 |
| 469 WebRequestAddResponseHeaderAction::~WebRequestAddResponseHeaderAction() {} |
| 470 |
| 471 int WebRequestAddResponseHeaderAction::GetStages() const { |
| 472 return ON_HEADERS_RECEIVED; |
| 473 } |
| 474 |
| 475 WebRequestAction::Type |
| 476 WebRequestAddResponseHeaderAction::GetType() const { |
| 477 return WebRequestAction::ACTION_ADD_RESPONSE_HEADER; |
| 478 } |
| 479 |
| 480 LinkedPtrEventResponseDelta |
| 481 WebRequestAddResponseHeaderAction::CreateDelta( |
| 482 net::URLRequest* request, |
| 483 RequestStages request_stage, |
| 484 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 485 const std::string& extension_id, |
| 486 const base::Time& extension_install_time) const { |
| 487 CHECK(request_stage & GetStages()); |
| 488 LinkedPtrEventResponseDelta result( |
| 489 new extension_web_request_api_helpers::EventResponseDelta( |
| 490 extension_id, extension_install_time)); |
| 491 |
| 492 net::HttpResponseHeaders* headers = |
| 493 optional_request_data.original_response_headers; |
| 494 if (!headers) |
| 495 return result; |
| 496 |
| 497 // Don't generate the header if it exists already. |
| 498 if (headers->HasHeaderValue(name_, value_)) |
| 499 return result; |
| 500 |
| 501 result->added_response_headers.push_back(make_pair(name_, value_)); |
| 502 return result; |
| 503 } |
| 504 |
| 505 // |
| 506 // WebRequestRemoveResponseHeaderAction |
| 507 // |
| 508 |
| 509 WebRequestRemoveResponseHeaderAction::WebRequestRemoveResponseHeaderAction( |
| 510 const std::string& name, |
| 511 const std::string& value, |
| 512 bool has_value) |
| 513 : name_(name), |
| 514 value_(value), |
| 515 has_value_(has_value) { |
| 516 } |
| 517 |
| 518 WebRequestRemoveResponseHeaderAction::~WebRequestRemoveResponseHeaderAction() {} |
| 519 |
| 520 int WebRequestRemoveResponseHeaderAction::GetStages() const { |
| 521 return ON_HEADERS_RECEIVED; |
| 522 } |
| 523 |
| 524 WebRequestAction::Type |
| 525 WebRequestRemoveResponseHeaderAction::GetType() const { |
| 526 return WebRequestAction::ACTION_REMOVE_RESPONSE_HEADER; |
| 527 } |
| 528 |
| 529 LinkedPtrEventResponseDelta |
| 530 WebRequestRemoveResponseHeaderAction::CreateDelta( |
| 531 net::URLRequest* request, |
| 532 RequestStages request_stage, |
| 533 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 534 const std::string& extension_id, |
| 535 const base::Time& extension_install_time) const { |
| 536 CHECK(request_stage & GetStages()); |
| 537 LinkedPtrEventResponseDelta result( |
| 538 new extension_web_request_api_helpers::EventResponseDelta( |
| 539 extension_id, extension_install_time)); |
| 540 net::HttpResponseHeaders* headers = |
| 541 optional_request_data.original_response_headers; |
| 542 if (!headers) |
| 543 return result; |
| 544 void* iter = NULL; |
| 545 std::string current_value; |
| 546 while (headers->EnumerateHeader(&iter, name_, ¤t_value)) { |
| 547 if (has_value_ && |
| 548 (current_value.size() != value_.size() || |
| 549 !std::equal(current_value.begin(), current_value.end(), |
| 550 value_.begin(), |
| 551 base::CaseInsensitiveCompare<char>()))) { |
| 552 continue; |
| 553 } |
| 554 result->deleted_response_headers.push_back(make_pair(name_, current_value)); |
| 555 } |
| 556 return result; |
| 557 } |
| 558 |
| 559 // |
| 422 // WebRequestIgnoreRulesAction | 560 // WebRequestIgnoreRulesAction |
| 423 // | 561 // |
| 424 | 562 |
| 425 WebRequestIgnoreRulesAction::WebRequestIgnoreRulesAction( | 563 WebRequestIgnoreRulesAction::WebRequestIgnoreRulesAction( |
| 426 int minimum_priority) | 564 int minimum_priority) |
| 427 : minimum_priority_(minimum_priority) { | 565 : minimum_priority_(minimum_priority) { |
| 428 } | 566 } |
| 429 | 567 |
| 430 WebRequestIgnoreRulesAction::~WebRequestIgnoreRulesAction() {} | 568 WebRequestIgnoreRulesAction::~WebRequestIgnoreRulesAction() {} |
| 431 | 569 |
| 432 int WebRequestIgnoreRulesAction::GetStages() const { | 570 int WebRequestIgnoreRulesAction::GetStages() const { |
| 433 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | | 571 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | |
| 434 ON_AUTH_REQUIRED; | 572 ON_AUTH_REQUIRED; |
| 435 } | 573 } |
| 436 | 574 |
| 437 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { | 575 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { |
| 438 return WebRequestAction::ACTION_IGNORE_RULES; | 576 return WebRequestAction::ACTION_IGNORE_RULES; |
| 439 } | 577 } |
| 440 | 578 |
| 441 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { | 579 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { |
| 442 return minimum_priority_; | 580 return minimum_priority_; |
| 443 } | 581 } |
| 444 | 582 |
| 445 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( | 583 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( |
| 446 net::URLRequest* request, | 584 net::URLRequest* request, |
| 447 RequestStages request_stage, | 585 RequestStages request_stage, |
| 586 const WebRequestRule::OptionalRequestData& optional_request_data, |
| 448 const std::string& extension_id, | 587 const std::string& extension_id, |
| 449 const base::Time& extension_install_time) const { | 588 const base::Time& extension_install_time) const { |
| 450 CHECK(request_stage & GetStages()); | 589 CHECK(request_stage & GetStages()); |
| 451 return LinkedPtrEventResponseDelta(NULL); | 590 return LinkedPtrEventResponseDelta(NULL); |
| 452 } | 591 } |
| 453 | 592 |
| 454 } // namespace extensions | 593 } // namespace extensions |
| OLD | NEW |