Chromium Code Reviews| 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, |