"navigate-to" remaining work
This patch includes:
The security violation event and CSP report are now sent to the correct
document via an interface ptr sent though the common params
Added 'unsafe-allowed-redirects' keyword tests
Bundled all CSP info into one InitiatorCSPInfo struct
Modified existing tests to test the violation event as well
Bug: 837627, 805886
Change-Id: I03124f29d4205ad4a5c2ac899b15f42e8e23659b
Reviewed-on: https://chromium-review.googlesource.com/c/1124476
Commit-Queue: Andy Paicu <[email protected]>
Reviewed-by: Jochen Eisinger <[email protected]>
Reviewed-by: Alex Moshchuk <[email protected]>
Reviewed-by: Mike West <[email protected]>
Reviewed-by: Arthur Sonzogni <[email protected]>
Cr-Commit-Position: refs/heads/master@{#598336}
diff --git a/content/browser/frame_host/form_submission_throttle.cc b/content/browser/frame_host/form_submission_throttle.cc
index d50a20b..46c737ac 100644
--- a/content/browser/frame_host/form_submission_throttle.cc
+++ b/content/browser/frame_host/form_submission_throttle.cc
@@ -30,12 +30,12 @@
NavigationThrottle::ThrottleCheckResult
FormSubmissionThrottle::WillStartRequest() {
- return CheckContentSecurityPolicyFormAction(false /* is_redirect */);
+ return CheckContentSecurityPolicyFormAction(false /* was_server_redirect */);
}
NavigationThrottle::ThrottleCheckResult
FormSubmissionThrottle::WillRedirectRequest() {
- return CheckContentSecurityPolicyFormAction(true /* is_redirect */);
+ return CheckContentSecurityPolicyFormAction(true /* was_server_redirect */);
}
const char* FormSubmissionThrottle::GetNameForLogging() {
@@ -43,7 +43,8 @@
}
NavigationThrottle::ThrottleCheckResult
-FormSubmissionThrottle::CheckContentSecurityPolicyFormAction(bool is_redirect) {
+FormSubmissionThrottle::CheckContentSecurityPolicyFormAction(
+ bool was_server_redirect) {
// TODO(arthursonzogni): form-action is enforced on the wrong RenderFrameHost.
// The navigating one is used instead of the one that has initiated the form
// submission. The renderer side checks are still in place and are used for
@@ -59,7 +60,7 @@
// compromised) renderer being responsible for enforcing the CSP of another
// (victim) renderer. Therefore it is okay to return early and do no further
// browser-side checks.
- if (!is_redirect)
+ if (!was_server_redirect)
return NavigationThrottle::PROCEED;
NavigationHandleImpl* handle =
@@ -80,7 +81,7 @@
// check report-only CSP, (2) upgrade request if needed, (3) check enforced
// CSP to match how frame-src works. https://crbug.com/713388
if (render_frame->IsAllowedByCsp(
- CSPDirective::FormAction, url, is_redirect,
+ CSPDirective::FormAction, url, was_server_redirect,
false /* is_response_check */, handle->source_location(),
CSPContext::CHECK_ALL_CSP, true /* is_form_submission */)) {
return NavigationThrottle::PROCEED;
diff --git a/content/browser/frame_host/form_submission_throttle.h b/content/browser/frame_host/form_submission_throttle.h
index 9c11df3..eb95c84 100644
--- a/content/browser/frame_host/form_submission_throttle.h
+++ b/content/browser/frame_host/form_submission_throttle.h
@@ -36,7 +36,7 @@
private:
explicit FormSubmissionThrottle(NavigationHandle* handle);
NavigationThrottle::ThrottleCheckResult CheckContentSecurityPolicyFormAction(
- bool is_redirect);
+ bool was_server_redirect);
DISALLOW_COPY_AND_ASSIGN(FormSubmissionThrottle);
};
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index ff776ee..bece944 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -692,11 +692,8 @@
!IsViewSourceMode(), should_replace_entry(), GetBaseURLForDataURL(),
GetHistoryURLForDataURL(), previews_state, navigation_start,
frame_entry.method(), post_body ? post_body : post_data_,
- base::Optional<SourceLocation>(),
- CSPDisposition::CHECK /* should_check_main_world_csp */,
- has_started_from_context_menu(), has_user_gesture(),
- std::vector<ContentSecurityPolicy>() /* initiator_csp */,
- CSPSource() /* initiator_self_source */, input_start);
+ base::Optional<SourceLocation>(), has_started_from_context_menu(),
+ has_user_gesture(), InitiatorCSPInfo(), input_start);
}
RequestNavigationParams NavigationEntryImpl::ConstructRequestNavigationParams(
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index bdb0819..b86fa9fc 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -353,7 +353,7 @@
GURL() /* client_side_redirect_url */,
base::nullopt /* devtools_initiator_info */),
request_params, browser_initiated, false /* from_begin_navigation */,
- &frame_entry, &entry, std::move(navigation_ui_data), nullptr));
+ &frame_entry, &entry, std::move(navigation_ui_data), nullptr, nullptr));
navigation_request->blob_url_loader_factory_ =
frame_entry.blob_url_loader_factory();
return navigation_request;
@@ -369,7 +369,8 @@
int current_history_list_length,
bool override_user_agent,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) {
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) {
// Only normal navigations to a different document or reloads are expected.
// - Renderer-initiated fragment-navigations never take place in the browser,
// even with PlzNavigate.
@@ -404,7 +405,7 @@
true, // from_begin_navigation
nullptr, entry,
nullptr, // navigation_ui_data
- std::move(navigation_client)));
+ std::move(navigation_client), std::move(navigation_initiator)));
navigation_request->blob_url_loader_factory_ =
std::move(blob_url_loader_factory);
return navigation_request;
@@ -420,7 +421,8 @@
const FrameNavigationEntry* frame_entry,
const NavigationEntryImpl* entry,
std::unique_ptr<NavigationUIData> navigation_ui_data,
- mojom::NavigationClientAssociatedPtrInfo navigation_client)
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator)
: frame_tree_node_(frame_tree_node),
common_params_(common_params),
begin_params_(std::move(begin_params)),
@@ -541,7 +543,9 @@
begin_params_->headers = headers.ToString();
initiator_csp_context_.reset(new InitiatorCSPContext(
- common_params_.initiator_csp, common_params_.initiator_self_source));
+ common_params_.initiator_csp_info.initiator_csp,
+ common_params_.initiator_csp_info.initiator_self_source,
+ std::move(navigation_initiator)));
}
NavigationRequest::~NavigationRequest() {
@@ -599,8 +603,8 @@
// otherwise block. Similarly, the NavigationHandle is created afterwards, so
// that it gets the request URL after potentially being modified by CSP.
net::Error net_error = CheckContentSecurityPolicy(
- false /* is redirect */, false /* url_upgraded_after_redirect */,
- false /* is_response_check */);
+ false /* has_followed redirect */,
+ false /* url_upgraded_after_redirect */, false /* is_response_check */);
if (net_error != net::OK) {
// Create a navigation handle so that the correct error code can be set on
// it by OnRequestFailedInternal().
@@ -693,7 +697,7 @@
common_params_.navigation_type),
common_params_.navigation_start, nav_entry_id_,
common_params_.started_from_context_menu,
- common_params_.should_check_main_world_csp,
+ common_params_.initiator_csp_info.should_check_main_world_csp,
begin_params_->is_form_submission, std::move(navigation_ui_data_),
common_params_.method, std::move(headers), common_params_.post_data,
Referrer::SanitizeForRequest(common_params_.url,
@@ -859,9 +863,10 @@
// Check Content Security Policy before the NavigationThrottles run. This
// gives CSP a chance to modify requests that NavigationThrottles would
// otherwise block.
- net::Error net_error = CheckContentSecurityPolicy(
- true /* is redirect */, redirect_info.insecure_scheme_was_upgraded,
- false /* is_response_check */);
+ net::Error net_error =
+ CheckContentSecurityPolicy(true /* has_followed_redirect */,
+ redirect_info.insecure_scheme_was_upgraded,
+ false /* is_response_check */);
if (net_error != net::OK) {
OnRequestFailedInternal(
network::URLLoaderCompletionStatus(net_error), false /*skip_throttles*/,
@@ -1110,7 +1115,7 @@
// redirect or not in order to perform its checks. This is the reason
// why we need to check the CSP both on request and response.
net::Error net_error = CheckContentSecurityPolicy(
- navigation_handle_->WasServerRedirect(),
+ navigation_handle_->WasServerRedirect() /* has_followed_redirect */,
false /* url_upgraded_after_redirect */, true /* is_response_check */);
if (net_error != net::OK) {
OnRequestFailedInternal(network::URLLoaderCompletionStatus(net_error),
@@ -1685,7 +1690,7 @@
bool NavigationRequest::IsAllowedByCSPDirective(
CSPContext* context,
CSPDirective::Name directive,
- bool is_redirect,
+ bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check,
CSPContext::CheckCSPDisposition disposition) {
@@ -1702,25 +1707,26 @@
url = common_params_.url;
}
return context->IsAllowedByCsp(
- directive, url, is_redirect, is_response_check,
+ directive, url, has_followed_redirect, is_response_check,
common_params_.source_location.value_or(SourceLocation()), disposition,
begin_params_->is_form_submission);
}
net::Error NavigationRequest::CheckCSPDirectives(
RenderFrameHostImpl* parent,
- bool is_redirect,
+ bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check,
CSPContext::CheckCSPDisposition disposition) {
bool navigate_to_allowed = IsAllowedByCSPDirective(
- initiator_csp_context_.get(), CSPDirective::NavigateTo, is_redirect,
- url_upgraded_after_redirect, is_response_check, disposition);
+ initiator_csp_context_.get(), CSPDirective::NavigateTo,
+ has_followed_redirect, url_upgraded_after_redirect, is_response_check,
+ disposition);
bool frame_src_allowed = true;
if (parent) {
frame_src_allowed = IsAllowedByCSPDirective(
- parent, CSPDirective::FrameSrc, is_redirect,
+ parent, CSPDirective::FrameSrc, has_followed_redirect,
url_upgraded_after_redirect, is_response_check, disposition);
}
@@ -1740,13 +1746,13 @@
}
net::Error NavigationRequest::CheckContentSecurityPolicy(
- bool is_redirect,
+ bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check) {
if (common_params_.url.SchemeIs(url::kAboutScheme))
return net::OK;
- if (common_params_.should_check_main_world_csp ==
+ if (common_params_.initiator_csp_info.should_check_main_world_csp ==
CSPDisposition::DO_NOT_CHECK) {
return net::OK;
}
@@ -1772,13 +1778,13 @@
// This sequence of events allows site owners to learn about (via step 1) any
// requests that are upgraded in step 2.
- net::Error report_only_csp_status =
- CheckCSPDirectives(parent, is_redirect, url_upgraded_after_redirect,
- is_response_check, CSPContext::CHECK_REPORT_ONLY_CSP);
+ net::Error report_only_csp_status = CheckCSPDirectives(
+ parent, has_followed_redirect, url_upgraded_after_redirect,
+ is_response_check, CSPContext::CHECK_REPORT_ONLY_CSP);
// upgrade-insecure-requests is handled in the network code for redirects,
// only do the upgrade here if this is not a redirect.
- if (!is_redirect && !frame_tree_node()->IsMainFrame()) {
+ if (!has_followed_redirect && !frame_tree_node()->IsMainFrame()) {
if (parent &&
parent->ShouldModifyRequestUrlForCsp(true /* is subresource */)) {
upgrade_if_insecure_ = true;
@@ -1787,9 +1793,9 @@
}
}
- net::Error enforced_csp_status =
- CheckCSPDirectives(parent, is_redirect, url_upgraded_after_redirect,
- is_response_check, CSPContext::CHECK_ENFORCED_CSP);
+ net::Error enforced_csp_status = CheckCSPDirectives(
+ parent, has_followed_redirect, url_upgraded_after_redirect,
+ is_response_check, CSPContext::CHECK_ENFORCED_CSP);
if (enforced_csp_status != net::OK)
return enforced_csp_status;
return report_only_csp_status;
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index 44fae3f..7d37652 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -111,7 +111,8 @@
int current_history_list_length,
bool override_user_agent,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client);
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator);
~NavigationRequest() override;
@@ -226,7 +227,8 @@
const FrameNavigationEntry* frame_navigation_entry,
const NavigationEntryImpl* navitation_entry,
std::unique_ptr<NavigationUIData> navigation_ui_data,
- mojom::NavigationClientAssociatedPtrInfo navigation_client);
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator);
// NavigationURLLoaderDelegate implementation.
void OnRequestRedirected(
@@ -286,7 +288,7 @@
// and navigate-to checks.
bool IsAllowedByCSPDirective(CSPContext* context,
CSPDirective::Name directive,
- bool is_redirect,
+ bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check,
CSPContext::CheckCSPDisposition disposition);
@@ -296,7 +298,7 @@
// Returns net::OK if the checks pass, and net::ERR_ABORTED or
// net::ERR_BLOCKED_BY_CLIENT depending on which checks fail.
net::Error CheckCSPDirectives(RenderFrameHostImpl* parent,
- bool is_redirect,
+ bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check,
CSPContext::CheckCSPDisposition disposition);
@@ -307,7 +309,7 @@
// a report will be sent.
// - The navigation request may be upgraded from HTTP to HTTPS if a CSP is
// configured to upgrade insecure requests.
- net::Error CheckContentSecurityPolicy(bool is_redirect,
+ net::Error CheckContentSecurityPolicy(bool has_followed_redirect,
bool url_upgraded_after_redirect,
bool is_response_check);
diff --git a/content/browser/frame_host/navigator.cc b/content/browser/frame_host/navigator.cc
index 59cea6f..7cce6d2 100644
--- a/content/browser/frame_host/navigator.cc
+++ b/content/browser/frame_host/navigator.cc
@@ -32,6 +32,7 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) {}
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) {}
} // namespace content
diff --git a/content/browser/frame_host/navigator.h b/content/browser/frame_host/navigator.h
index a57db61..a02d2e9 100644
--- a/content/browser/frame_host/navigator.h
+++ b/content/browser/frame_host/navigator.h
@@ -144,7 +144,8 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client);
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator);
// Used to restart a navigation that was thought to be same-document in
// cross-document mode.
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 201a8526..7d7544d 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -582,7 +582,8 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) {
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) {
// TODO(clamy): the url sent by the renderer should be validated with
// FilterURL.
// This is a renderer-initiated navigation.
@@ -645,7 +646,8 @@
frame_tree_node, pending_entry, common_params,
std::move(begin_params), controller_->GetLastCommittedEntryIndex(),
controller_->GetEntryCount(), override_user_agent,
- std::move(blob_url_loader_factory), std::move(navigation_client)));
+ std::move(blob_url_loader_factory), std::move(navigation_client),
+ std::move(navigation_initiator)));
NavigationRequest* navigation_request = frame_tree_node->navigation_request();
// This frame has already run beforeunload before it sent this IPC. See if
diff --git a/content/browser/frame_host/navigator_impl.h b/content/browser/frame_host/navigator_impl.h
index 5efb8da..cfc5634 100644
--- a/content/browser/frame_host/navigator_impl.h
+++ b/content/browser/frame_host/navigator_impl.h
@@ -90,7 +90,8 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) override;
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) override;
void RestartNavigationAsCrossDocument(
std::unique_ptr<NavigationRequest> navigation_request) override;
void OnAbortNavigation(FrameTreeNode* frame_tree_node) override;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 9d82fe28..b71ff538 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -487,23 +487,27 @@
mojom::BeginNavigationParamsPtr begin_navigation_params;
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory;
mojom::NavigationClientAssociatedPtrInfo navigation_client;
+ blink::mojom::NavigationInitiatorPtr navigation_initiator;
PendingNavigation(
CommonNavigationParams common_params,
mojom::BeginNavigationParamsPtr begin_navigation_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client);
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator);
};
PendingNavigation::PendingNavigation(
CommonNavigationParams common_params,
mojom::BeginNavigationParamsPtr begin_navigation_params,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
- mojom::NavigationClientAssociatedPtrInfo navigation_client)
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator)
: common_params(common_params),
begin_navigation_params(std::move(begin_navigation_params)),
blob_url_loader_factory(std::move(blob_url_loader_factory)),
- navigation_client(std::move(navigation_client)) {}
+ navigation_client(std::move(navigation_client)),
+ navigation_initiator(std::move(navigation_initiator)) {}
class FileChooserImpl : public content::FileSelectListener,
private content::WebContentsObserver {
@@ -1594,7 +1598,8 @@
frame_tree_node(), pending_navigate_->common_params,
std::move(pending_navigate_->begin_navigation_params),
std::move(pending_navigate_->blob_url_loader_factory),
- std::move(pending_navigate_->navigation_client));
+ std::move(pending_navigate_->navigation_client),
+ std::move(pending_navigate_->navigation_initiator));
pending_navigate_.reset();
}
}
@@ -3483,7 +3488,8 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
blink::mojom::BlobURLTokenPtr blob_url_token,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) {
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) {
if (!is_active())
return;
@@ -3547,13 +3553,15 @@
if (waiting_for_init_) {
pending_navigate_ = std::make_unique<PendingNavigation>(
validated_params, std::move(begin_params),
- std::move(blob_url_loader_factory), std::move(navigation_client));
+ std::move(blob_url_loader_factory), std::move(navigation_client),
+ std::move(navigation_initiator));
return;
}
frame_tree_node()->navigator()->OnBeginNavigation(
frame_tree_node(), validated_params, std::move(begin_params),
- std::move(blob_url_loader_factory), std::move(navigation_client));
+ std::move(blob_url_loader_factory), std::move(navigation_client),
+ std::move(navigation_initiator));
}
void RenderFrameHostImpl::SubresourceResponseStarted(
@@ -3833,13 +3841,10 @@
DCHECK(data_url.SchemeIs(url::kDataScheme));
CommonNavigationParams common_params(
data_url, Referrer(), ui::PAGE_TRANSITION_LINK,
- FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT, false, false,
- GURL(), GURL(), PREVIEWS_OFF, base::TimeTicks::Now(), "GET", nullptr,
- base::Optional<SourceLocation>(),
- CSPDisposition::CHECK /* should_check_main_world_csp */,
- false /* started_from_context_menu */, false /* has_user_gesture */,
- std::vector<ContentSecurityPolicy>() /* initiator_csp */,
- CSPSource() /* initiator_self_source */);
+ FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT, false, false, GURL(), GURL(),
+ PREVIEWS_OFF, base::TimeTicks::Now(), "GET", nullptr,
+ base::Optional<SourceLocation>(), false /* started_from_context_menu */,
+ false /* has_user_gesture */, InitiatorCSPInfo());
CommitNavigation(0, nullptr, network::mojom::URLLoaderClientEndpointsPtr(),
common_params, RequestNavigationParams(), false,
base::nullopt, base::nullopt /* subresource_overrides */,
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 00563fa..b75cf70 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -67,6 +67,7 @@
#include "third_party/blink/public/common/frame/user_activation_update_type.h"
#include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
#include "third_party/blink/public/mojom/frame/find_in_page.mojom.h"
+#include "third_party/blink/public/mojom/frame/navigation_initiator.mojom.h"
#include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
#include "third_party/blink/public/platform/dedicated_worker_factory.mojom.h"
#include "third_party/blink/public/platform/modules/bluetooth/web_bluetooth.mojom.h"
@@ -996,7 +997,8 @@
const CommonNavigationParams& common_params,
mojom::BeginNavigationParamsPtr begin_params,
blink::mojom::BlobURLTokenPtr blob_url_token,
- mojom::NavigationClientAssociatedPtrInfo navigation_client) override;
+ mojom::NavigationClientAssociatedPtrInfo navigation_client,
+ blink::mojom::NavigationInitiatorPtr navigation_initiator) override;
void SubresourceResponseStarted(const GURL& url,
net::CertStatus cert_status) override;
void ResourceLoadComplete(