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..e89143d43b9de7f6920c9d2a3e200029f89e4242 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, |
@@ -181,7 +177,9 @@ void RenderFrameProxy::OnDeleteProxy() { |
if (render_frame) |
render_frame->set_render_frame_proxy(NULL); |
- delete this; |
+ |
+ DCHECK(web_frame_->isWebRemoteFrame()); |
+ web_frame_->detach(); |
dcheng
2014/10/16 20:54:47
Remind me what OnDeleteProxy is used for? I guess
nasko
2014/10/16 20:56:34
Correct, this is an IPC coming from the browser. W
|
} |
void RenderFrameProxy::OnChildFrameProcessGone() { |
@@ -230,6 +228,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, |