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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc

Issue 14358004: Almost all actions in Declarative Web Request require all_urls host permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: All URLs -> all hosts; also rebased Created 7 years, 8 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 | Annotate | Revision Log
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 "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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698