| Index: content/browser/web_contents/web_contents_impl.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
|
| index 82638b40b056314e5890bdc67c0a03f3964445be..2f0858bacb7cfc6eff0162b7fca041f892aa56fc 100644
|
| --- a/content/browser/web_contents/web_contents_impl.cc
|
| +++ b/content/browser/web_contents/web_contents_impl.cc
|
| @@ -4688,9 +4688,12 @@ void WebContentsImpl::OnDialogClosed(int render_process_id,
|
| last_dialog_suppressed_ = dialog_was_suppressed;
|
|
|
| if (is_showing_before_unload_dialog_ && !success) {
|
| - if (rfh)
|
| + // It is possible for the current RenderFrameHost to have changed in the
|
| + // meantime. Do not reset the navigation state in that case.
|
| + if (rfh && rfh == rfh->frame_tree_node()->current_frame_host()) {
|
| rfh->frame_tree_node()->BeforeUnloadCanceled();
|
| - controller_.DiscardNonCommittedEntries();
|
| + controller_.DiscardNonCommittedEntries();
|
| + }
|
|
|
| FOR_EACH_OBSERVER(WebContentsObserver, observers_,
|
| BeforeUnloadDialogCancelled());
|
|
|