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

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

Issue 1199313006: Disable support for swapped out RenderFrame(Host) on desktop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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
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/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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698