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