Chromium Code Reviews| Index: extensions/browser/api/web_request/web_request_api.cc |
| diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc |
| index 4e41031658142b0439b2af20b01802ab4d7932fc..9fb834b68b2f9e997029f27d48293299ce7a1a61 100644 |
| --- a/extensions/browser/api/web_request/web_request_api.cc |
| +++ b/extensions/browser/api/web_request/web_request_api.cc |
| @@ -25,6 +25,7 @@ |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/resource_request_info.h" |
| #include "content/public/browser/user_metrics.h" |
| +#include "content/public/common/browser_side_navigation_policy.h" |
| #include "content/public/common/child_process_host.h" |
| #include "extensions/browser/api/activity_log/web_request_constants.h" |
| #include "extensions/browser/api/declarative/rules_registry_service.h" |
| @@ -39,6 +40,7 @@ |
| #include "extensions/browser/api/web_request/web_request_time_tracker.h" |
| #include "extensions/browser/api_activity_monitor.h" |
| #include "extensions/browser/event_router.h" |
| +#include "extensions/browser/extension_navigation_ui_data.h" |
| #include "extensions/browser/extension_prefs.h" |
| #include "extensions/browser/extension_registry.h" |
| #include "extensions/browser/extension_system.h" |
| @@ -555,6 +557,7 @@ ExtensionWebRequestEventRouter::CreateEventDetails( |
| int ExtensionWebRequestEventRouter::OnBeforeRequest( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const net::CompletionCallback& callback, |
| GURL* new_url) { |
| @@ -587,8 +590,9 @@ int ExtensionWebRequestEventRouter::OnBeforeRequest( |
| CreateEventDetails(request, extra_info_spec)); |
| event_details->SetRequestBody(request); |
| - initialize_blocked_requests |= DispatchEvent( |
| - browser_context, request, listeners, std::move(event_details)); |
| + initialize_blocked_requests |= |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| if (!initialize_blocked_requests) |
| @@ -614,6 +618,7 @@ int ExtensionWebRequestEventRouter::OnBeforeRequest( |
| int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const net::CompletionCallback& callback, |
| net::HttpRequestHeaders* headers) { |
| @@ -636,8 +641,9 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( |
| CreateEventDetails(request, extra_info_spec)); |
| event_details->SetRequestHeaders(*headers); |
| - initialize_blocked_requests |= DispatchEvent( |
| - browser_context, request, listeners, std::move(event_details)); |
| + initialize_blocked_requests |= |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| if (!initialize_blocked_requests) |
| @@ -663,6 +669,7 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( |
| void ExtensionWebRequestEventRouter::OnSendHeaders( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const net::HttpRequestHeaders& headers) { |
| if (ShouldHideEvent(browser_context, extension_info_map, request)) |
| @@ -684,12 +691,14 @@ void ExtensionWebRequestEventRouter::OnSendHeaders( |
| CreateEventDetails(request, extra_info_spec)); |
| event_details->SetRequestHeaders(headers); |
| - DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| int ExtensionWebRequestEventRouter::OnHeadersReceived( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const net::CompletionCallback& callback, |
| const net::HttpResponseHeaders* original_response_headers, |
| @@ -715,8 +724,9 @@ int ExtensionWebRequestEventRouter::OnHeadersReceived( |
| CreateEventDetails(request, extra_info_spec)); |
| event_details->SetResponseHeaders(request, original_response_headers); |
| - initialize_blocked_requests |= DispatchEvent( |
| - browser_context, request, listeners, std::move(event_details)); |
| + initialize_blocked_requests |= |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| if (!initialize_blocked_requests) |
| @@ -745,6 +755,7 @@ net::NetworkDelegate::AuthRequiredResponse |
| ExtensionWebRequestEventRouter::OnAuthRequired( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const net::AuthChallengeInfo& auth_info, |
| const net::NetworkDelegate::AuthCallback& callback, |
| @@ -768,7 +779,7 @@ ExtensionWebRequestEventRouter::OnAuthRequired( |
| event_details->SetResponseHeaders(request, request->response_headers()); |
| event_details->SetAuthInfo(auth_info); |
| - if (DispatchEvent(browser_context, request, listeners, |
| + if (DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| std::move(event_details))) { |
| BlockedRequest& blocked_request = blocked_requests_[request->identifier()]; |
| blocked_request.event = kOnAuthRequired; |
| @@ -785,6 +796,7 @@ ExtensionWebRequestEventRouter::OnAuthRequired( |
| void ExtensionWebRequestEventRouter::OnBeforeRedirect( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| const GURL& new_location) { |
| if (ShouldHideEvent(browser_context, extension_info_map, request)) |
| @@ -811,12 +823,14 @@ void ExtensionWebRequestEventRouter::OnBeforeRedirect( |
| event_details->SetResponseSource(request); |
| event_details->SetString(keys::kRedirectUrlKey, new_location.spec()); |
| - DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| void ExtensionWebRequestEventRouter::OnResponseStarted( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| int net_error) { |
| DCHECK_NE(net::ERR_IO_PENDING, net_error); |
| @@ -840,7 +854,8 @@ void ExtensionWebRequestEventRouter::OnResponseStarted( |
| event_details->SetResponseHeaders(request, request->response_headers()); |
| event_details->SetResponseSource(request); |
| - DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| // Deprecated. |
| @@ -848,14 +863,16 @@ void ExtensionWebRequestEventRouter::OnResponseStarted( |
| void ExtensionWebRequestEventRouter::OnResponseStarted( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request) { |
| - OnResponseStarted(browser_context, extension_info_map, request, |
| - request->status().error()); |
| + OnResponseStarted(browser_context, extension_info_map, navigation_ui_data, |
| + request, request->status().error()); |
| } |
| void ExtensionWebRequestEventRouter::OnCompleted( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| int net_error) { |
| // We hide events from the system context as well as sensitive requests. |
| @@ -889,7 +906,8 @@ void ExtensionWebRequestEventRouter::OnCompleted( |
| event_details->SetResponseHeaders(request, request->response_headers()); |
| event_details->SetResponseSource(request); |
| - DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| // Deprecated. |
| @@ -897,14 +915,16 @@ void ExtensionWebRequestEventRouter::OnCompleted( |
| void ExtensionWebRequestEventRouter::OnCompleted( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request) { |
| - OnCompleted(browser_context, extension_info_map, request, |
| + OnCompleted(browser_context, extension_info_map, navigation_ui_data, request, |
| request->status().error()); |
| } |
| void ExtensionWebRequestEventRouter::OnErrorOccurred( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| bool started, |
| int net_error) { |
| @@ -943,16 +963,18 @@ void ExtensionWebRequestEventRouter::OnErrorOccurred( |
| event_details->SetBoolean(keys::kFromCache, request->was_cached()); |
| event_details->SetString(keys::kErrorKey, net::ErrorToString(net_error)); |
| - DispatchEvent(browser_context, request, listeners, std::move(event_details)); |
| + DispatchEvent(browser_context, request, listeners, navigation_ui_data, |
| + std::move(event_details)); |
| } |
| void ExtensionWebRequestEventRouter::OnErrorOccurred( |
| void* browser_context, |
| const InfoMap* extension_info_map, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| net::URLRequest* request, |
| bool started) { |
| - OnErrorOccurred(browser_context, extension_info_map, request, started, |
| - request->status().error()); |
| + OnErrorOccurred(browser_context, extension_info_map, navigation_ui_data, |
| + request, started, request->status().error()); |
| } |
| void ExtensionWebRequestEventRouter::OnURLRequestDestroyed( |
| @@ -975,6 +997,7 @@ bool ExtensionWebRequestEventRouter::DispatchEvent( |
| void* browser_context, |
| net::URLRequest* request, |
| const RawListeners& listeners, |
| + ExtensionNavigationUIData* navigation_ui_data, |
| std::unique_ptr<WebRequestEventDetails> event_details) { |
| // TODO(mpcomplete): Consider consolidating common (extension_id,json_args) |
| // pairs into a single message sent to a list of sub_event_names. |
| @@ -1001,9 +1024,18 @@ bool ExtensionWebRequestEventRouter::DispatchEvent( |
| } |
| } |
| - event_details.release()->DetermineFrameDataOnIO(base::Bind( |
| - &ExtensionWebRequestEventRouter::DispatchEventToListeners, AsWeakPtr(), |
| - browser_context, base::Passed(&listeners_to_dispatch))); |
| + const content::ResourceRequestInfo* info = |
| + content::ResourceRequestInfo::ForRequest(request); |
| + if (content::IsBrowserSideNavigationEnabled() && navigation_ui_data && info && |
|
Devlin
2016/09/16 16:17:26
In which scenarios can these (null ui_data, info)
clamy
2016/09/19 15:10:03
I have added a comment that explains the check. Al
|
| + IsResourceTypeFrame(info->GetResourceType())) { |
| + event_details->SetFrameData(navigation_ui_data->frame_data()); |
| + DispatchEventToListeners(browser_context, std::move(listeners_to_dispatch), |
| + std::move(event_details)); |
| + } else { |
| + event_details.release()->DetermineFrameDataOnIO(base::Bind( |
| + &ExtensionWebRequestEventRouter::DispatchEventToListeners, AsWeakPtr(), |
| + browser_context, base::Passed(&listeners_to_dispatch))); |
| + } |
| if (num_handlers_blocking > 0) { |
| BlockedRequest& blocked_request = blocked_requests_[request->identifier()]; |