Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1050)

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2384813002: Don't wait to close tabs waiting for JavaScript dialogs. (Closed)
Patch Set: fix Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 88daf80dcaf5e3e2f22c8a3f7fa8f47575df62f8..4bd4114e0cec6b3fc646356c19bd153dc3029cf8 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1601,6 +1601,8 @@ void RenderFrameHostImpl::OnRunJavaScriptMessage(
// process input events.
GetProcess()->SetIgnoreInputEvents(true);
render_view_host_->GetWidget()->StopHangMonitorTimeout();
+ render_view_host_->GetWidget()->SetHangMonitorKnownUnresponsive(true);
+ is_within_javascript_dialog_ = true;
delegate_->RunJavaScriptMessage(this, message, default_prompt,
frame_url, type, reply_msg);
}
@@ -1613,6 +1615,8 @@ void RenderFrameHostImpl::OnRunBeforeUnloadConfirm(
// shouldn't process input events.
GetProcess()->SetIgnoreInputEvents(true);
render_view_host_->GetWidget()->StopHangMonitorTimeout();
+ render_view_host_->GetWidget()->SetHangMonitorKnownUnresponsive(true);
+ is_within_javascript_dialog_ = true;
delegate_->RunBeforeUnloadConfirm(this, is_reload, reply_msg);
}
@@ -2414,6 +2418,10 @@ void RenderFrameHostImpl::JavaScriptDialogClosed(
const base::string16& user_input,
bool dialog_was_suppressed) {
GetProcess()->SetIgnoreInputEvents(false);
+ if (is_within_javascript_dialog_) {
+ render_view_host_->GetWidget()->SetHangMonitorKnownUnresponsive(false);
+ is_within_javascript_dialog_ = false;
+ }
bool is_waiting = is_waiting_for_beforeunload_ack_ || IsWaitingForUnloadACK();
// If we are executing as part of (before)unload event handling, we don't

Powered by Google App Engine
This is Rietveld 408576698