Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2539)

Unified Diff: content/renderer/render_frame_proxy.cc

Issue 660093003: Detach RemoteFrame from the tree when deleting RenderFrameProxy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_frame_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « content/renderer/render_frame_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698