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..6b8c760fe24ceec2acadee22b830d4cc26d0a375 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, |
@@ -175,13 +171,8 @@ bool RenderFrameProxy::Send(IPC::Message* message) { |
} |
void RenderFrameProxy::OnDeleteProxy() { |
- RenderFrameImpl* render_frame = |
- RenderFrameImpl::FromRoutingID(frame_routing_id_); |
- |
- if (render_frame) |
- render_frame->set_render_frame_proxy(NULL); |
- |
- delete this; |
+ DCHECK(web_frame_->isWebRemoteFrame()); |
+ web_frame_->detach(); |
} |
void RenderFrameProxy::OnChildFrameProcessGone() { |
@@ -230,6 +221,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, |