Index: content/browser/frame_host/render_frame_host_impl.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
index 868b9dd5c1379e1e80b0d388ebe08e6a309ee0d7..93d21faa4fb8933b87fa196cd1a7b63db3e05f57 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -565,8 +565,12 @@ void RenderFrameHostImpl::OnBeforeUnloadACK( |
// If this renderer navigated while the beforeunload request was in flight, we |
// may have cleared this state in OnNavigate, in which case we can ignore |
// this message. |
- if (!render_view_host_->is_waiting_for_beforeunload_ack_ || |
- render_view_host_->rvh_state_ != RenderViewHostImpl::STATE_DEFAULT) { |
+ // However renderer might also be swapped out but we still want to proceed |
+ // with navigation, otherwise it would block future navigations. This can |
+ // happen when pending cross-site navigation is canceled by a second one just |
+ // before OnNavigate while current RVH is waiting for commit but second |
+ // navigation is started from the beginning. |
+ if (!render_view_host_->is_waiting_for_beforeunload_ack_) { |
return; |
} |