OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 event_details->SetResponseHeaders(request, request->response_headers()); | 862 event_details->SetResponseHeaders(request, request->response_headers()); |
863 event_details->SetResponseSource(request); | 863 event_details->SetResponseSource(request); |
864 event_details->SetString(keys::kRedirectUrlKey, new_location.spec()); | 864 event_details->SetString(keys::kRedirectUrlKey, new_location.spec()); |
865 | 865 |
866 DispatchEvent(browser_context, request, listeners, std::move(event_details)); | 866 DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
867 } | 867 } |
868 | 868 |
869 void ExtensionWebRequestEventRouter::OnResponseStarted( | 869 void ExtensionWebRequestEventRouter::OnResponseStarted( |
870 void* browser_context, | 870 void* browser_context, |
871 const InfoMap* extension_info_map, | 871 const InfoMap* extension_info_map, |
872 net::URLRequest* request, | 872 net::URLRequest* request) { |
873 int net_error) { | |
874 DCHECK_NE(net::ERR_IO_PENDING, net_error); | |
875 | |
876 if (ShouldHideEvent(browser_context, extension_info_map, request)) | 873 if (ShouldHideEvent(browser_context, extension_info_map, request)) |
877 return; | 874 return; |
878 | 875 |
879 // OnResponseStarted is even triggered, when the request was cancelled. | 876 // OnResponseStarted is even triggered, when the request was cancelled. |
880 if (net_error != net::OK) | 877 if (request->status().status() != net::URLRequestStatus::SUCCESS) |
881 return; | 878 return; |
882 | 879 |
883 int extra_info_spec = 0; | 880 int extra_info_spec = 0; |
884 EventListeners listeners = GetMatchingListeners( | 881 EventListeners listeners = GetMatchingListeners( |
885 browser_context, extension_info_map, keys::kOnResponseStartedEvent, | 882 browser_context, extension_info_map, keys::kOnResponseStartedEvent, |
886 request, &extra_info_spec); | 883 request, &extra_info_spec); |
887 if (listeners.empty()) | 884 if (listeners.empty()) |
888 return; | 885 return; |
889 | 886 |
890 std::unique_ptr<WebRequestEventDetails> event_details( | 887 std::unique_ptr<WebRequestEventDetails> event_details( |
891 CreateEventDetails(request, extra_info_spec)); | 888 CreateEventDetails(request, extra_info_spec)); |
892 event_details->SetResponseHeaders(request, request->response_headers()); | 889 event_details->SetResponseHeaders(request, request->response_headers()); |
893 event_details->SetResponseSource(request); | 890 event_details->SetResponseSource(request); |
894 | 891 |
895 DispatchEvent(browser_context, request, listeners, std::move(event_details)); | 892 DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
896 } | 893 } |
897 | 894 |
898 // Deprecated. | |
899 // TODO(maksims): Remove this. | |
900 void ExtensionWebRequestEventRouter::OnResponseStarted( | |
901 void* browser_context, | |
902 const InfoMap* extension_info_map, | |
903 net::URLRequest* request) { | |
904 OnResponseStarted(browser_context, extension_info_map, request, | |
905 request->status().error()); | |
906 } | |
907 | |
908 void ExtensionWebRequestEventRouter::OnCompleted( | 895 void ExtensionWebRequestEventRouter::OnCompleted( |
909 void* browser_context, | 896 void* browser_context, |
910 const InfoMap* extension_info_map, | 897 const InfoMap* extension_info_map, |
911 net::URLRequest* request, | 898 net::URLRequest* request) { |
912 int net_error) { | |
913 // We hide events from the system context as well as sensitive requests. | 899 // We hide events from the system context as well as sensitive requests. |
914 // However, if the request first became sensitive after redirecting we have | 900 // However, if the request first became sensitive after redirecting we have |
915 // already signaled it and thus we have to signal the end of it. This is | 901 // already signaled it and thus we have to signal the end of it. This is |
916 // risk-free because the handler cannot modify the request now. | 902 // risk-free because the handler cannot modify the request now. |
917 if (!browser_context || | 903 if (!browser_context || |
918 (WebRequestPermissions::HideRequest(extension_info_map, request) && | 904 (WebRequestPermissions::HideRequest(extension_info_map, request) && |
919 !WasSignaled(*request))) { | 905 !WasSignaled(*request))) { |
920 return; | 906 return; |
921 } | 907 } |
922 | 908 |
923 request_time_tracker_->LogRequestEndTime(request->identifier(), | 909 request_time_tracker_->LogRequestEndTime(request->identifier(), |
924 base::Time::Now()); | 910 base::Time::Now()); |
925 | 911 |
926 DCHECK_EQ(net::OK, net_error); | 912 DCHECK(request->status().status() == net::URLRequestStatus::SUCCESS); |
927 | 913 |
928 DCHECK(!GetAndSetSignaled(request->identifier(), kOnCompleted)); | 914 DCHECK(!GetAndSetSignaled(request->identifier(), kOnCompleted)); |
929 | 915 |
930 ClearPendingCallbacks(request); | 916 ClearPendingCallbacks(request); |
931 | 917 |
932 int extra_info_spec = 0; | 918 int extra_info_spec = 0; |
933 EventListeners listeners = | 919 EventListeners listeners = |
934 GetMatchingListeners(browser_context, extension_info_map, | 920 GetMatchingListeners(browser_context, extension_info_map, |
935 keys::kOnCompletedEvent, request, &extra_info_spec); | 921 keys::kOnCompletedEvent, request, &extra_info_spec); |
936 if (listeners.empty()) | 922 if (listeners.empty()) |
937 return; | 923 return; |
938 | 924 |
939 std::unique_ptr<WebRequestEventDetails> event_details( | 925 std::unique_ptr<WebRequestEventDetails> event_details( |
940 CreateEventDetails(request, extra_info_spec)); | 926 CreateEventDetails(request, extra_info_spec)); |
941 event_details->SetResponseHeaders(request, request->response_headers()); | 927 event_details->SetResponseHeaders(request, request->response_headers()); |
942 event_details->SetResponseSource(request); | 928 event_details->SetResponseSource(request); |
943 | 929 |
944 DispatchEvent(browser_context, request, listeners, std::move(event_details)); | 930 DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
945 } | 931 } |
946 | 932 |
947 // Deprecated. | |
948 // TODO(maksims): Remove this. | |
949 void ExtensionWebRequestEventRouter::OnCompleted( | |
950 void* browser_context, | |
951 const InfoMap* extension_info_map, | |
952 net::URLRequest* request) { | |
953 OnCompleted(browser_context, extension_info_map, request, | |
954 request->status().error()); | |
955 } | |
956 | |
957 void ExtensionWebRequestEventRouter::OnErrorOccurred( | 933 void ExtensionWebRequestEventRouter::OnErrorOccurred( |
958 void* browser_context, | 934 void* browser_context, |
959 const InfoMap* extension_info_map, | 935 const InfoMap* extension_info_map, |
960 net::URLRequest* request, | 936 net::URLRequest* request, |
961 bool started, | 937 bool started) { |
962 int net_error) { | |
963 // We hide events from the system context as well as sensitive requests. | 938 // We hide events from the system context as well as sensitive requests. |
964 // However, if the request first became sensitive after redirecting we have | 939 // However, if the request first became sensitive after redirecting we have |
965 // already signaled it and thus we have to signal the end of it. This is | 940 // already signaled it and thus we have to signal the end of it. This is |
966 // risk-free because the handler cannot modify the request now. | 941 // risk-free because the handler cannot modify the request now. |
967 if (!browser_context || | 942 if (!browser_context || |
968 (WebRequestPermissions::HideRequest(extension_info_map, request) && | 943 (WebRequestPermissions::HideRequest(extension_info_map, request) && |
969 !WasSignaled(*request))) { | 944 !WasSignaled(*request))) { |
970 return; | 945 return; |
971 } | 946 } |
972 | 947 |
973 request_time_tracker_->LogRequestEndTime(request->identifier(), | 948 request_time_tracker_->LogRequestEndTime(request->identifier(), |
974 base::Time::Now()); | 949 base::Time::Now()); |
975 | 950 |
976 DCHECK_NE(net::OK, net_error); | 951 DCHECK(request->status().status() == net::URLRequestStatus::FAILED || |
977 DCHECK_NE(net::ERR_IO_PENDING, net_error); | 952 request->status().status() == net::URLRequestStatus::CANCELED); |
978 | 953 |
979 DCHECK(!GetAndSetSignaled(request->identifier(), kOnErrorOccurred)); | 954 DCHECK(!GetAndSetSignaled(request->identifier(), kOnErrorOccurred)); |
980 | 955 |
981 ClearPendingCallbacks(request); | 956 ClearPendingCallbacks(request); |
982 | 957 |
983 int extra_info_spec = 0; | 958 int extra_info_spec = 0; |
984 EventListeners listeners = GetMatchingListeners( | 959 EventListeners listeners = GetMatchingListeners( |
985 browser_context, extension_info_map, | 960 browser_context, extension_info_map, |
986 web_request::OnErrorOccurred::kEventName, request, &extra_info_spec); | 961 web_request::OnErrorOccurred::kEventName, request, &extra_info_spec); |
987 if (listeners.empty()) | 962 if (listeners.empty()) |
988 return; | 963 return; |
989 | 964 |
990 std::unique_ptr<WebRequestEventDetails> event_details( | 965 std::unique_ptr<WebRequestEventDetails> event_details( |
991 CreateEventDetails(request, extra_info_spec)); | 966 CreateEventDetails(request, extra_info_spec)); |
992 if (started) | 967 if (started) |
993 event_details->SetResponseSource(request); | 968 event_details->SetResponseSource(request); |
994 else | 969 else |
995 event_details->SetBoolean(keys::kFromCache, request->was_cached()); | 970 event_details->SetBoolean(keys::kFromCache, request->was_cached()); |
996 event_details->SetString(keys::kErrorKey, net::ErrorToString(net_error)); | 971 event_details->SetString(keys::kErrorKey, |
| 972 net::ErrorToString(request->status().error())); |
997 | 973 |
998 DispatchEvent(browser_context, request, listeners, std::move(event_details)); | 974 DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
999 } | 975 } |
1000 | 976 |
1001 void ExtensionWebRequestEventRouter::OnErrorOccurred( | |
1002 void* browser_context, | |
1003 const InfoMap* extension_info_map, | |
1004 net::URLRequest* request, | |
1005 bool started) { | |
1006 OnErrorOccurred(browser_context, extension_info_map, request, started, | |
1007 request->status().error()); | |
1008 } | |
1009 | |
1010 void ExtensionWebRequestEventRouter::OnURLRequestDestroyed( | 977 void ExtensionWebRequestEventRouter::OnURLRequestDestroyed( |
1011 void* browser_context, | 978 void* browser_context, |
1012 const net::URLRequest* request) { | 979 const net::URLRequest* request) { |
1013 ClearPendingCallbacks(request); | 980 ClearPendingCallbacks(request); |
1014 | 981 |
1015 signaled_requests_.erase(request->identifier()); | 982 signaled_requests_.erase(request->identifier()); |
1016 | 983 |
1017 request_time_tracker_->LogRequestEndTime(request->identifier(), | 984 request_time_tracker_->LogRequestEndTime(request->identifier(), |
1018 base::Time::Now()); | 985 base::Time::Now()); |
1019 } | 986 } |
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2285 RunWithValidation()->Execute(); | 2252 RunWithValidation()->Execute(); |
2286 } | 2253 } |
2287 | 2254 |
2288 ExtensionFunction::ResponseAction | 2255 ExtensionFunction::ResponseAction |
2289 WebRequestHandlerBehaviorChangedFunction::Run() { | 2256 WebRequestHandlerBehaviorChangedFunction::Run() { |
2290 helpers::ClearCacheOnNavigation(); | 2257 helpers::ClearCacheOnNavigation(); |
2291 return RespondNow(NoArguments()); | 2258 return RespondNow(NoArguments()); |
2292 } | 2259 } |
2293 | 2260 |
2294 } // namespace extensions | 2261 } // namespace extensions |
OLD | NEW |