diff options
author | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-07 00:12:25 +0000 |
---|---|---|
committer | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-07 00:12:25 +0000 |
commit | 3c44868adca04a51ee5c33d02279ad9c626e9dac (patch) | |
tree | 9226086d729025c45c3ad456b36911c0e76a7fdb /chrome/browser/render_view_host.cc | |
parent | b96813156ed29c2e8ffa20e462b8487383e2f667 (diff) | |
download | chromium_src-3c44868adca04a51ee5c33d02279ad9c626e9dac.zip chromium_src-3c44868adca04a51ee5c33d02279ad9c626e9dac.tar.gz chromium_src-3c44868adca04a51ee5c33d02279ad9c626e9dac.tar.bz2 |
Continue with crosssite navigations if alerts are suppressed
in an unload handler (i.e. we have an infinite-ish alert loop).
Review URL: http://codereview.chromium.org/9477
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4935 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/render_view_host.cc')
-rw-r--r-- | chrome/browser/render_view_host.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/chrome/browser/render_view_host.cc b/chrome/browser/render_view_host.cc index 06958bd..6c127a7 100644 --- a/chrome/browser/render_view_host.cc +++ b/chrome/browser/render_view_host.cc @@ -88,7 +88,8 @@ RenderViewHost::RenderViewHost(SiteInstance* instance, suspended_nav_message_(NULL), run_modal_reply_msg_(NULL), has_unload_listener_(false), - is_waiting_for_unload_ack_(false) { + is_waiting_for_unload_ack_(false), + are_javascript_messages_suppressed_(false) { DCHECK(instance_); DCHECK(delegate_); if (modal_dialog_event == NULL) @@ -477,8 +478,14 @@ void RenderViewHost::CaptureThumbnail() { void RenderViewHost::JavaScriptMessageBoxClosed(IPC::Message* reply_msg, bool success, const std::wstring& prompt) { - if (is_waiting_for_unload_ack_) + if (is_waiting_for_unload_ack_) { + if (are_javascript_messages_suppressed_) { + delegate_->RendererUnresponsive(this, is_waiting_for_unload_ack_); + return; + } + StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); + } if (--modal_dialog_count_ == 0) ResetEvent(modal_dialog_event_.Get()); @@ -1046,7 +1053,8 @@ void RenderViewHost::OnMsgRunJavaScriptMessage( if (modal_dialog_count_++ == 0) SetEvent(modal_dialog_event_.Get()); bool did_suppress_message = false; - delegate_->RunJavaScriptMessage(message, default_prompt, flags, reply_msg); + delegate_->RunJavaScriptMessage(message, default_prompt, flags, reply_msg, + &are_javascript_messages_suppressed_); } void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const std::wstring& message, |