Index: chrome/browser/render_view_host.cc |
=================================================================== |
--- chrome/browser/render_view_host.cc (revision 4898) |
+++ chrome/browser/render_view_host.cc (working copy) |
@@ -88,7 +88,8 @@ |
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::JavaScriptMessageBoxClosed(IPC::Message* reply_msg, |
bool success, |
const std::wstring& prompt) { |
- if (is_waiting_for_unload_ack_) |
- StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
+ if (is_waiting_for_unload_ack_) { |
+ if (are_javascript_messages_suppressed_) { |
+ delegate_->RendererUnresponsive(this, is_waiting_for_unload_ack_); |
+ return; |
+ } else { |
darin (slow to review)
2008/11/07 00:00:45
nit: no need for else after return. alternatively
|
+ StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
+ } |
+ } |
if (--modal_dialog_count_ == 0) |
ResetEvent(modal_dialog_event_.Get()); |
@@ -1049,7 +1056,8 @@ |
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, |