Index: content/browser/frame_host/navigation_request.cc |
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc |
index 7e2fad9b1f1ad11978c2232864b33f889ff70e02..1afe15adbda68131817aa9afbb9b483dacc58de3 100644 |
--- a/content/browser/frame_host/navigation_request.cc |
+++ b/content/browser/frame_host/navigation_request.cc |
@@ -311,6 +311,17 @@ void NavigationRequest::OnResponseStarted( |
NavigatorImpl::CheckWebUIRendererDoesNotDisplayNormalURL(render_frame_host, |
common_params_.url); |
+ // For renderer-initiated navigations that are set to commit in a different |
+ // renderer, allow the embedder to cancel the transfer. |
+ if (!browser_initiated_ && |
+ render_frame_host != frame_tree_node_->current_frame_host() && |
+ !frame_tree_node_->navigator() |
+ ->GetDelegate() |
+ ->ShouldTransferNavigation()) { |
+ frame_tree_node_->ResetNavigationRequest(false); |
+ return; |
+ } |
+ |
// Store the response and the StreamHandle until checks have been processed. |
response_ = response; |
body_ = std::move(body); |