diff options
author | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 20:26:16 +0000 |
---|---|---|
committer | creis@chromium.org <creis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 20:26:16 +0000 |
commit | c95fa8b2a9133416258ff51c10c2a636b8748775 (patch) | |
tree | d228dbcab025132d115b751de9d6d0dd595c04e1 /content/browser | |
parent | 939404935277cd0b4ecbe606781297361383bff0 (diff) | |
download | chromium_src-c95fa8b2a9133416258ff51c10c2a636b8748775.zip chromium_src-c95fa8b2a9133416258ff51c10c2a636b8748775.tar.gz chromium_src-c95fa8b2a9133416258ff51c10c2a636b8748775.tar.bz2 |
Update the URL if the user cancels a beforeunload handler.
BUG=80401
TEST=BrowserTest.CancelBeforeUnloadResetsURL
Review URL: http://codereview.chromium.org/6904039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83388 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser')
4 files changed, 16 insertions, 3 deletions
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc index 2d661ed..98bcbf8 100644 --- a/content/browser/renderer_host/render_view_host.cc +++ b/content/browser/renderer_host/render_view_host.cc @@ -1196,6 +1196,10 @@ void RenderViewHost::OnMsgShouldCloseACK(bool proceed) { management_delegate->ShouldClosePage( unload_ack_is_for_cross_site_transition_, proceed); } + + // If canceled, notify the delegate to cancel its pending navigation entry. + if (!proceed) + delegate_->DidCancelLoading(); } void RenderViewHost::WindowMoveOrResizeStarted() { diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h index e4319c5..dc9d120 100644 --- a/content/browser/renderer_host/render_view_host_delegate.h +++ b/content/browser/renderer_host/render_view_host_delegate.h @@ -464,6 +464,9 @@ class RenderViewHostDelegate : public IPC::Channel::Listener { // notion of the throbber stopping. virtual void DidStopLoading() {} + // The pending page load was canceled. + virtual void DidCancelLoading() {} + // The RenderView made progress loading a page's top frame. // |progress| is a value between 0 (nothing loaded) to 1.0 (top frame // entirely loaded). diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc index ace1679..ed362a3 100644 --- a/content/browser/tab_contents/tab_contents.cc +++ b/content/browser/tab_contents/tab_contents.cc @@ -1225,9 +1225,7 @@ void TabContents::OnDidFailProvisionalLoadWithError( // before the page loaded so that the discard would discard the wrong entry. NavigationEntry* pending_entry = controller_.pending_entry(); if (pending_entry && pending_entry->url() == validated_url) { - controller_.DiscardNonCommittedEntries(); - // Update the URL display. - NotifyNavigationStateChanged(TabContents::INVALIDATE_URL); + DidCancelLoading(); } render_manager_.RendererAbortedProvisionalLoad(render_view_host()); @@ -1975,6 +1973,13 @@ void TabContents::DidStopLoading() { FOR_EACH_OBSERVER(TabContentsObserver, observers_, DidStopLoading()); } +void TabContents::DidCancelLoading() { + controller_.DiscardNonCommittedEntries(); + + // Update the URL display. + NotifyNavigationStateChanged(TabContents::INVALIDATE_URL); +} + void TabContents::DidChangeLoadProgress(double progress) { if (delegate()) delegate()->LoadProgressChanged(progress); diff --git a/content/browser/tab_contents/tab_contents.h b/content/browser/tab_contents/tab_contents.h index 0d54825..5d3cd23 100644 --- a/content/browser/tab_contents/tab_contents.h +++ b/content/browser/tab_contents/tab_contents.h @@ -798,6 +798,7 @@ class TabContents : public PageNavigator, virtual void RequestMove(const gfx::Rect& new_bounds); virtual void DidStartLoading(); virtual void DidStopLoading(); + virtual void DidCancelLoading(); virtual void DidChangeLoadProgress(double progress); virtual void DocumentOnLoadCompletedInMainFrame( RenderViewHost* render_view_host, |