| 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" |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 struct WebRequestActionFactory { | 322 struct WebRequestActionFactory { |
| 323 // Factory methods for WebRequestAction instances. |dict| contains the json | 323 // Factory methods for WebRequestAction instances. |dict| contains the json |
| 324 // dictionary that describes the action. |error| is used to return error | 324 // dictionary that describes the action. |error| is used to return error |
| 325 // messages in case the extension passed an action that was syntactically | 325 // messages in case the extension passed an action that was syntactically |
| 326 // correct but semantically incorrect. |bad_message| is set to true in case | 326 // correct but semantically incorrect. |bad_message| is set to true in case |
| 327 // |dict| does not confirm to the validated JSON specification. | 327 // |dict| does not confirm to the validated JSON specification. |
| 328 typedef scoped_ptr<WebRequestAction> | 328 typedef scoped_ptr<WebRequestAction> |
| 329 (* FactoryMethod)(const base::DictionaryValue* /* dict */ , | 329 (* FactoryMethod)(const base::DictionaryValue* /* dict */ , |
| 330 std::string* /* error */, | 330 std::string* /* error */, |
| 331 bool* /* bad_message */); | 331 bool* /* bad_message */); |
| 332 |
| 333 typedef std::map<WebRequestAction::Type, const std::string> ActionNames; |
| 334 |
| 332 // Maps the name of a declarativeWebRequest action type to the factory | 335 // Maps the name of a declarativeWebRequest action type to the factory |
| 333 // function creating it. | 336 // function creating it. |
| 334 std::map<std::string, FactoryMethod> factory_methods; | 337 std::map<std::string, FactoryMethod> factory_methods; |
| 335 | 338 |
| 339 // Translates action types into the corresponding JavaScript names. |
| 340 ActionNames action_names; |
| 341 |
| 336 WebRequestActionFactory() { | 342 WebRequestActionFactory() { |
| 337 factory_methods[keys::kAddRequestCookieType] = | 343 factory_methods[keys::kAddRequestCookieType] = |
| 338 &CreateRequestCookieAction; | 344 &CreateRequestCookieAction; |
| 339 factory_methods[keys::kAddResponseCookieType] = | 345 factory_methods[keys::kAddResponseCookieType] = |
| 340 &CreateResponseCookieAction; | 346 &CreateResponseCookieAction; |
| 341 factory_methods[keys::kAddResponseHeaderType] = | 347 factory_methods[keys::kAddResponseHeaderType] = |
| 342 &CreateAddResponseHeaderAction; | 348 &CreateAddResponseHeaderAction; |
| 343 factory_methods[keys::kCancelRequestType] = | 349 factory_methods[keys::kCancelRequestType] = |
| 344 &CallConstructorFactoryMethod<WebRequestCancelAction>; | 350 &CallConstructorFactoryMethod<WebRequestCancelAction>; |
| 345 factory_methods[keys::kEditRequestCookieType] = | 351 factory_methods[keys::kEditRequestCookieType] = |
| (...skipping 16 matching lines...) Expand all Loading... |
| 362 factory_methods[keys::kSetRequestHeaderType] = | 368 factory_methods[keys::kSetRequestHeaderType] = |
| 363 &CreateSetRequestHeaderAction; | 369 &CreateSetRequestHeaderAction; |
| 364 factory_methods[keys::kRemoveRequestHeaderType] = | 370 factory_methods[keys::kRemoveRequestHeaderType] = |
| 365 &CreateRemoveRequestHeaderAction; | 371 &CreateRemoveRequestHeaderAction; |
| 366 factory_methods[keys::kRemoveResponseHeaderType] = | 372 factory_methods[keys::kRemoveResponseHeaderType] = |
| 367 &CreateRemoveResponseHeaderAction; | 373 &CreateRemoveResponseHeaderAction; |
| 368 factory_methods[keys::kIgnoreRulesType] = | 374 factory_methods[keys::kIgnoreRulesType] = |
| 369 &CreateIgnoreRulesAction; | 375 &CreateIgnoreRulesAction; |
| 370 factory_methods[keys::kSendMessageToExtensionType] = | 376 factory_methods[keys::kSendMessageToExtensionType] = |
| 371 &CreateSendMessageToExtensionAction; | 377 &CreateSendMessageToExtensionAction; |
| 378 |
| 379 #define INSERT_ACTION_NAME(type, name) \ |
| 380 action_names.insert(ActionNames::value_type(type, name)); |
| 381 std::vector<std::string> names_buffer; |
| 382 names_buffer.push_back(keys::kAddRequestCookieType); |
| 383 names_buffer.push_back(keys::kEditRequestCookieType); |
| 384 names_buffer.push_back(keys::kRemoveRequestCookieType); |
| 385 INSERT_ACTION_NAME(WebRequestAction::ACTION_MODIFY_REQUEST_COOKIE, |
| 386 JoinString(names_buffer, ", ")); |
| 387 names_buffer.clear(); |
| 388 names_buffer.push_back(keys::kAddResponseCookieType); |
| 389 names_buffer.push_back(keys::kEditResponseCookieType); |
| 390 names_buffer.push_back(keys::kRemoveResponseCookieType); |
| 391 INSERT_ACTION_NAME(WebRequestAction::ACTION_MODIFY_RESPONSE_COOKIE, |
| 392 JoinString(names_buffer, ", ")); |
| 393 INSERT_ACTION_NAME(WebRequestAction::ACTION_ADD_RESPONSE_HEADER, |
| 394 keys::kAddResponseHeaderType); |
| 395 INSERT_ACTION_NAME(WebRequestAction::ACTION_CANCEL_REQUEST, |
| 396 keys::kCancelRequestType); |
| 397 INSERT_ACTION_NAME(WebRequestAction::ACTION_REDIRECT_BY_REGEX_DOCUMENT, |
| 398 keys::kRedirectByRegExType); |
| 399 INSERT_ACTION_NAME(WebRequestAction::ACTION_REDIRECT_REQUEST, |
| 400 keys::kRedirectRequestType); |
| 401 INSERT_ACTION_NAME(WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE, |
| 402 keys::kRedirectToTransparentImageType); |
| 403 INSERT_ACTION_NAME(WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT, |
| 404 keys::kRedirectToEmptyDocumentType); |
| 405 INSERT_ACTION_NAME(WebRequestAction::ACTION_SET_REQUEST_HEADER, |
| 406 keys::kSetRequestHeaderType); |
| 407 INSERT_ACTION_NAME(WebRequestAction::ACTION_REMOVE_REQUEST_HEADER, |
| 408 keys::kRemoveRequestHeaderType); |
| 409 INSERT_ACTION_NAME(WebRequestAction::ACTION_REMOVE_RESPONSE_HEADER, |
| 410 keys::kRemoveResponseHeaderType); |
| 411 INSERT_ACTION_NAME(WebRequestAction::ACTION_IGNORE_RULES, |
| 412 keys::kIgnoreRulesType); |
| 413 INSERT_ACTION_NAME(WebRequestAction::ACTION_SEND_MESSAGE_TO_EXTENSION, |
| 414 keys::kSendMessageToExtensionType); |
| 415 #undef INSERT_ACTION_NAME |
| 372 } | 416 } |
| 373 }; | 417 }; |
| 374 | 418 |
| 375 base::LazyInstance<WebRequestActionFactory>::Leaky | 419 base::LazyInstance<WebRequestActionFactory>::Leaky |
| 376 g_web_request_action_factory = LAZY_INSTANCE_INITIALIZER; | 420 g_web_request_action_factory = LAZY_INSTANCE_INITIALIZER; |
| 377 | 421 |
| 378 } // namespace | 422 } // namespace |
| 379 | 423 |
| 380 // | 424 // |
| 381 // WebRequestAction | 425 // WebRequestAction |
| 382 // | 426 // |
| 383 | 427 |
| 384 WebRequestAction::WebRequestAction() {} | 428 WebRequestAction::~WebRequestAction() {} |
| 385 | 429 |
| 386 WebRequestAction::~WebRequestAction() {} | 430 const std::string& WebRequestAction::GetName() const { |
| 431 const WebRequestActionFactory::ActionNames& names = |
| 432 g_web_request_action_factory.Get().action_names; |
| 433 std::map<WebRequestAction::Type, const std::string>::const_iterator it = |
| 434 names.find(GetType()); |
| 435 CHECK(it != names.end()); |
| 436 return it->second; |
| 437 } |
| 387 | 438 |
| 388 int WebRequestAction::GetMinimumPriority() const { | 439 int WebRequestAction::GetMinimumPriority() const { |
| 389 return std::numeric_limits<int>::min(); | 440 return std::numeric_limits<int>::min(); |
| 390 } | 441 } |
| 391 | 442 |
| 392 WebRequestAction::HostPermissionsStrategy | |
| 393 WebRequestAction::GetHostPermissionsStrategy() const { | |
| 394 return STRATEGY_DEFAULT; | |
| 395 } | |
| 396 | |
| 397 bool WebRequestAction::HasPermission(const ExtensionInfoMap* extension_info_map, | 443 bool WebRequestAction::HasPermission(const ExtensionInfoMap* extension_info_map, |
| 398 const std::string& extension_id, | 444 const std::string& extension_id, |
| 399 const net::URLRequest* request, | 445 const net::URLRequest* request, |
| 400 bool crosses_incognito) const { | 446 bool crosses_incognito) const { |
| 401 if (WebRequestPermissions::HideRequest(extension_info_map, request)) | 447 if (WebRequestPermissions::HideRequest(extension_info_map, request)) |
| 402 return false; | 448 return false; |
| 403 | 449 |
| 404 // In unit tests we don't have an extension_info_map object here and skip host | 450 // In unit tests we don't have an extension_info_map object here and skip host |
| 405 // permission checks. | 451 // permission checks. |
| 406 if (!extension_info_map) | 452 if (!extension_info_map) |
| 407 return true; | 453 return true; |
| 408 | 454 |
| 409 HostPermissionsStrategy strategy = GetHostPermissionsStrategy(); | 455 WebRequestPermissions::HostPermissionsCheck permission_check = |
| 410 if (strategy == STRATEGY_NONE || strategy == STRATEGY_DEFAULT) { | 456 WebRequestPermissions::REQUIRE_ALL_URLS; |
| 411 bool check_host_permissions = strategy != STRATEGY_NONE; | 457 switch (host_permissions_strategy()) { |
| 412 return WebRequestPermissions::CanExtensionAccessURL( | 458 case STRATEGY_DEFAULT: // Default value is already set. |
| 413 extension_info_map, extension_id, request->url(), crosses_incognito, | 459 break; |
| 414 check_host_permissions); | 460 case STRATEGY_NONE: |
| 461 permission_check = WebRequestPermissions::DO_NOT_CHECK_HOST; |
| 462 break; |
| 463 case STRATEGY_HOST: |
| 464 permission_check = WebRequestPermissions::REQUIRE_HOST_PERMISSION; |
| 465 break; |
| 415 } | 466 } |
| 416 return true; | 467 return WebRequestPermissions::CanExtensionAccessURL( |
| 417 } | 468 extension_info_map, extension_id, request->url(), crosses_incognito, |
| 418 | 469 permission_check); |
| 419 bool WebRequestAction::DeltaHasPermission( | |
| 420 const ExtensionInfoMap* extension_info_map, | |
| 421 const std::string& extension_id, | |
| 422 const net::URLRequest* request, | |
| 423 bool crosses_incognito, | |
| 424 const LinkedPtrEventResponseDelta& delta) const { | |
| 425 if (GetHostPermissionsStrategy() == STRATEGY_ALLOW_SAME_DOMAIN) { | |
| 426 return | |
| 427 net::RegistryControlledDomainService::SameDomainOrHost( | |
| 428 request->url(), delta->new_url) || | |
| 429 WebRequestPermissions::CanExtensionAccessURL( | |
| 430 extension_info_map, extension_id, request->url(), crosses_incognito, | |
| 431 true); | |
| 432 } | |
| 433 return true; | |
| 434 } | 470 } |
| 435 | 471 |
| 436 // static | 472 // static |
| 437 scoped_ptr<WebRequestAction> WebRequestAction::Create( | 473 scoped_ptr<WebRequestAction> WebRequestAction::Create( |
| 438 const base::Value& json_action, | 474 const base::Value& json_action, |
| 439 std::string* error, | 475 std::string* error, |
| 440 bool* bad_message) { | 476 bool* bad_message) { |
| 441 *error = ""; | 477 *error = ""; |
| 442 *bad_message = false; | 478 *bad_message = false; |
| 443 | 479 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 461 void WebRequestAction::Apply(const std::string& extension_id, | 497 void WebRequestAction::Apply(const std::string& extension_id, |
| 462 base::Time extension_install_time, | 498 base::Time extension_install_time, |
| 463 ApplyInfo* apply_info) const { | 499 ApplyInfo* apply_info) const { |
| 464 if (!HasPermission(apply_info->extension_info_map, extension_id, | 500 if (!HasPermission(apply_info->extension_info_map, extension_id, |
| 465 apply_info->request_data.request, | 501 apply_info->request_data.request, |
| 466 apply_info->crosses_incognito)) | 502 apply_info->crosses_incognito)) |
| 467 return; | 503 return; |
| 468 if (GetStages() & apply_info->request_data.stage) { | 504 if (GetStages() & apply_info->request_data.stage) { |
| 469 LinkedPtrEventResponseDelta delta = CreateDelta( | 505 LinkedPtrEventResponseDelta delta = CreateDelta( |
| 470 apply_info->request_data, extension_id, extension_install_time); | 506 apply_info->request_data, extension_id, extension_install_time); |
| 471 if (delta.get()) { | 507 if (delta.get()) |
| 472 if (DeltaHasPermission(apply_info->extension_info_map, extension_id, | 508 apply_info->deltas->push_back(delta); |
| 473 apply_info->request_data.request, | |
| 474 apply_info->crosses_incognito, | |
| 475 delta)) | |
| 476 apply_info->deltas->push_back(delta); | |
| 477 } | |
| 478 if (GetType() == WebRequestAction::ACTION_IGNORE_RULES) { | 509 if (GetType() == WebRequestAction::ACTION_IGNORE_RULES) { |
| 479 const WebRequestIgnoreRulesAction* ignore_action = | 510 const WebRequestIgnoreRulesAction* ignore_action = |
| 480 static_cast<const WebRequestIgnoreRulesAction*>(this); | 511 static_cast<const WebRequestIgnoreRulesAction*>(this); |
| 481 if (!ignore_action->ignore_tag().empty()) | 512 if (!ignore_action->ignore_tag().empty()) |
| 482 apply_info->ignored_tags->insert(ignore_action->ignore_tag()); | 513 apply_info->ignored_tags->insert(ignore_action->ignore_tag()); |
| 483 } | 514 } |
| 484 } | 515 } |
| 485 } | 516 } |
| 486 | 517 |
| 518 WebRequestAction::WebRequestAction(HostPermissionsStrategy strategy) |
| 519 : host_permissions_strategy_(strategy) {} |
| 487 | 520 |
| 488 // | 521 // |
| 489 // WebRequestCancelAction | 522 // WebRequestCancelAction |
| 490 // | 523 // |
| 491 | 524 |
| 492 WebRequestCancelAction::WebRequestCancelAction() {} | 525 WebRequestCancelAction::WebRequestCancelAction() |
| 526 : WebRequestAction(STRATEGY_NONE) {} |
| 493 | 527 |
| 494 WebRequestCancelAction::~WebRequestCancelAction() {} | 528 WebRequestCancelAction::~WebRequestCancelAction() {} |
| 495 | 529 |
| 496 int WebRequestCancelAction::GetStages() const { | 530 int WebRequestCancelAction::GetStages() const { |
| 497 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | | 531 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | |
| 498 ON_AUTH_REQUIRED; | 532 ON_AUTH_REQUIRED; |
| 499 } | 533 } |
| 500 | 534 |
| 501 WebRequestAction::Type WebRequestCancelAction::GetType() const { | 535 WebRequestAction::Type WebRequestCancelAction::GetType() const { |
| 502 return WebRequestAction::ACTION_CANCEL_REQUEST; | 536 return WebRequestAction::ACTION_CANCEL_REQUEST; |
| 503 } | 537 } |
| 504 | 538 |
| 505 WebRequestAction::HostPermissionsStrategy | |
| 506 WebRequestCancelAction::GetHostPermissionsStrategy() const { | |
| 507 return WebRequestAction::STRATEGY_NONE; | |
| 508 } | |
| 509 | |
| 510 LinkedPtrEventResponseDelta WebRequestCancelAction::CreateDelta( | 539 LinkedPtrEventResponseDelta WebRequestCancelAction::CreateDelta( |
| 511 const WebRequestData& request_data, | 540 const WebRequestData& request_data, |
| 512 const std::string& extension_id, | 541 const std::string& extension_id, |
| 513 const base::Time& extension_install_time) const { | 542 const base::Time& extension_install_time) const { |
| 514 CHECK(request_data.stage & GetStages()); | 543 CHECK(request_data.stage & GetStages()); |
| 515 LinkedPtrEventResponseDelta result( | 544 LinkedPtrEventResponseDelta result( |
| 516 new helpers::EventResponseDelta(extension_id, extension_install_time)); | 545 new helpers::EventResponseDelta(extension_id, extension_install_time)); |
| 517 result->cancel = true; | 546 result->cancel = true; |
| 518 return result; | 547 return result; |
| 519 } | 548 } |
| 520 | 549 |
| 521 // | 550 // |
| 522 // WebRequestRedirectAction | 551 // WebRequestRedirectAction |
| 523 // | 552 // |
| 524 | 553 |
| 525 WebRequestRedirectAction::WebRequestRedirectAction(const GURL& redirect_url) | 554 WebRequestRedirectAction::WebRequestRedirectAction(const GURL& redirect_url) |
| 526 : redirect_url_(redirect_url) {} | 555 : WebRequestAction(STRATEGY_DEFAULT), redirect_url_(redirect_url) {} |
| 527 | 556 |
| 528 WebRequestRedirectAction::~WebRequestRedirectAction() {} | 557 WebRequestRedirectAction::~WebRequestRedirectAction() {} |
| 529 | 558 |
| 530 int WebRequestRedirectAction::GetStages() const { | 559 int WebRequestRedirectAction::GetStages() const { |
| 531 return ON_BEFORE_REQUEST; | 560 return ON_BEFORE_REQUEST; |
| 532 } | 561 } |
| 533 | 562 |
| 534 WebRequestAction::Type WebRequestRedirectAction::GetType() const { | 563 WebRequestAction::Type WebRequestRedirectAction::GetType() const { |
| 535 return WebRequestAction::ACTION_REDIRECT_REQUEST; | 564 return WebRequestAction::ACTION_REDIRECT_REQUEST; |
| 536 } | 565 } |
| 537 | 566 |
| 538 WebRequestAction::HostPermissionsStrategy | |
| 539 WebRequestRedirectAction::GetHostPermissionsStrategy() const { | |
| 540 return WebRequestAction::STRATEGY_ALLOW_SAME_DOMAIN; | |
| 541 } | |
| 542 | |
| 543 LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta( | 567 LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta( |
| 544 const WebRequestData& request_data, | 568 const WebRequestData& request_data, |
| 545 const std::string& extension_id, | 569 const std::string& extension_id, |
| 546 const base::Time& extension_install_time) const { | 570 const base::Time& extension_install_time) const { |
| 547 CHECK(request_data.stage & GetStages()); | 571 CHECK(request_data.stage & GetStages()); |
| 548 if (request_data.request->url() == redirect_url_) | 572 if (request_data.request->url() == redirect_url_) |
| 549 return LinkedPtrEventResponseDelta(NULL); | 573 return LinkedPtrEventResponseDelta(NULL); |
| 550 LinkedPtrEventResponseDelta result( | 574 LinkedPtrEventResponseDelta result( |
| 551 new helpers::EventResponseDelta(extension_id, extension_install_time)); | 575 new helpers::EventResponseDelta(extension_id, extension_install_time)); |
| 552 result->new_url = redirect_url_; | 576 result->new_url = redirect_url_; |
| 553 return result; | 577 return result; |
| 554 } | 578 } |
| 555 | 579 |
| 556 // | 580 // |
| 557 // WebRequestRedirectToTransparentImageAction | 581 // WebRequestRedirectToTransparentImageAction |
| 558 // | 582 // |
| 559 | 583 |
| 560 WebRequestRedirectToTransparentImageAction:: | 584 WebRequestRedirectToTransparentImageAction:: |
| 561 WebRequestRedirectToTransparentImageAction() {} | 585 WebRequestRedirectToTransparentImageAction() |
| 586 : WebRequestAction(STRATEGY_NONE) {} |
| 562 | 587 |
| 563 WebRequestRedirectToTransparentImageAction:: | 588 WebRequestRedirectToTransparentImageAction:: |
| 564 ~WebRequestRedirectToTransparentImageAction() {} | 589 ~WebRequestRedirectToTransparentImageAction() {} |
| 565 | 590 |
| 566 int WebRequestRedirectToTransparentImageAction::GetStages() const { | 591 int WebRequestRedirectToTransparentImageAction::GetStages() const { |
| 567 return ON_BEFORE_REQUEST; | 592 return ON_BEFORE_REQUEST; |
| 568 } | 593 } |
| 569 | 594 |
| 570 WebRequestAction::Type | 595 WebRequestAction::Type |
| 571 WebRequestRedirectToTransparentImageAction::GetType() const { | 596 WebRequestRedirectToTransparentImageAction::GetType() const { |
| 572 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; | 597 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; |
| 573 } | 598 } |
| 574 | 599 |
| 575 WebRequestAction::HostPermissionsStrategy | |
| 576 WebRequestRedirectToTransparentImageAction::GetHostPermissionsStrategy() const { | |
| 577 return WebRequestAction::STRATEGY_NONE; | |
| 578 } | |
| 579 | |
| 580 LinkedPtrEventResponseDelta | 600 LinkedPtrEventResponseDelta |
| 581 WebRequestRedirectToTransparentImageAction::CreateDelta( | 601 WebRequestRedirectToTransparentImageAction::CreateDelta( |
| 582 const WebRequestData& request_data, | 602 const WebRequestData& request_data, |
| 583 const std::string& extension_id, | 603 const std::string& extension_id, |
| 584 const base::Time& extension_install_time) const { | 604 const base::Time& extension_install_time) const { |
| 585 CHECK(request_data.stage & GetStages()); | 605 CHECK(request_data.stage & GetStages()); |
| 586 LinkedPtrEventResponseDelta result( | 606 LinkedPtrEventResponseDelta result( |
| 587 new helpers::EventResponseDelta(extension_id, extension_install_time)); | 607 new helpers::EventResponseDelta(extension_id, extension_install_time)); |
| 588 result->new_url = GURL(kTransparentImageUrl); | 608 result->new_url = GURL(kTransparentImageUrl); |
| 589 return result; | 609 return result; |
| 590 } | 610 } |
| 591 | 611 |
| 592 // | 612 // |
| 593 // WebRequestRedirectToEmptyDocumentAction | 613 // WebRequestRedirectToEmptyDocumentAction |
| 594 // | 614 // |
| 595 | 615 |
| 596 WebRequestRedirectToEmptyDocumentAction:: | 616 WebRequestRedirectToEmptyDocumentAction:: |
| 597 WebRequestRedirectToEmptyDocumentAction() {} | 617 WebRequestRedirectToEmptyDocumentAction() |
| 618 : WebRequestAction(STRATEGY_NONE) {} |
| 598 | 619 |
| 599 WebRequestRedirectToEmptyDocumentAction:: | 620 WebRequestRedirectToEmptyDocumentAction:: |
| 600 ~WebRequestRedirectToEmptyDocumentAction() {} | 621 ~WebRequestRedirectToEmptyDocumentAction() {} |
| 601 | 622 |
| 602 int WebRequestRedirectToEmptyDocumentAction::GetStages() const { | 623 int WebRequestRedirectToEmptyDocumentAction::GetStages() const { |
| 603 return ON_BEFORE_REQUEST; | 624 return ON_BEFORE_REQUEST; |
| 604 } | 625 } |
| 605 | 626 |
| 606 WebRequestAction::Type | 627 WebRequestAction::Type |
| 607 WebRequestRedirectToEmptyDocumentAction::GetType() const { | 628 WebRequestRedirectToEmptyDocumentAction::GetType() const { |
| 608 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; | 629 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; |
| 609 } | 630 } |
| 610 | 631 |
| 611 WebRequestAction::HostPermissionsStrategy | |
| 612 WebRequestRedirectToEmptyDocumentAction::GetHostPermissionsStrategy() const { | |
| 613 return WebRequestAction::STRATEGY_NONE; | |
| 614 } | |
| 615 | |
| 616 LinkedPtrEventResponseDelta | 632 LinkedPtrEventResponseDelta |
| 617 WebRequestRedirectToEmptyDocumentAction::CreateDelta( | 633 WebRequestRedirectToEmptyDocumentAction::CreateDelta( |
| 618 const WebRequestData& request_data, | 634 const WebRequestData& request_data, |
| 619 const std::string& extension_id, | 635 const std::string& extension_id, |
| 620 const base::Time& extension_install_time) const { | 636 const base::Time& extension_install_time) const { |
| 621 CHECK(request_data.stage & GetStages()); | 637 CHECK(request_data.stage & GetStages()); |
| 622 LinkedPtrEventResponseDelta result( | 638 LinkedPtrEventResponseDelta result( |
| 623 new helpers::EventResponseDelta(extension_id, extension_install_time)); | 639 new helpers::EventResponseDelta(extension_id, extension_install_time)); |
| 624 result->new_url = GURL(kEmptyDocumentUrl); | 640 result->new_url = GURL(kEmptyDocumentUrl); |
| 625 return result; | 641 return result; |
| 626 } | 642 } |
| 627 | 643 |
| 628 // | 644 // |
| 629 // WebRequestRedirectByRegExAction | 645 // WebRequestRedirectByRegExAction |
| 630 // | 646 // |
| 631 | 647 |
| 632 WebRequestRedirectByRegExAction::WebRequestRedirectByRegExAction( | 648 WebRequestRedirectByRegExAction::WebRequestRedirectByRegExAction( |
| 633 scoped_ptr<RE2> from_pattern, | 649 scoped_ptr<RE2> from_pattern, |
| 634 const std::string& to_pattern) | 650 const std::string& to_pattern) |
| 635 : from_pattern_(from_pattern.Pass()), | 651 : WebRequestAction(STRATEGY_DEFAULT), |
| 652 from_pattern_(from_pattern.Pass()), |
| 636 to_pattern_(to_pattern.data(), to_pattern.size()) {} | 653 to_pattern_(to_pattern.data(), to_pattern.size()) {} |
| 637 | 654 |
| 638 WebRequestRedirectByRegExAction::~WebRequestRedirectByRegExAction() {} | 655 WebRequestRedirectByRegExAction::~WebRequestRedirectByRegExAction() {} |
| 639 | 656 |
| 640 // About the syntax of the two languages: | 657 // About the syntax of the two languages: |
| 641 // | 658 // |
| 642 // ICU (Perl) states: | 659 // ICU (Perl) states: |
| 643 // $n The text of capture group n will be substituted for $n. n must be >= 0 | 660 // $n The text of capture group n will be substituted for $n. n must be >= 0 |
| 644 // and not greater than the number of capture groups. A $ not followed by a | 661 // and not greater than the number of capture groups. A $ not followed by a |
| 645 // digit has no special meaning, and will appear in the substitution text | 662 // digit has no special meaning, and will appear in the substitution text |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 } | 708 } |
| 692 | 709 |
| 693 int WebRequestRedirectByRegExAction::GetStages() const { | 710 int WebRequestRedirectByRegExAction::GetStages() const { |
| 694 return ON_BEFORE_REQUEST; | 711 return ON_BEFORE_REQUEST; |
| 695 } | 712 } |
| 696 | 713 |
| 697 WebRequestAction::Type WebRequestRedirectByRegExAction::GetType() const { | 714 WebRequestAction::Type WebRequestRedirectByRegExAction::GetType() const { |
| 698 return WebRequestAction::ACTION_REDIRECT_BY_REGEX_DOCUMENT; | 715 return WebRequestAction::ACTION_REDIRECT_BY_REGEX_DOCUMENT; |
| 699 } | 716 } |
| 700 | 717 |
| 701 WebRequestAction::HostPermissionsStrategy | |
| 702 WebRequestRedirectByRegExAction::GetHostPermissionsStrategy() const { | |
| 703 return WebRequestAction::STRATEGY_ALLOW_SAME_DOMAIN; | |
| 704 } | |
| 705 | |
| 706 LinkedPtrEventResponseDelta WebRequestRedirectByRegExAction::CreateDelta( | 718 LinkedPtrEventResponseDelta WebRequestRedirectByRegExAction::CreateDelta( |
| 707 const WebRequestData& request_data, | 719 const WebRequestData& request_data, |
| 708 const std::string& extension_id, | 720 const std::string& extension_id, |
| 709 const base::Time& extension_install_time) const { | 721 const base::Time& extension_install_time) const { |
| 710 CHECK(request_data.stage & GetStages()); | 722 CHECK(request_data.stage & GetStages()); |
| 711 CHECK(from_pattern_.get()); | 723 CHECK(from_pattern_.get()); |
| 712 | 724 |
| 713 const std::string& old_url = request_data.request->url().spec(); | 725 const std::string& old_url = request_data.request->url().spec(); |
| 714 std::string new_url = old_url; | 726 std::string new_url = old_url; |
| 715 if (!RE2::Replace(&new_url, *from_pattern_, to_pattern_) || | 727 if (!RE2::Replace(&new_url, *from_pattern_, to_pattern_) || |
| 716 new_url == old_url) { | 728 new_url == old_url) { |
| 717 return LinkedPtrEventResponseDelta(NULL); | 729 return LinkedPtrEventResponseDelta(NULL); |
| 718 } | 730 } |
| 719 | 731 |
| 720 LinkedPtrEventResponseDelta result( | 732 LinkedPtrEventResponseDelta result( |
| 721 new extension_web_request_api_helpers::EventResponseDelta( | 733 new extension_web_request_api_helpers::EventResponseDelta( |
| 722 extension_id, extension_install_time)); | 734 extension_id, extension_install_time)); |
| 723 result->new_url = GURL(new_url); | 735 result->new_url = GURL(new_url); |
| 724 return result; | 736 return result; |
| 725 } | 737 } |
| 726 | 738 |
| 727 // | 739 // |
| 728 // WebRequestSetRequestHeaderAction | 740 // WebRequestSetRequestHeaderAction |
| 729 // | 741 // |
| 730 | 742 |
| 731 WebRequestSetRequestHeaderAction::WebRequestSetRequestHeaderAction( | 743 WebRequestSetRequestHeaderAction::WebRequestSetRequestHeaderAction( |
| 732 const std::string& name, | 744 const std::string& name, |
| 733 const std::string& value) | 745 const std::string& value) |
| 734 : name_(name), | 746 : WebRequestAction(STRATEGY_DEFAULT), name_(name), value_(value) {} |
| 735 value_(value) { | |
| 736 } | |
| 737 | 747 |
| 738 WebRequestSetRequestHeaderAction::~WebRequestSetRequestHeaderAction() {} | 748 WebRequestSetRequestHeaderAction::~WebRequestSetRequestHeaderAction() {} |
| 739 | 749 |
| 740 int WebRequestSetRequestHeaderAction::GetStages() const { | 750 int WebRequestSetRequestHeaderAction::GetStages() const { |
| 741 return ON_BEFORE_SEND_HEADERS; | 751 return ON_BEFORE_SEND_HEADERS; |
| 742 } | 752 } |
| 743 | 753 |
| 744 WebRequestAction::Type | 754 WebRequestAction::Type |
| 745 WebRequestSetRequestHeaderAction::GetType() const { | 755 WebRequestSetRequestHeaderAction::GetType() const { |
| 746 return WebRequestAction::ACTION_SET_REQUEST_HEADER; | 756 return WebRequestAction::ACTION_SET_REQUEST_HEADER; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 757 result->modified_request_headers.SetHeader(name_, value_); | 767 result->modified_request_headers.SetHeader(name_, value_); |
| 758 return result; | 768 return result; |
| 759 } | 769 } |
| 760 | 770 |
| 761 // | 771 // |
| 762 // WebRequestRemoveRequestHeaderAction | 772 // WebRequestRemoveRequestHeaderAction |
| 763 // | 773 // |
| 764 | 774 |
| 765 WebRequestRemoveRequestHeaderAction::WebRequestRemoveRequestHeaderAction( | 775 WebRequestRemoveRequestHeaderAction::WebRequestRemoveRequestHeaderAction( |
| 766 const std::string& name) | 776 const std::string& name) |
| 767 : name_(name) { | 777 : WebRequestAction(STRATEGY_DEFAULT), name_(name) {} |
| 768 } | |
| 769 | 778 |
| 770 WebRequestRemoveRequestHeaderAction::~WebRequestRemoveRequestHeaderAction() {} | 779 WebRequestRemoveRequestHeaderAction::~WebRequestRemoveRequestHeaderAction() {} |
| 771 | 780 |
| 772 int WebRequestRemoveRequestHeaderAction::GetStages() const { | 781 int WebRequestRemoveRequestHeaderAction::GetStages() const { |
| 773 return ON_BEFORE_SEND_HEADERS; | 782 return ON_BEFORE_SEND_HEADERS; |
| 774 } | 783 } |
| 775 | 784 |
| 776 WebRequestAction::Type | 785 WebRequestAction::Type |
| 777 WebRequestRemoveRequestHeaderAction::GetType() const { | 786 WebRequestRemoveRequestHeaderAction::GetType() const { |
| 778 return WebRequestAction::ACTION_REMOVE_REQUEST_HEADER; | 787 return WebRequestAction::ACTION_REMOVE_REQUEST_HEADER; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 790 return result; | 799 return result; |
| 791 } | 800 } |
| 792 | 801 |
| 793 // | 802 // |
| 794 // WebRequestAddResponseHeaderAction | 803 // WebRequestAddResponseHeaderAction |
| 795 // | 804 // |
| 796 | 805 |
| 797 WebRequestAddResponseHeaderAction::WebRequestAddResponseHeaderAction( | 806 WebRequestAddResponseHeaderAction::WebRequestAddResponseHeaderAction( |
| 798 const std::string& name, | 807 const std::string& name, |
| 799 const std::string& value) | 808 const std::string& value) |
| 800 : name_(name), | 809 : WebRequestAction(STRATEGY_DEFAULT), name_(name), value_(value) {} |
| 801 value_(value) { | |
| 802 } | |
| 803 | 810 |
| 804 WebRequestAddResponseHeaderAction::~WebRequestAddResponseHeaderAction() {} | 811 WebRequestAddResponseHeaderAction::~WebRequestAddResponseHeaderAction() {} |
| 805 | 812 |
| 806 int WebRequestAddResponseHeaderAction::GetStages() const { | 813 int WebRequestAddResponseHeaderAction::GetStages() const { |
| 807 return ON_HEADERS_RECEIVED; | 814 return ON_HEADERS_RECEIVED; |
| 808 } | 815 } |
| 809 | 816 |
| 810 WebRequestAction::Type | 817 WebRequestAction::Type |
| 811 WebRequestAddResponseHeaderAction::GetType() const { | 818 WebRequestAddResponseHeaderAction::GetType() const { |
| 812 return WebRequestAction::ACTION_ADD_RESPONSE_HEADER; | 819 return WebRequestAction::ACTION_ADD_RESPONSE_HEADER; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 834 } | 841 } |
| 835 | 842 |
| 836 // | 843 // |
| 837 // WebRequestRemoveResponseHeaderAction | 844 // WebRequestRemoveResponseHeaderAction |
| 838 // | 845 // |
| 839 | 846 |
| 840 WebRequestRemoveResponseHeaderAction::WebRequestRemoveResponseHeaderAction( | 847 WebRequestRemoveResponseHeaderAction::WebRequestRemoveResponseHeaderAction( |
| 841 const std::string& name, | 848 const std::string& name, |
| 842 const std::string& value, | 849 const std::string& value, |
| 843 bool has_value) | 850 bool has_value) |
| 844 : name_(name), | 851 : WebRequestAction(STRATEGY_DEFAULT), |
| 852 name_(name), |
| 845 value_(value), | 853 value_(value), |
| 846 has_value_(has_value) { | 854 has_value_(has_value) {} |
| 847 } | |
| 848 | 855 |
| 849 WebRequestRemoveResponseHeaderAction::~WebRequestRemoveResponseHeaderAction() {} | 856 WebRequestRemoveResponseHeaderAction::~WebRequestRemoveResponseHeaderAction() {} |
| 850 | 857 |
| 851 int WebRequestRemoveResponseHeaderAction::GetStages() const { | 858 int WebRequestRemoveResponseHeaderAction::GetStages() const { |
| 852 return ON_HEADERS_RECEIVED; | 859 return ON_HEADERS_RECEIVED; |
| 853 } | 860 } |
| 854 | 861 |
| 855 WebRequestAction::Type | 862 WebRequestAction::Type |
| 856 WebRequestRemoveResponseHeaderAction::GetType() const { | 863 WebRequestRemoveResponseHeaderAction::GetType() const { |
| 857 return WebRequestAction::ACTION_REMOVE_RESPONSE_HEADER; | 864 return WebRequestAction::ACTION_REMOVE_RESPONSE_HEADER; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 885 return result; | 892 return result; |
| 886 } | 893 } |
| 887 | 894 |
| 888 // | 895 // |
| 889 // WebRequestIgnoreRulesAction | 896 // WebRequestIgnoreRulesAction |
| 890 // | 897 // |
| 891 | 898 |
| 892 WebRequestIgnoreRulesAction::WebRequestIgnoreRulesAction( | 899 WebRequestIgnoreRulesAction::WebRequestIgnoreRulesAction( |
| 893 int minimum_priority, | 900 int minimum_priority, |
| 894 const std::string& ignore_tag) | 901 const std::string& ignore_tag) |
| 895 : minimum_priority_(minimum_priority), | 902 : WebRequestAction(STRATEGY_NONE), |
| 896 ignore_tag_(ignore_tag) { | 903 minimum_priority_(minimum_priority), |
| 897 } | 904 ignore_tag_(ignore_tag) {} |
| 898 | 905 |
| 899 WebRequestIgnoreRulesAction::~WebRequestIgnoreRulesAction() {} | 906 WebRequestIgnoreRulesAction::~WebRequestIgnoreRulesAction() {} |
| 900 | 907 |
| 901 int WebRequestIgnoreRulesAction::GetStages() const { | 908 int WebRequestIgnoreRulesAction::GetStages() const { |
| 902 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | | 909 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | |
| 903 ON_AUTH_REQUIRED; | 910 ON_AUTH_REQUIRED; |
| 904 } | 911 } |
| 905 | 912 |
| 906 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { | 913 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { |
| 907 return WebRequestAction::ACTION_IGNORE_RULES; | 914 return WebRequestAction::ACTION_IGNORE_RULES; |
| 908 } | 915 } |
| 909 | 916 |
| 910 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { | 917 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { |
| 911 return minimum_priority_; | 918 return minimum_priority_; |
| 912 } | 919 } |
| 913 | 920 |
| 914 WebRequestAction::HostPermissionsStrategy | |
| 915 WebRequestIgnoreRulesAction::GetHostPermissionsStrategy() const { | |
| 916 return WebRequestAction::STRATEGY_NONE; | |
| 917 } | |
| 918 | |
| 919 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( | 921 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( |
| 920 const WebRequestData& request_data, | 922 const WebRequestData& request_data, |
| 921 const std::string& extension_id, | 923 const std::string& extension_id, |
| 922 const base::Time& extension_install_time) const { | 924 const base::Time& extension_install_time) const { |
| 923 CHECK(request_data.stage & GetStages()); | 925 CHECK(request_data.stage & GetStages()); |
| 924 return LinkedPtrEventResponseDelta(NULL); | 926 return LinkedPtrEventResponseDelta(NULL); |
| 925 } | 927 } |
| 926 | 928 |
| 927 // | 929 // |
| 928 // WebRequestRequestCookieAction | 930 // WebRequestRequestCookieAction |
| 929 // | 931 // |
| 930 | 932 |
| 931 WebRequestRequestCookieAction::WebRequestRequestCookieAction( | 933 WebRequestRequestCookieAction::WebRequestRequestCookieAction( |
| 932 linked_ptr<RequestCookieModification> request_cookie_modification) | 934 linked_ptr<RequestCookieModification> request_cookie_modification) |
| 933 : request_cookie_modification_(request_cookie_modification) { | 935 : WebRequestAction(STRATEGY_DEFAULT), |
| 936 request_cookie_modification_(request_cookie_modification) { |
| 934 CHECK(request_cookie_modification_.get()); | 937 CHECK(request_cookie_modification_.get()); |
| 935 } | 938 } |
| 936 | 939 |
| 937 WebRequestRequestCookieAction::~WebRequestRequestCookieAction() {} | 940 WebRequestRequestCookieAction::~WebRequestRequestCookieAction() {} |
| 938 | 941 |
| 939 int WebRequestRequestCookieAction::GetStages() const { | 942 int WebRequestRequestCookieAction::GetStages() const { |
| 940 return ON_BEFORE_SEND_HEADERS; | 943 return ON_BEFORE_SEND_HEADERS; |
| 941 } | 944 } |
| 942 | 945 |
| 943 WebRequestAction::Type WebRequestRequestCookieAction::GetType() const { | 946 WebRequestAction::Type WebRequestRequestCookieAction::GetType() const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 956 request_cookie_modification_); | 959 request_cookie_modification_); |
| 957 return result; | 960 return result; |
| 958 } | 961 } |
| 959 | 962 |
| 960 // | 963 // |
| 961 // WebRequestResponseCookieAction | 964 // WebRequestResponseCookieAction |
| 962 // | 965 // |
| 963 | 966 |
| 964 WebRequestResponseCookieAction::WebRequestResponseCookieAction( | 967 WebRequestResponseCookieAction::WebRequestResponseCookieAction( |
| 965 linked_ptr<ResponseCookieModification> response_cookie_modification) | 968 linked_ptr<ResponseCookieModification> response_cookie_modification) |
| 966 : response_cookie_modification_(response_cookie_modification) { | 969 : WebRequestAction(STRATEGY_DEFAULT), |
| 970 response_cookie_modification_(response_cookie_modification) { |
| 967 CHECK(response_cookie_modification_.get()); | 971 CHECK(response_cookie_modification_.get()); |
| 968 } | 972 } |
| 969 | 973 |
| 970 WebRequestResponseCookieAction::~WebRequestResponseCookieAction() {} | 974 WebRequestResponseCookieAction::~WebRequestResponseCookieAction() {} |
| 971 | 975 |
| 972 int WebRequestResponseCookieAction::GetStages() const { | 976 int WebRequestResponseCookieAction::GetStages() const { |
| 973 return ON_HEADERS_RECEIVED; | 977 return ON_HEADERS_RECEIVED; |
| 974 } | 978 } |
| 975 | 979 |
| 976 WebRequestAction::Type WebRequestResponseCookieAction::GetType() const { | 980 WebRequestAction::Type WebRequestResponseCookieAction::GetType() const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 989 response_cookie_modification_); | 993 response_cookie_modification_); |
| 990 return result; | 994 return result; |
| 991 } | 995 } |
| 992 | 996 |
| 993 // | 997 // |
| 994 // WebRequestSendMessageToExtensionAction | 998 // WebRequestSendMessageToExtensionAction |
| 995 // | 999 // |
| 996 | 1000 |
| 997 WebRequestSendMessageToExtensionAction::WebRequestSendMessageToExtensionAction( | 1001 WebRequestSendMessageToExtensionAction::WebRequestSendMessageToExtensionAction( |
| 998 const std::string& message) | 1002 const std::string& message) |
| 999 : message_(message) { | 1003 : WebRequestAction(STRATEGY_HOST), message_(message) {} |
| 1000 } | |
| 1001 | 1004 |
| 1002 WebRequestSendMessageToExtensionAction:: | 1005 WebRequestSendMessageToExtensionAction:: |
| 1003 ~WebRequestSendMessageToExtensionAction() {} | 1006 ~WebRequestSendMessageToExtensionAction() {} |
| 1004 | 1007 |
| 1005 int WebRequestSendMessageToExtensionAction::GetStages() const { | 1008 int WebRequestSendMessageToExtensionAction::GetStages() const { |
| 1006 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | | 1009 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED | |
| 1007 ON_AUTH_REQUIRED; | 1010 ON_AUTH_REQUIRED; |
| 1008 } | 1011 } |
| 1009 | 1012 |
| 1010 WebRequestAction::Type WebRequestSendMessageToExtensionAction::GetType() const { | 1013 WebRequestAction::Type WebRequestSendMessageToExtensionAction::GetType() const { |
| 1011 return WebRequestAction::ACTION_SEND_MESSAGE_TO_EXTENSION; | 1014 return WebRequestAction::ACTION_SEND_MESSAGE_TO_EXTENSION; |
| 1012 } | 1015 } |
| 1013 | 1016 |
| 1014 LinkedPtrEventResponseDelta WebRequestSendMessageToExtensionAction::CreateDelta( | 1017 LinkedPtrEventResponseDelta WebRequestSendMessageToExtensionAction::CreateDelta( |
| 1015 const WebRequestData& request_data, | 1018 const WebRequestData& request_data, |
| 1016 const std::string& extension_id, | 1019 const std::string& extension_id, |
| 1017 const base::Time& extension_install_time) const { | 1020 const base::Time& extension_install_time) const { |
| 1018 CHECK(request_data.stage & GetStages()); | 1021 CHECK(request_data.stage & GetStages()); |
| 1019 LinkedPtrEventResponseDelta result( | 1022 LinkedPtrEventResponseDelta result( |
| 1020 new extension_web_request_api_helpers::EventResponseDelta( | 1023 new extension_web_request_api_helpers::EventResponseDelta( |
| 1021 extension_id, extension_install_time)); | 1024 extension_id, extension_install_time)); |
| 1022 result->messages_to_extension.insert(message_); | 1025 result->messages_to_extension.insert(message_); |
| 1023 return result; | 1026 return result; |
| 1024 } | 1027 } |
| 1025 | 1028 |
| 1026 } // namespace extensions | 1029 } // namespace extensions |
| OLD | NEW |