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

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

Powered by Google App Engine
This is Rietveld 408576698