Chromium Code Reviews| 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 111 RenderFrameProxy::~RenderFrameProxy() { | 111 RenderFrameProxy::~RenderFrameProxy() { |
| 112 render_view()->UnregisterRenderFrameProxy(this); | 112 render_view()->UnregisterRenderFrameProxy(this); |
| 113 | 113 |
| 114 FrameMap::iterator it = g_frame_map.Get().find(web_frame_); | 114 FrameMap::iterator it = g_frame_map.Get().find(web_frame_); |
| 115 CHECK(it != g_frame_map.Get().end()); | 115 CHECK(it != g_frame_map.Get().end()); |
| 116 CHECK_EQ(it->second, this); | 116 CHECK_EQ(it->second, this); |
| 117 g_frame_map.Get().erase(it); | 117 g_frame_map.Get().erase(it); |
| 118 | 118 |
| 119 RenderThread::Get()->RemoveRoute(routing_id_); | 119 RenderThread::Get()->RemoveRoute(routing_id_); |
| 120 g_routing_id_proxy_map.Get().erase(routing_id_); | 120 g_routing_id_proxy_map.Get().erase(routing_id_); |
| 121 | |
| 122 // TODO(nick): Call close unconditionally when web_frame() is always remote. | |
| 123 if (web_frame()->isWebRemoteFrame()) | |
| 124 web_frame()->close(); | |
| 125 } | 121 } |
| 126 | 122 |
| 127 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, | 123 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, |
| 128 RenderViewImpl* render_view) { | 124 RenderViewImpl* render_view) { |
| 129 CHECK(web_frame); | 125 CHECK(web_frame); |
| 130 CHECK(render_view); | 126 CHECK(render_view); |
| 131 | 127 |
| 132 web_frame_ = web_frame; | 128 web_frame_ = web_frame; |
| 133 render_view_ = render_view; | 129 render_view_ = render_view; |
| 134 | 130 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 return false; | 167 return false; |
| 172 } | 168 } |
| 173 message->set_routing_id(routing_id_); | 169 message->set_routing_id(routing_id_); |
| 174 return RenderThread::Get()->Send(message); | 170 return RenderThread::Get()->Send(message); |
| 175 } | 171 } |
| 176 | 172 |
| 177 void RenderFrameProxy::OnDeleteProxy() { | 173 void RenderFrameProxy::OnDeleteProxy() { |
| 178 RenderFrameImpl* render_frame = | 174 RenderFrameImpl* render_frame = |
| 179 RenderFrameImpl::FromRoutingID(frame_routing_id_); | 175 RenderFrameImpl::FromRoutingID(frame_routing_id_); |
| 180 | 176 |
| 181 if (render_frame) | 177 // If this is a proxy for the top-level frame, the RenderFrame will clean it |
| 178 // up, so only unregister for subframes. | |
| 179 if (render_frame && web_frame_->parent()) | |
|
Charlie Reis
2014/10/16 23:17:56
Seems like render_frame wouldn't exist if this wer
nasko
2014/10/16 23:21:09
Done.
| |
| 182 render_frame->set_render_frame_proxy(NULL); | 180 render_frame->set_render_frame_proxy(NULL); |
| 183 | 181 |
| 184 delete this; | 182 DCHECK(web_frame_->isWebRemoteFrame()); |
| 183 web_frame_->detach(); | |
| 185 } | 184 } |
| 186 | 185 |
| 187 void RenderFrameProxy::OnChildFrameProcessGone() { | 186 void RenderFrameProxy::OnChildFrameProcessGone() { |
| 188 if (compositing_helper_.get()) | 187 if (compositing_helper_.get()) |
| 189 compositing_helper_->ChildFrameGone(); | 188 compositing_helper_->ChildFrameGone(); |
| 190 } | 189 } |
| 191 | 190 |
| 192 void RenderFrameProxy::OnCompositorFrameSwapped(const IPC::Message& message) { | 191 void RenderFrameProxy::OnCompositorFrameSwapped(const IPC::Message& message) { |
| 193 FrameMsg_CompositorFrameSwapped::Param param; | 192 FrameMsg_CompositorFrameSwapped::Param param; |
| 194 if (!FrameMsg_CompositorFrameSwapped::Read(&message, ¶m)) | 193 if (!FrameMsg_CompositorFrameSwapped::Read(&message, ¶m)) |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 223 if (render_frame) { | 222 if (render_frame) { |
| 224 if (render_frame->GetWebFrame()->opener()) | 223 if (render_frame->GetWebFrame()->opener()) |
| 225 render_frame->GetWebFrame()->setOpener(NULL); | 224 render_frame->GetWebFrame()->setOpener(NULL); |
| 226 return; | 225 return; |
| 227 } | 226 } |
| 228 | 227 |
| 229 if (web_frame_->opener()) | 228 if (web_frame_->opener()) |
| 230 web_frame_->setOpener(NULL); | 229 web_frame_->setOpener(NULL); |
| 231 } | 230 } |
| 232 | 231 |
| 232 void RenderFrameProxy::frameDetached() { | |
| 233 if (web_frame_->parent()) | |
| 234 web_frame_->parent()->removeChild(web_frame_); | |
| 235 | |
| 236 web_frame_->close(); | |
| 237 delete this; | |
| 238 } | |
| 239 | |
| 233 void RenderFrameProxy::postMessageEvent( | 240 void RenderFrameProxy::postMessageEvent( |
| 234 blink::WebLocalFrame* source_frame, | 241 blink::WebLocalFrame* source_frame, |
| 235 blink::WebRemoteFrame* target_frame, | 242 blink::WebRemoteFrame* target_frame, |
| 236 blink::WebSecurityOrigin target_origin, | 243 blink::WebSecurityOrigin target_origin, |
| 237 blink::WebDOMMessageEvent event) { | 244 blink::WebDOMMessageEvent event) { |
| 238 DCHECK(!web_frame_ || web_frame_ == target_frame); | 245 DCHECK(!web_frame_ || web_frame_ == target_frame); |
| 239 | 246 |
| 240 ViewMsg_PostMessage_Params params; | 247 ViewMsg_PostMessage_Params params; |
| 241 params.is_data_raw_string = false; | 248 params.is_data_raw_string = false; |
| 242 params.data = event.data().toString(); | 249 params.data = event.data().toString(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 292 blink::WebUserGestureIndicator::isProcessingUserGesture(); | 299 blink::WebUserGestureIndicator::isProcessingUserGesture(); |
| 293 blink::WebUserGestureIndicator::consumeUserGesture(); | 300 blink::WebUserGestureIndicator::consumeUserGesture(); |
| 294 Send(new FrameHostMsg_OpenURL(routing_id_, params)); | 301 Send(new FrameHostMsg_OpenURL(routing_id_, params)); |
| 295 } | 302 } |
| 296 | 303 |
| 297 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) { | 304 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) { |
| 298 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); | 305 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); |
| 299 } | 306 } |
| 300 | 307 |
| 301 } // namespace | 308 } // namespace |
| OLD | NEW |