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/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER; | 37 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER; |
38 | 38 |
39 } // namespace | 39 } // namespace |
40 | 40 |
41 // static | 41 // static |
42 RenderFrameProxy* RenderFrameProxy::CreateProxyToReplaceFrame( | 42 RenderFrameProxy* RenderFrameProxy::CreateProxyToReplaceFrame( |
43 RenderFrameImpl* frame_to_replace, | 43 RenderFrameImpl* frame_to_replace, |
44 int routing_id, | 44 int routing_id, |
45 blink::WebTreeScopeType scope) { | 45 blink::WebTreeScopeType scope) { |
46 CHECK_NE(routing_id, MSG_ROUTING_NONE); | 46 CHECK_NE(routing_id, MSG_ROUTING_NONE); |
| 47 LOG(ERROR) << "RFP::CreateProxyToReplaceFrame:" |
| 48 << " routing_id:" << routing_id |
| 49 << " frame_to_replace:" << frame_to_replace; |
47 | 50 |
48 scoped_ptr<RenderFrameProxy> proxy( | 51 scoped_ptr<RenderFrameProxy> proxy( |
49 new RenderFrameProxy(routing_id, frame_to_replace->GetRoutingID())); | 52 new RenderFrameProxy(routing_id, frame_to_replace->GetRoutingID())); |
50 | 53 |
51 // When a RenderFrame is replaced by a RenderProxy, the WebRemoteFrame should | 54 // When a RenderFrame is replaced by a RenderProxy, the WebRemoteFrame should |
52 // always come from WebRemoteFrame::create and a call to WebFrame::swap must | 55 // always come from WebRemoteFrame::create and a call to WebFrame::swap must |
53 // follow later. | 56 // follow later. |
54 blink::WebRemoteFrame* web_frame = | 57 blink::WebRemoteFrame* web_frame = |
55 blink::WebRemoteFrame::create(scope, proxy.get()); | 58 blink::WebRemoteFrame::create(scope, proxy.get()); |
56 proxy->Init(web_frame, frame_to_replace->render_view()); | 59 proxy->Init(web_frame, frame_to_replace->render_view()); |
57 return proxy.release(); | 60 return proxy.release(); |
58 } | 61 } |
59 | 62 |
60 RenderFrameProxy* RenderFrameProxy::CreateFrameProxy( | 63 RenderFrameProxy* RenderFrameProxy::CreateFrameProxy( |
61 int routing_id, | 64 int routing_id, |
62 int parent_routing_id, | 65 int parent_routing_id, |
63 int render_view_routing_id, | 66 int render_view_routing_id, |
64 const FrameReplicationState& replicated_state) { | 67 const FrameReplicationState& replicated_state) { |
| 68 LOG(ERROR) << "RFP::CreateFrameProxy:" |
| 69 << " routing_id:" << routing_id |
| 70 << " parent routing id:" << parent_routing_id; |
| 71 |
65 scoped_ptr<RenderFrameProxy> proxy( | 72 scoped_ptr<RenderFrameProxy> proxy( |
66 new RenderFrameProxy(routing_id, MSG_ROUTING_NONE)); | 73 new RenderFrameProxy(routing_id, MSG_ROUTING_NONE)); |
67 RenderViewImpl* render_view = NULL; | 74 RenderViewImpl* render_view = NULL; |
68 blink::WebRemoteFrame* web_frame = NULL; | 75 blink::WebRemoteFrame* web_frame = NULL; |
69 if (parent_routing_id == MSG_ROUTING_NONE) { | 76 if (parent_routing_id == MSG_ROUTING_NONE) { |
70 // Create a top level WebRemoteFrame. | 77 // Create a top level WebRemoteFrame. |
71 render_view = RenderViewImpl::FromRoutingID(render_view_routing_id); | 78 render_view = RenderViewImpl::FromRoutingID(render_view_routing_id); |
| 79 LOG(ERROR) << "RFP::CreateFrameProxy:" |
| 80 << " rv:" << render_view; |
72 web_frame = | 81 web_frame = |
73 blink::WebRemoteFrame::create(replicated_state.scope, proxy.get()); | 82 blink::WebRemoteFrame::create(replicated_state.scope, proxy.get()); |
74 render_view->webview()->setMainFrame(web_frame); | 83 render_view->webview()->setMainFrame(web_frame); |
75 } else { | 84 } else { |
76 // Create a frame under an existing parent. The parent is always expected | 85 // Create a frame under an existing parent. The parent is always expected |
77 // to be a RenderFrameProxy, because navigations initiated by local frames | 86 // to be a RenderFrameProxy, because navigations initiated by local frames |
78 // should not wind up here. | 87 // should not wind up here. |
79 RenderFrameProxy* parent = | 88 RenderFrameProxy* parent = |
80 RenderFrameProxy::FromRoutingID(parent_routing_id); | 89 RenderFrameProxy::FromRoutingID(parent_routing_id); |
81 web_frame = parent->web_frame()->createRemoteChild( | 90 web_frame = parent->web_frame()->createRemoteChild( |
(...skipping 30 matching lines...) Expand all Loading... |
112 if (iter != g_frame_map.Get().end()) { | 121 if (iter != g_frame_map.Get().end()) { |
113 RenderFrameProxy* proxy = iter->second; | 122 RenderFrameProxy* proxy = iter->second; |
114 DCHECK_EQ(web_frame, proxy->web_frame()); | 123 DCHECK_EQ(web_frame, proxy->web_frame()); |
115 return proxy; | 124 return proxy; |
116 } | 125 } |
117 return NULL; | 126 return NULL; |
118 } | 127 } |
119 | 128 |
120 // static | 129 // static |
121 bool RenderFrameProxy::IsSwappedOutStateForbidden() { | 130 bool RenderFrameProxy::IsSwappedOutStateForbidden() { |
122 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 131 return true; |
123 switches::kSitePerProcess); | |
124 } | 132 } |
125 | 133 |
126 RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id) | 134 RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id) |
127 : routing_id_(routing_id), | 135 : routing_id_(routing_id), |
128 frame_routing_id_(frame_routing_id), | 136 frame_routing_id_(frame_routing_id), |
129 web_frame_(NULL), | 137 web_frame_(NULL), |
130 render_view_(NULL) { | 138 render_view_(NULL) { |
| 139 LOG(ERROR) << "RFP[" << this << "]::RFP:" |
| 140 << " routing_id:" << routing_id_ |
| 141 << " frame:" << frame_routing_id; |
| 142 |
131 std::pair<RoutingIDProxyMap::iterator, bool> result = | 143 std::pair<RoutingIDProxyMap::iterator, bool> result = |
132 g_routing_id_proxy_map.Get().insert(std::make_pair(routing_id_, this)); | 144 g_routing_id_proxy_map.Get().insert(std::make_pair(routing_id_, this)); |
133 CHECK(result.second) << "Inserting a duplicate item."; | 145 CHECK(result.second) << "Inserting a duplicate item."; |
134 RenderThread::Get()->AddRoute(routing_id_, this); | 146 RenderThread::Get()->AddRoute(routing_id_, this); |
135 } | 147 } |
136 | 148 |
137 RenderFrameProxy::~RenderFrameProxy() { | 149 RenderFrameProxy::~RenderFrameProxy() { |
138 // TODO(nasko): Set the render_frame_proxy to null to avoid a double deletion | 150 // TODO(nasko): Set the render_frame_proxy to null to avoid a double deletion |
139 // when detaching the main frame. This can be removed once RenderFrameImpl and | 151 // when detaching the main frame. This can be removed once RenderFrameImpl and |
140 // RenderFrameProxy have been completely decoupled. See | 152 // RenderFrameProxy have been completely decoupled. See |
141 // https://crbug.com/357747. | 153 // https://crbug.com/357747. |
142 RenderFrameImpl* render_frame = | 154 RenderFrameImpl* render_frame = |
143 RenderFrameImpl::FromRoutingID(frame_routing_id_); | 155 RenderFrameImpl::FromRoutingID(frame_routing_id_); |
144 if (render_frame) | 156 if (render_frame) |
145 render_frame->set_render_frame_proxy(nullptr); | 157 render_frame->set_render_frame_proxy(nullptr); |
146 | 158 |
147 render_view()->UnregisterRenderFrameProxy(this); | 159 render_view()->UnregisterRenderFrameProxy(this); |
148 | 160 |
149 CHECK(!web_frame_); | 161 CHECK(!web_frame_); |
150 RenderThread::Get()->RemoveRoute(routing_id_); | 162 RenderThread::Get()->RemoveRoute(routing_id_); |
151 g_routing_id_proxy_map.Get().erase(routing_id_); | 163 g_routing_id_proxy_map.Get().erase(routing_id_); |
| 164 LOG(ERROR) << "RFP[" << this << "]::~RFP"; |
152 } | 165 } |
153 | 166 |
154 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, | 167 void RenderFrameProxy::Init(blink::WebRemoteFrame* web_frame, |
155 RenderViewImpl* render_view) { | 168 RenderViewImpl* render_view) { |
156 CHECK(web_frame); | 169 CHECK(web_frame); |
157 CHECK(render_view); | 170 CHECK(render_view); |
158 | 171 |
159 web_frame_ = web_frame; | 172 web_frame_ = web_frame; |
160 render_view_ = render_view; | 173 render_view_ = render_view; |
161 | 174 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 if (!compositing_helper_.get()) { | 298 if (!compositing_helper_.get()) { |
286 compositing_helper_ = | 299 compositing_helper_ = |
287 ChildFrameCompositingHelper::CreateForRenderFrameProxy(this); | 300 ChildFrameCompositingHelper::CreateForRenderFrameProxy(this); |
288 compositing_helper_->EnableCompositing(true); | 301 compositing_helper_->EnableCompositing(true); |
289 } | 302 } |
290 compositing_helper_->OnSetSurface(surface_id, frame_size, scale_factor, | 303 compositing_helper_->OnSetSurface(surface_id, frame_size, scale_factor, |
291 sequence); | 304 sequence); |
292 } | 305 } |
293 | 306 |
294 void RenderFrameProxy::OnDisownOpener() { | 307 void RenderFrameProxy::OnDisownOpener() { |
| 308 LOG(ERROR) << "RFP[" << this << "]::OnDisownOpener"; |
295 // TODO(creis): We should only see this for main frames for now. To support | 309 // TODO(creis): We should only see this for main frames for now. To support |
296 // disowning the opener on subframes, we will need to move WebContentsImpl's | 310 // disowning the opener on subframes, we will need to move WebContentsImpl's |
297 // opener_ to FrameTreeNode. | 311 // opener_ to FrameTreeNode. |
298 CHECK(!web_frame_->parent()); | 312 CHECK(!web_frame_->parent()); |
299 | 313 |
300 // When there is a RenderFrame for this proxy, tell it to disown its opener. | 314 // When there is a RenderFrame for this proxy, tell it to disown its opener. |
301 // TODO(creis): Remove this when we only have WebRemoteFrames and make sure | 315 // TODO(creis): Remove this when we only have WebRemoteFrames and make sure |
302 // they know they have an opener. | 316 // they know they have an opener. |
303 if (!RenderFrameProxy::IsSwappedOutStateForbidden()) { | 317 if (!RenderFrameProxy::IsSwappedOutStateForbidden()) { |
304 RenderFrameImpl* render_frame = | 318 RenderFrameImpl* render_frame = |
305 RenderFrameImpl::FromRoutingID(frame_routing_id_); | 319 RenderFrameImpl::FromRoutingID(frame_routing_id_); |
306 if (render_frame) { | 320 if (render_frame) { |
| 321 CHECK(false); |
307 if (render_frame->GetWebFrame()->opener()) | 322 if (render_frame->GetWebFrame()->opener()) |
308 render_frame->GetWebFrame()->setOpener(NULL); | 323 render_frame->GetWebFrame()->setOpener(NULL); |
309 return; | 324 return; |
310 } | 325 } |
311 } | 326 } |
312 | 327 |
313 if (web_frame_->opener()) | 328 if (web_frame_->opener()) |
314 web_frame_->setOpener(NULL); | 329 web_frame_->setOpener(NULL); |
315 } | 330 } |
316 | 331 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 blink::WebUserGestureIndicator::isProcessingUserGesture(); | 435 blink::WebUserGestureIndicator::isProcessingUserGesture(); |
421 blink::WebUserGestureIndicator::consumeUserGesture(); | 436 blink::WebUserGestureIndicator::consumeUserGesture(); |
422 Send(new FrameHostMsg_OpenURL(routing_id_, params)); | 437 Send(new FrameHostMsg_OpenURL(routing_id_, params)); |
423 } | 438 } |
424 | 439 |
425 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) { | 440 void RenderFrameProxy::forwardInputEvent(const blink::WebInputEvent* event) { |
426 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); | 441 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); |
427 } | 442 } |
428 | 443 |
429 } // namespace | 444 } // namespace |
OLD | NEW |