Index: content/renderer/render_frame_proxy.cc |
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc |
index 77f7eaac53e347adb6d8da6ee59017b2802741f7..5a433c8f95413c867626e20c0df252ecbfd49fcf 100644 |
--- a/content/renderer/render_frame_proxy.cc |
+++ b/content/renderer/render_frame_proxy.cc |
@@ -118,10 +118,6 @@ RenderFrameProxy::~RenderFrameProxy() { |
RenderThread::Get()->RemoveRoute(routing_id_); |
g_routing_id_proxy_map.Get().erase(routing_id_); |
- |
- // TODO(nick): Call close unconditionally when web_frame() is always remote. |
- if (web_frame()->isWebRemoteFrame()) |
- web_frame()->close(); |
} |
void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, |
@@ -178,10 +174,13 @@ void RenderFrameProxy::OnDeleteProxy() { |
RenderFrameImpl* render_frame = |
RenderFrameImpl::FromRoutingID(frame_routing_id_); |
- if (render_frame) |
+ // If this is a proxy for the top-level frame, the RenderFrame will clean it |
+ // up, so only unregister for subframes. |
+ if (render_frame && web_frame_->parent()) |
Charlie Reis
2014/10/16 23:17:56
Seems like render_frame wouldn't exist if this wer
nasko
2014/10/16 23:21:09
Done.
|
render_frame->set_render_frame_proxy(NULL); |
- delete this; |
+ DCHECK(web_frame_->isWebRemoteFrame()); |
+ web_frame_->detach(); |
} |
void RenderFrameProxy::OnChildFrameProcessGone() { |
@@ -230,6 +229,14 @@ void RenderFrameProxy::OnDisownOpener() { |
web_frame_->setOpener(NULL); |
} |
+void RenderFrameProxy::frameDetached() { |
+ if (web_frame_->parent()) |
+ web_frame_->parent()->removeChild(web_frame_); |
+ |
+ web_frame_->close(); |
+ delete this; |
+} |
+ |
void RenderFrameProxy::postMessageEvent( |
blink::WebLocalFrame* source_frame, |
blink::WebRemoteFrame* target_frame, |