Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 55ee71666f00cdd1408e0c9456c7ec97d3c619a4..3797b91ebb4bc7b3759d513d0684293ea4c404fc 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1065,8 +1065,17 @@ void RenderFrameImpl::OnSwapOut(int proxy_routing_id) { |
// Let subframes know that the frame is now rendered remotely, for the |
// purposes of compositing and input events. |
- if (!is_main_frame) |
+ if (!is_main_frame) { |
+ // TODO(creis): Remove setIsRemote and send initializeChildFrame from the |
+ // RenderFrameProxy, since the RenderFrameHost may be deleted first. In |
+ // the meantime, temporarily set this frame's proxy so that the message |
+ // is sent via RenderFrameProxy. |
+ // See http://crbug.com/416102. |
+ DCHECK(!render_frame_proxy_); |
+ set_render_frame_proxy(proxy); |
frame_->setIsRemote(true); |
+ set_render_frame_proxy(NULL); |
+ } |
// Replace the page with a blank dummy URL. The unload handler will not be |
// run a second time, thanks to a check in FrameLoader::stopLoading. |
@@ -3182,7 +3191,7 @@ void RenderFrameImpl::forwardInputEvent(const blink::WebInputEvent* event) { |
void RenderFrameImpl::initializeChildFrame(const blink::WebRect& frame_rect, |
float scale_factor) { |
- Send(new FrameHostMsg_InitializeChildFrame( |
+ render_frame_proxy_->Send(new FrameHostMsg_InitializeChildFrame( |
routing_id_, frame_rect, scale_factor)); |
} |