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 7fe74daf4470e4eb5fd4f762c087e3152d3e7b54..6707816561d703d406d4a1b15ee6c5b56089c2c1 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -1695,16 +1695,12 @@ void RenderFrameHostImpl::Stop() { |
void RenderFrameHostImpl::DispatchBeforeUnload(bool for_navigation) { |
// TODO(creis): Support beforeunload on subframes. For now just pretend that |
// the handler ran and allowed the navigation to proceed. |
- if (GetParent() || !IsRenderFrameLive()) { |
- // We don't have a live renderer, so just skip running beforeunload. |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kEnableBrowserSideNavigation)) { |
- frame_tree_node_->navigator()->OnBeforeUnloadACK( |
- frame_tree_node_, true); |
- } else { |
- frame_tree_node_->render_manager()->OnBeforeUnloadACK( |
- for_navigation, true, base::TimeTicks::Now()); |
- } |
+ if (!ShouldDispatchBeforeUnload()) { |
+ DCHECK(!(base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation) && |
+ for_navigation)); |
+ frame_tree_node_->render_manager()->OnBeforeUnloadACK( |
+ for_navigation, true, base::TimeTicks::Now()); |
return; |
} |
TRACE_EVENT_ASYNC_BEGIN0( |
@@ -1737,6 +1733,11 @@ void RenderFrameHostImpl::DispatchBeforeUnload(bool for_navigation) { |
} |
} |
+bool RenderFrameHostImpl::ShouldDispatchBeforeUnload() { |
+ // TODO(creis): Support beforeunload on subframes. |
+ return !GetParent() && IsRenderFrameLive(); |
+} |
+ |
void RenderFrameHostImpl::DisownOpener() { |
Send(new FrameMsg_DisownOpener(GetRoutingID())); |
} |