OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |