Chromium Code Reviews| 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, |