Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 2f79ac027a3144ba9006282e9f8b529ea2d58d43..95b0c68645d2b1cc42c709b26d0a4ade3266dd92 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1712,11 +1712,15 @@ void RenderFrameImpl::OnBeforeUnload(bool is_reload) { |
// it. |
CHECK(!frame_->parent()); |
+ // Save the routing_id, as the RenderFrameImpl can be deleted in |
+ // dispatchBeforeUnloadEvent. See https://crbug.com/666714 for details. |
+ int routing_id = routing_id_; |
+ |
base::TimeTicks before_unload_start_time = base::TimeTicks::Now(); |
bool proceed = frame_->dispatchBeforeUnloadEvent(is_reload); |
base::TimeTicks before_unload_end_time = base::TimeTicks::Now(); |
- Send(new FrameHostMsg_BeforeUnload_ACK( |
- routing_id_, proceed, before_unload_start_time, before_unload_end_time)); |
+ RenderThread::Get()->Send(new FrameHostMsg_BeforeUnload_ACK( |
+ routing_id, proceed, before_unload_start_time, before_unload_end_time)); |
} |
void RenderFrameImpl::OnSwapOut( |