Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index 8c44414cbda911773b920c08a7dd79d3a988a60a..6749aafe832138b29352a637eb1107f508b56817 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -4858,6 +4858,16 @@ |
"ChildProcess.HangRendererType", type, |
RendererUnresponsiveType::RENDERER_UNRESPONSIVE_MAX); |
+ RenderFrameHostImpl* rfhi = |
+ static_cast<RenderFrameHostImpl*>(GetRenderViewHost()->GetMainFrame()); |
+ if (rfhi->is_waiting_for_beforeunload_ack()) { |
+ // If the hang is in the beforeunload handler, pretend the beforeunload |
+ // listeners have all fired and allow the delegate to continue closing; |
+ // the user will not have the option of cancelling the close. |
+ rfhi->SimulateBeforeUnloadAck(); |
+ return; |
+ } |
+ |
if (!GetRenderViewHost() || !GetRenderViewHost()->IsRenderViewLive()) |
return; |