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

Side by Side Diff: content/renderer/render_frame_proxy.cc

Issue 1136593003: Delete entry in WebFrame->RenderFrameProxy map at WebFrame::close time. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a comment for the frameDetached call. Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_proxy.h" 5 #include "content/renderer/render_frame_proxy.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "content/child/webmessageportchannel_impl.h" 10 #include "content/child/webmessageportchannel_impl.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 // when detaching the main frame. This can be removed once RenderFrameImpl and 124 // when detaching the main frame. This can be removed once RenderFrameImpl and
125 // RenderFrameProxy have been completely decoupled. See 125 // RenderFrameProxy have been completely decoupled. See
126 // https://crbug.com/357747. 126 // https://crbug.com/357747.
127 RenderFrameImpl* render_frame = 127 RenderFrameImpl* render_frame =
128 RenderFrameImpl::FromRoutingID(frame_routing_id_); 128 RenderFrameImpl::FromRoutingID(frame_routing_id_);
129 if (render_frame) 129 if (render_frame)
130 render_frame->set_render_frame_proxy(nullptr); 130 render_frame->set_render_frame_proxy(nullptr);
131 131
132 render_view()->UnregisterRenderFrameProxy(this); 132 render_view()->UnregisterRenderFrameProxy(this);
133 133
134 FrameMap::iterator it = g_frame_map.Get().find(web_frame_); 134 CHECK(!web_frame_);
135 CHECK(it != g_frame_map.Get().end());
136 CHECK_EQ(it->second, this);
137 g_frame_map.Get().erase(it);
138
139 RenderThread::Get()->RemoveRoute(routing_id_); 135 RenderThread::Get()->RemoveRoute(routing_id_);
140 g_routing_id_proxy_map.Get().erase(routing_id_); 136 g_routing_id_proxy_map.Get().erase(routing_id_);
141 } 137 }
142 138
143 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, 139 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame,
144 RenderViewImpl* render_view) { 140 RenderViewImpl* render_view) {
145 CHECK(web_frame); 141 CHECK(web_frame);
146 CHECK(render_view); 142 CHECK(render_view);
147 143
148 web_frame_ = web_frame; 144 web_frame_ = web_frame;
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 void RenderFrameProxy::frameDetached() { 308 void RenderFrameProxy::frameDetached() {
313 if (web_frame_->parent()) { 309 if (web_frame_->parent()) {
314 web_frame_->parent()->removeChild(web_frame_); 310 web_frame_->parent()->removeChild(web_frame_);
315 311
316 // Let the browser process know this subframe is removed, so that it is 312 // Let the browser process know this subframe is removed, so that it is
317 // destroyed in its current process. 313 // destroyed in its current process.
318 Send(new FrameHostMsg_Detach(routing_id_)); 314 Send(new FrameHostMsg_Detach(routing_id_));
319 } 315 }
320 316
321 web_frame_->close(); 317 web_frame_->close();
318
319 // Remove the entry in the WebFrame->RenderFrameProxy map, as the |web_frame_|
320 // is no longer valid.
321 FrameMap::iterator it = g_frame_map.Get().find(web_frame_);
322 CHECK(it != g_frame_map.Get().end());
323 CHECK_EQ(it->second, this);
324 g_frame_map.Get().erase(it);
325
326 web_frame_ = nullptr;
327
322 delete this; 328 delete this;
323 } 329 }
324 330
325 void RenderFrameProxy::postMessageEvent( 331 void RenderFrameProxy::postMessageEvent(
326 blink::WebLocalFrame* source_frame, 332 blink::WebLocalFrame* source_frame,
327 blink::WebRemoteFrame* target_frame, 333 blink::WebRemoteFrame* target_frame,
328 blink::WebSecurityOrigin target_origin, 334 blink::WebSecurityOrigin target_origin,
329 blink::WebDOMMessageEvent event) { 335 blink::WebDOMMessageEvent event) {
330 DCHECK(!web_frame_ || web_frame_ == target_frame); 336 DCHECK(!web_frame_ || web_frame_ == target_frame);
331 337
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 blink::WebUserGestureIndicator::isProcessingUserGesture(); 380 blink::WebUserGestureIndicator::isProcessingUserGesture();
375 blink::WebUserGestureIndicator::consumeUserGesture(); 381 blink::WebUserGestureIndicator::consumeUserGesture();
376 Send(new FrameHostMsg_OpenURL(routing_id_, params)); 382 Send(new FrameHostMsg_OpenURL(routing_id_, params));
377 } 383 }
378 384
379 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) { 385 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) {
380 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); 386 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event));
381 } 387 }
382 388
383 } // namespace 389 } // namespace
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698