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

Unified Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 2335133003: PlzNavigate: support the WebRequest API (Closed)
Patch Set: PlzNavigate: support the WebRequest API Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
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()];

Powered by Google App Engine
This is Rietveld 408576698