Index: content/browser/frame_host/navigation_handle_impl.cc |
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc |
index 824063f5578537866e17c5e92f9baa0695283deb..a461a527235510150b912ef22f442b6eec85fbef 100644 |
--- a/content/browser/frame_host/navigation_handle_impl.cc |
+++ b/content/browser/frame_host/navigation_handle_impl.cc |
@@ -665,6 +665,14 @@ bool NavigationHandleImpl::MaybeTransferAndProceedInternal() { |
RenderFrameHostManager* manager = |
render_frame_host_->frame_tree_node()->render_manager(); |
+ // It is possible for the RenderFrameHost to have been marked as pending |
+ // deletion following the commit of another ongoing navigation. In that case, |
+ // don't attempt to transfer, but don't resume the navigation either. |
+ if (render_frame_host_ != manager->current_frame_host() && |
Charlie Reis
2016/09/30 20:25:26
We used to use is_active() for this (in OnCrossSit
clamy
2016/10/04 11:54:41
Acknowledged.
|
+ render_frame_host_ != manager->pending_frame_host()) { |
+ return false; |
clamy
2016/09/30 14:06:15
This will just suspend the navigation. Alternative
Charlie Reis
2016/09/30 20:25:26
We definitely want to cancel the navigation. The
nasko
2016/09/30 23:21:33
+1 on cancelling the navigation. Keeping it suspen
clamy
2016/10/04 11:54:41
Done. The cancellation if the NavigationHandle isn
|
+ } |
+ |
// In the site-per-process model, the RenderFrameHostManager may also decide |
// (independently from the content embedder's ShouldSwapProcessesForRedirect |
// above) that a process transfer is needed. Process transfers are skipped for |