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

Side by Side Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 2432153003: Make sure the default CSP is used for <webview> with PlzNavigate. (Closed)
Patch Set: add comment Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/web_request/web_request_api.h" 5 #include "extensions/browser/api/web_request/web_request_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 int extra_info_spec) { 569 int extra_info_spec) {
570 std::unique_ptr<WebRequestEventDetails> event_details( 570 std::unique_ptr<WebRequestEventDetails> event_details(
571 new WebRequestEventDetails(request, extra_info_spec)); 571 new WebRequestEventDetails(request, extra_info_spec));
572 572
573 return event_details; 573 return event_details;
574 } 574 }
575 575
576 int ExtensionWebRequestEventRouter::OnBeforeRequest( 576 int ExtensionWebRequestEventRouter::OnBeforeRequest(
577 void* browser_context, 577 void* browser_context,
578 const InfoMap* extension_info_map, 578 const InfoMap* extension_info_map,
579 ExtensionNavigationUIData* navigation_ui_data,
580 net::URLRequest* request, 579 net::URLRequest* request,
581 const net::CompletionCallback& callback, 580 const net::CompletionCallback& callback,
582 GURL* new_url) { 581 GURL* new_url) {
582 ExtensionNavigationUIData* navigation_ui_data =
583 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
583 if (ShouldHideEvent(browser_context, extension_info_map, request, 584 if (ShouldHideEvent(browser_context, extension_info_map, request,
584 navigation_ui_data)) { 585 navigation_ui_data)) {
585 return net::OK; 586 return net::OK;
586 } 587 }
587 588
588 if (IsPageLoad(request)) 589 if (IsPageLoad(request))
589 NotifyPageLoad(); 590 NotifyPageLoad();
590 591
591 request_time_tracker_->LogRequestStartTime(request->identifier(), 592 request_time_tracker_->LogRequestStartTime(request->identifier(),
592 base::Time::Now(), 593 base::Time::Now(),
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 // to modify the request and we can respond synchronously. 633 // to modify the request and we can respond synchronously.
633 return ExecuteDeltas(browser_context, request->identifier(), 634 return ExecuteDeltas(browser_context, request->identifier(),
634 navigation_ui_data, false /* call_callback*/); 635 navigation_ui_data, false /* call_callback*/);
635 } 636 }
636 return net::ERR_IO_PENDING; 637 return net::ERR_IO_PENDING;
637 } 638 }
638 639
639 int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( 640 int ExtensionWebRequestEventRouter::OnBeforeSendHeaders(
640 void* browser_context, 641 void* browser_context,
641 const InfoMap* extension_info_map, 642 const InfoMap* extension_info_map,
642 ExtensionNavigationUIData* navigation_ui_data,
643 net::URLRequest* request, 643 net::URLRequest* request,
644 const net::CompletionCallback& callback, 644 const net::CompletionCallback& callback,
645 net::HttpRequestHeaders* headers) { 645 net::HttpRequestHeaders* headers) {
646 ExtensionNavigationUIData* navigation_ui_data =
647 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
646 if (ShouldHideEvent(browser_context, extension_info_map, request, 648 if (ShouldHideEvent(browser_context, extension_info_map, request,
647 navigation_ui_data)) { 649 navigation_ui_data)) {
648 return net::OK; 650 return net::OK;
649 } 651 }
650 652
651 bool initialize_blocked_requests = false; 653 bool initialize_blocked_requests = false;
652 654
653 initialize_blocked_requests |= ProcessDeclarativeRules( 655 initialize_blocked_requests |= ProcessDeclarativeRules(
654 browser_context, extension_info_map, keys::kOnBeforeSendHeadersEvent, 656 browser_context, extension_info_map, keys::kOnBeforeSendHeadersEvent,
655 request, navigation_ui_data, ON_BEFORE_SEND_HEADERS, NULL); 657 request, navigation_ui_data, ON_BEFORE_SEND_HEADERS, NULL);
(...skipping 29 matching lines...) Expand all
685 // to modify the request and we can respond synchronously. 687 // to modify the request and we can respond synchronously.
686 return ExecuteDeltas(browser_context, request->identifier(), 688 return ExecuteDeltas(browser_context, request->identifier(),
687 navigation_ui_data, false /* call_callback*/); 689 navigation_ui_data, false /* call_callback*/);
688 } 690 }
689 return net::ERR_IO_PENDING; 691 return net::ERR_IO_PENDING;
690 } 692 }
691 693
692 void ExtensionWebRequestEventRouter::OnSendHeaders( 694 void ExtensionWebRequestEventRouter::OnSendHeaders(
693 void* browser_context, 695 void* browser_context,
694 const InfoMap* extension_info_map, 696 const InfoMap* extension_info_map,
695 ExtensionNavigationUIData* navigation_ui_data,
696 net::URLRequest* request, 697 net::URLRequest* request,
697 const net::HttpRequestHeaders& headers) { 698 const net::HttpRequestHeaders& headers) {
699 ExtensionNavigationUIData* navigation_ui_data =
700 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
698 if (ShouldHideEvent(browser_context, extension_info_map, request, 701 if (ShouldHideEvent(browser_context, extension_info_map, request,
699 navigation_ui_data)) 702 navigation_ui_data))
700 return; 703 return;
701 704
702 if (GetAndSetSignaled(request->identifier(), kOnSendHeaders)) 705 if (GetAndSetSignaled(request->identifier(), kOnSendHeaders))
703 return; 706 return;
704 707
705 ClearSignaled(request->identifier(), kOnBeforeRedirect); 708 ClearSignaled(request->identifier(), kOnBeforeRedirect);
706 709
707 int extra_info_spec = 0; 710 int extra_info_spec = 0;
708 RawListeners listeners = GetMatchingListeners( 711 RawListeners listeners = GetMatchingListeners(
709 browser_context, extension_info_map, navigation_ui_data, 712 browser_context, extension_info_map, navigation_ui_data,
710 keys::kOnSendHeadersEvent, request, &extra_info_spec); 713 keys::kOnSendHeadersEvent, request, &extra_info_spec);
711 if (listeners.empty()) 714 if (listeners.empty())
712 return; 715 return;
713 716
714 std::unique_ptr<WebRequestEventDetails> event_details( 717 std::unique_ptr<WebRequestEventDetails> event_details(
715 CreateEventDetails(request, extra_info_spec)); 718 CreateEventDetails(request, extra_info_spec));
716 event_details->SetRequestHeaders(headers); 719 event_details->SetRequestHeaders(headers);
717 720
718 DispatchEvent(browser_context, request, listeners, navigation_ui_data, 721 DispatchEvent(browser_context, request, listeners, navigation_ui_data,
719 std::move(event_details)); 722 std::move(event_details));
720 } 723 }
721 724
722 int ExtensionWebRequestEventRouter::OnHeadersReceived( 725 int ExtensionWebRequestEventRouter::OnHeadersReceived(
723 void* browser_context, 726 void* browser_context,
724 const InfoMap* extension_info_map, 727 const InfoMap* extension_info_map,
725 ExtensionNavigationUIData* navigation_ui_data,
726 net::URLRequest* request, 728 net::URLRequest* request,
727 const net::CompletionCallback& callback, 729 const net::CompletionCallback& callback,
728 const net::HttpResponseHeaders* original_response_headers, 730 const net::HttpResponseHeaders* original_response_headers,
729 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, 731 scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
730 GURL* allowed_unsafe_redirect_url) { 732 GURL* allowed_unsafe_redirect_url) {
733 ExtensionNavigationUIData* navigation_ui_data =
734 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
731 if (ShouldHideEvent(browser_context, extension_info_map, request, 735 if (ShouldHideEvent(browser_context, extension_info_map, request,
732 navigation_ui_data)) { 736 navigation_ui_data)) {
733 return net::OK; 737 return net::OK;
734 } 738 }
735 739
736 bool initialize_blocked_requests = false; 740 bool initialize_blocked_requests = false;
737 741
738 initialize_blocked_requests |= ProcessDeclarativeRules( 742 initialize_blocked_requests |= ProcessDeclarativeRules(
739 browser_context, extension_info_map, keys::kOnHeadersReceivedEvent, 743 browser_context, extension_info_map, keys::kOnHeadersReceivedEvent,
740 request, navigation_ui_data, ON_HEADERS_RECEIVED, 744 request, navigation_ui_data, ON_HEADERS_RECEIVED,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 return ExecuteDeltas(browser_context, request->identifier(), 779 return ExecuteDeltas(browser_context, request->identifier(),
776 navigation_ui_data, false /* call_callback*/); 780 navigation_ui_data, false /* call_callback*/);
777 } 781 }
778 return net::ERR_IO_PENDING; 782 return net::ERR_IO_PENDING;
779 } 783 }
780 784
781 net::NetworkDelegate::AuthRequiredResponse 785 net::NetworkDelegate::AuthRequiredResponse
782 ExtensionWebRequestEventRouter::OnAuthRequired( 786 ExtensionWebRequestEventRouter::OnAuthRequired(
783 void* browser_context, 787 void* browser_context,
784 const InfoMap* extension_info_map, 788 const InfoMap* extension_info_map,
785 ExtensionNavigationUIData* navigation_ui_data,
786 net::URLRequest* request, 789 net::URLRequest* request,
787 const net::AuthChallengeInfo& auth_info, 790 const net::AuthChallengeInfo& auth_info,
788 const net::NetworkDelegate::AuthCallback& callback, 791 const net::NetworkDelegate::AuthCallback& callback,
789 net::AuthCredentials* credentials) { 792 net::AuthCredentials* credentials) {
793 ExtensionNavigationUIData* navigation_ui_data =
794 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
790 // No browser_context means that this is for authentication challenges in the 795 // No browser_context means that this is for authentication challenges in the
791 // system context. Skip in that case. Also skip sensitive requests. 796 // system context. Skip in that case. Also skip sensitive requests.
792 if (!browser_context || 797 if (!browser_context ||
793 WebRequestPermissions::HideRequest(extension_info_map, request, 798 WebRequestPermissions::HideRequest(extension_info_map, request,
794 navigation_ui_data)) { 799 navigation_ui_data)) {
795 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; 800 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION;
796 } 801 }
797 802
798 int extra_info_spec = 0; 803 int extra_info_spec = 0;
799 RawListeners listeners = GetMatchingListeners( 804 RawListeners listeners = GetMatchingListeners(
(...skipping 17 matching lines...) Expand all
817 blocked_request.auth_credentials = credentials; 822 blocked_request.auth_credentials = credentials;
818 blocked_request.net_log = &request->net_log(); 823 blocked_request.net_log = &request->net_log();
819 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_IO_PENDING; 824 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_IO_PENDING;
820 } 825 }
821 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; 826 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION;
822 } 827 }
823 828
824 void ExtensionWebRequestEventRouter::OnBeforeRedirect( 829 void ExtensionWebRequestEventRouter::OnBeforeRedirect(
825 void* browser_context, 830 void* browser_context,
826 const InfoMap* extension_info_map, 831 const InfoMap* extension_info_map,
827 ExtensionNavigationUIData* navigation_ui_data,
828 net::URLRequest* request, 832 net::URLRequest* request,
829 const GURL& new_location) { 833 const GURL& new_location) {
834 ExtensionNavigationUIData* navigation_ui_data =
835 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
830 if (ShouldHideEvent(browser_context, extension_info_map, request, 836 if (ShouldHideEvent(browser_context, extension_info_map, request,
831 navigation_ui_data)) { 837 navigation_ui_data)) {
832 return; 838 return;
833 } 839 }
834 840
835 if (GetAndSetSignaled(request->identifier(), kOnBeforeRedirect)) 841 if (GetAndSetSignaled(request->identifier(), kOnBeforeRedirect))
836 return; 842 return;
837 843
838 ClearSignaled(request->identifier(), kOnBeforeRequest); 844 ClearSignaled(request->identifier(), kOnBeforeRequest);
839 ClearSignaled(request->identifier(), kOnBeforeSendHeaders); 845 ClearSignaled(request->identifier(), kOnBeforeSendHeaders);
(...skipping 13 matching lines...) Expand all
853 event_details->SetResponseSource(request); 859 event_details->SetResponseSource(request);
854 event_details->SetString(keys::kRedirectUrlKey, new_location.spec()); 860 event_details->SetString(keys::kRedirectUrlKey, new_location.spec());
855 861
856 DispatchEvent(browser_context, request, listeners, navigation_ui_data, 862 DispatchEvent(browser_context, request, listeners, navigation_ui_data,
857 std::move(event_details)); 863 std::move(event_details));
858 } 864 }
859 865
860 void ExtensionWebRequestEventRouter::OnResponseStarted( 866 void ExtensionWebRequestEventRouter::OnResponseStarted(
861 void* browser_context, 867 void* browser_context,
862 const InfoMap* extension_info_map, 868 const InfoMap* extension_info_map,
863 ExtensionNavigationUIData* navigation_ui_data,
864 net::URLRequest* request, 869 net::URLRequest* request,
865 int net_error) { 870 int net_error) {
866 DCHECK_NE(net::ERR_IO_PENDING, net_error); 871 DCHECK_NE(net::ERR_IO_PENDING, net_error);
867 872
873 ExtensionNavigationUIData* navigation_ui_data =
874 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
868 if (ShouldHideEvent(browser_context, extension_info_map, request, 875 if (ShouldHideEvent(browser_context, extension_info_map, request,
869 navigation_ui_data)) { 876 navigation_ui_data)) {
870 return; 877 return;
871 } 878 }
872 879
873 // OnResponseStarted is even triggered, when the request was cancelled. 880 // OnResponseStarted is even triggered, when the request was cancelled.
874 if (net_error != net::OK) 881 if (net_error != net::OK)
875 return; 882 return;
876 883
877 int extra_info_spec = 0; 884 int extra_info_spec = 0;
(...skipping 10 matching lines...) Expand all
888 895
889 DispatchEvent(browser_context, request, listeners, navigation_ui_data, 896 DispatchEvent(browser_context, request, listeners, navigation_ui_data,
890 std::move(event_details)); 897 std::move(event_details));
891 } 898 }
892 899
893 // Deprecated. 900 // Deprecated.
894 // TODO(maksims): Remove this. 901 // TODO(maksims): Remove this.
895 void ExtensionWebRequestEventRouter::OnResponseStarted( 902 void ExtensionWebRequestEventRouter::OnResponseStarted(
896 void* browser_context, 903 void* browser_context,
897 const InfoMap* extension_info_map, 904 const InfoMap* extension_info_map,
898 ExtensionNavigationUIData* navigation_ui_data,
899 net::URLRequest* request) { 905 net::URLRequest* request) {
900 OnResponseStarted(browser_context, extension_info_map, navigation_ui_data, 906 OnResponseStarted(browser_context, extension_info_map, request,
901 request, request->status().error()); 907 request->status().error());
902 } 908 }
903 909
904 void ExtensionWebRequestEventRouter::OnCompleted( 910 void ExtensionWebRequestEventRouter::OnCompleted(
905 void* browser_context, 911 void* browser_context,
906 const InfoMap* extension_info_map, 912 const InfoMap* extension_info_map,
907 ExtensionNavigationUIData* navigation_ui_data,
908 net::URLRequest* request, 913 net::URLRequest* request,
909 int net_error) { 914 int net_error) {
915 ExtensionNavigationUIData* navigation_ui_data =
916 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
910 // We hide events from the system context as well as sensitive requests. 917 // We hide events from the system context as well as sensitive requests.
911 // However, if the request first became sensitive after redirecting we have 918 // However, if the request first became sensitive after redirecting we have
912 // already signaled it and thus we have to signal the end of it. This is 919 // already signaled it and thus we have to signal the end of it. This is
913 // risk-free because the handler cannot modify the request now. 920 // risk-free because the handler cannot modify the request now.
914 if (!browser_context || 921 if (!browser_context ||
915 (WebRequestPermissions::HideRequest(extension_info_map, request, 922 (WebRequestPermissions::HideRequest(extension_info_map, request,
916 navigation_ui_data) && 923 navigation_ui_data) &&
917 !WasSignaled(*request))) { 924 !WasSignaled(*request))) {
918 return; 925 return;
919 } 926 }
(...skipping 21 matching lines...) Expand all
941 948
942 DispatchEvent(browser_context, request, listeners, navigation_ui_data, 949 DispatchEvent(browser_context, request, listeners, navigation_ui_data,
943 std::move(event_details)); 950 std::move(event_details));
944 } 951 }
945 952
946 // Deprecated. 953 // Deprecated.
947 // TODO(maksims): Remove this. 954 // TODO(maksims): Remove this.
948 void ExtensionWebRequestEventRouter::OnCompleted( 955 void ExtensionWebRequestEventRouter::OnCompleted(
949 void* browser_context, 956 void* browser_context,
950 const InfoMap* extension_info_map, 957 const InfoMap* extension_info_map,
951 ExtensionNavigationUIData* navigation_ui_data,
952 net::URLRequest* request) { 958 net::URLRequest* request) {
953 OnCompleted(browser_context, extension_info_map, navigation_ui_data, request, 959 OnCompleted(browser_context, extension_info_map, request,
954 request->status().error()); 960 request->status().error());
955 } 961 }
956 962
957 void ExtensionWebRequestEventRouter::OnErrorOccurred( 963 void ExtensionWebRequestEventRouter::OnErrorOccurred(
958 void* browser_context, 964 void* browser_context,
959 const InfoMap* extension_info_map, 965 const InfoMap* extension_info_map,
960 ExtensionNavigationUIData* navigation_ui_data,
961 net::URLRequest* request, 966 net::URLRequest* request,
962 bool started, 967 bool started,
963 int net_error) { 968 int net_error) {
969 ExtensionNavigationUIData* navigation_ui_data =
970 ExtensionsBrowserClient::Get()->GetExtensionNavigationUIData(request);
964 // We hide events from the system context as well as sensitive requests. 971 // We hide events from the system context as well as sensitive requests.
965 // However, if the request first became sensitive after redirecting we have 972 // However, if the request first became sensitive after redirecting we have
966 // already signaled it and thus we have to signal the end of it. This is 973 // already signaled it and thus we have to signal the end of it. This is
967 // risk-free because the handler cannot modify the request now. 974 // risk-free because the handler cannot modify the request now.
968 if (!browser_context || 975 if (!browser_context ||
969 (WebRequestPermissions::HideRequest(extension_info_map, request, 976 (WebRequestPermissions::HideRequest(extension_info_map, request,
970 navigation_ui_data) && 977 navigation_ui_data) &&
971 !WasSignaled(*request))) { 978 !WasSignaled(*request))) {
972 return; 979 return;
973 } 980 }
(...skipping 23 matching lines...) Expand all
997 event_details->SetBoolean(keys::kFromCache, request->was_cached()); 1004 event_details->SetBoolean(keys::kFromCache, request->was_cached());
998 event_details->SetString(keys::kErrorKey, net::ErrorToString(net_error)); 1005 event_details->SetString(keys::kErrorKey, net::ErrorToString(net_error));
999 1006
1000 DispatchEvent(browser_context, request, listeners, navigation_ui_data, 1007 DispatchEvent(browser_context, request, listeners, navigation_ui_data,
1001 std::move(event_details)); 1008 std::move(event_details));
1002 } 1009 }
1003 1010
1004 void ExtensionWebRequestEventRouter::OnErrorOccurred( 1011 void ExtensionWebRequestEventRouter::OnErrorOccurred(
1005 void* browser_context, 1012 void* browser_context,
1006 const InfoMap* extension_info_map, 1013 const InfoMap* extension_info_map,
1007 ExtensionNavigationUIData* navigation_ui_data,
1008 net::URLRequest* request, 1014 net::URLRequest* request,
1009 bool started) { 1015 bool started) {
1010 OnErrorOccurred(browser_context, extension_info_map, navigation_ui_data, 1016 OnErrorOccurred(browser_context, extension_info_map, request, started,
1011 request, started, request->status().error()); 1017 request->status().error());
1012 } 1018 }
1013 1019
1014 void ExtensionWebRequestEventRouter::OnURLRequestDestroyed( 1020 void ExtensionWebRequestEventRouter::OnURLRequestDestroyed(
1015 void* browser_context, 1021 void* browser_context,
1016 const net::URLRequest* request) { 1022 const net::URLRequest* request) {
1017 ClearPendingCallbacks(request); 1023 ClearPendingCallbacks(request);
1018 1024
1019 signaled_requests_.erase(request->identifier()); 1025 signaled_requests_.erase(request->identifier());
1020 1026
1021 request_time_tracker_->LogRequestEndTime(request->identifier(), 1027 request_time_tracker_->LogRequestEndTime(request->identifier(),
(...skipping 1332 matching lines...) Expand 10 before | Expand all | Expand 10 after
2354 // Since EventListeners are segmented by browser_context, check that 2360 // Since EventListeners are segmented by browser_context, check that
2355 // last, as it is exceedingly unlikely to be different. 2361 // last, as it is exceedingly unlikely to be different.
2356 return extension_id == that.extension_id && 2362 return extension_id == that.extension_id &&
2357 sub_event_name == that.sub_event_name && 2363 sub_event_name == that.sub_event_name &&
2358 web_view_instance_id == that.web_view_instance_id && 2364 web_view_instance_id == that.web_view_instance_id &&
2359 embedder_process_id == that.embedder_process_id && 2365 embedder_process_id == that.embedder_process_id &&
2360 browser_context == that.browser_context; 2366 browser_context == that.browser_context;
2361 } 2367 }
2362 2368
2363 } // namespace extensions 2369 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/web_request/web_request_api.h ('k') | extensions/browser/extensions_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698