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()]; |