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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 1306053008: Avoid creating a RenderWidgetHostView for proxies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing comments Created 5 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
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 4153 matching lines...) Expand 10 before | Expand all | Expand 10 after
4164 source_id); 4164 source_id);
4165 } 4165 }
4166 4166
4167 int WebContentsImpl::CreateSwappedOutRenderView( 4167 int WebContentsImpl::CreateSwappedOutRenderView(
4168 SiteInstance* instance) { 4168 SiteInstance* instance) {
4169 int render_view_routing_id = MSG_ROUTING_NONE; 4169 int render_view_routing_id = MSG_ROUTING_NONE;
4170 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { 4170 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) {
4171 GetRenderManager()->CreateRenderFrameProxy(instance); 4171 GetRenderManager()->CreateRenderFrameProxy(instance);
4172 } else { 4172 } else {
4173 GetRenderManager()->CreateRenderFrame( 4173 GetRenderManager()->CreateRenderFrame(
4174 instance, nullptr, 4174 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
4175 CREATE_RF_SWAPPED_OUT | CREATE_RF_FOR_MAIN_FRAME_NAVIGATION |
4176 CREATE_RF_HIDDEN,
4177 &render_view_routing_id); 4175 &render_view_routing_id);
4178 } 4176 }
4179 return render_view_routing_id; 4177 return render_view_routing_id;
4180 } 4178 }
4181 4179
4182 void WebContentsImpl::OnUserGesture() { 4180 void WebContentsImpl::OnUserGesture() {
4183 // Notify observers. 4181 // Notify observers.
4184 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture()); 4182 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture());
4185 4183
4186 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); 4184 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get();
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
4338 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( 4336 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager(
4339 const GURL& url) { 4337 const GURL& url) {
4340 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(url))); 4338 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(url)));
4341 } 4339 }
4342 4340
4343 NavigationEntry* 4341 NavigationEntry*
4344 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { 4342 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() {
4345 return controller_.GetLastCommittedEntry(); 4343 return controller_.GetLastCommittedEntry();
4346 } 4344 }
4347 4345
4348 bool WebContentsImpl::CreateRenderViewForRenderManager( 4346 bool WebContentsImpl::CreateRenderWidgetHostViewForRenderManager(
4349 RenderViewHost* render_view_host, 4347 RenderViewHost* render_view_host,
4350 int opener_frame_routing_id, 4348 bool main_frame_is_proxy) {
Charlie Reis 2015/08/31 19:02:51 Hmm, I'm not happy with this. The name leads to s
lfg 2015/09/02 00:32:17 Done.
4351 int proxy_routing_id, 4349 RenderWidgetHostViewBase* rwh_view = nullptr;
4352 const FrameReplicationState& replicated_frame_state,
4353 bool for_main_frame_navigation) {
4354 TRACE_EVENT0("browser,navigation",
4355 "WebContentsImpl::CreateRenderViewForRenderManager");
4356 // Can be NULL during tests.
4357 RenderWidgetHostViewBase* rwh_view;
4358 // TODO(kenrb): RenderWidgetHostViewChildFrame special casing is temporary
4359 // until RenderWidgetHost is attached to RenderFrameHost. We need to special
4360 // case this because RWH is still a base class of RenderViewHost, and child
4361 // frame RWHVs are unique in that they do not have their own WebContents.
4362 bool is_guest_in_site_per_process = 4350 bool is_guest_in_site_per_process =
4363 !!browser_plugin_guest_.get() && 4351 !!browser_plugin_guest_.get() &&
4364 BrowserPluginGuestMode::UseCrossProcessFramesForGuests(); 4352 BrowserPluginGuestMode::UseCrossProcessFramesForGuests();
4365 if (!for_main_frame_navigation || is_guest_in_site_per_process) { 4353 if (is_guest_in_site_per_process) {
4366 RenderWidgetHostViewChildFrame* rwh_view_child = 4354 RenderWidgetHostViewChildFrame* rwh_view_child =
4367 new RenderWidgetHostViewChildFrame(render_view_host); 4355 new RenderWidgetHostViewChildFrame(render_view_host);
4368 rwh_view = rwh_view_child; 4356 rwh_view = rwh_view_child;
4369 } else { 4357 } else if (!main_frame_is_proxy) {
4370 rwh_view = view_->CreateViewForWidget(render_view_host, false); 4358 rwh_view = view_->CreateViewForWidget(render_view_host, false);
4371 } 4359 }
4372 4360
4373 // Now that the RenderView has been created, we need to tell it its size. 4361 // Now that the RenderView has been created, we need to tell it its size.
4374 if (rwh_view) 4362 if (rwh_view)
4375 rwh_view->SetSize(GetSizeForNewRenderView()); 4363 rwh_view->SetSize(GetSizeForNewRenderView());
4376 4364
4365 return !!rwh_view;
Charlie Reis 2015/08/31 19:02:51 No one seems to check the return value. Seems lik
lfg 2015/09/02 00:32:17 Done.
4366 }
4367
4368 bool WebContentsImpl::CreateRenderViewForRenderManager(
4369 RenderViewHost* render_view_host,
4370 int opener_frame_routing_id,
4371 int proxy_routing_id,
4372 const FrameReplicationState& replicated_frame_state) {
4373 TRACE_EVENT0("browser,navigation",
4374 "WebContentsImpl::CreateRenderViewForRenderManager");
4375
4376 CreateRenderWidgetHostViewForRenderManager(
4377 render_view_host, proxy_routing_id != MSG_ROUTING_NONE);
Charlie Reis 2015/08/31 19:02:51 What if this were for a subframe? We would be pas
lfg 2015/09/02 00:32:17 This can't be a subframe and have a proxy_routing_
4378
4377 // Make sure we use the correct starting page_id in the new RenderView. 4379 // Make sure we use the correct starting page_id in the new RenderView.
4378 UpdateMaxPageIDIfNecessary(render_view_host); 4380 UpdateMaxPageIDIfNecessary(render_view_host);
4379 int32 max_page_id = 4381 int32 max_page_id =
4380 GetMaxPageIDForSiteInstance(render_view_host->GetSiteInstance()); 4382 GetMaxPageIDForSiteInstance(render_view_host->GetSiteInstance());
4381 4383
4382 if (!static_cast<RenderViewHostImpl*>(render_view_host) 4384 if (!static_cast<RenderViewHostImpl*>(render_view_host)
4383 ->CreateRenderView(opener_frame_routing_id, proxy_routing_id, 4385 ->CreateRenderView(opener_frame_routing_id, proxy_routing_id,
4384 max_page_id, replicated_frame_state, 4386 max_page_id, replicated_frame_state,
4385 created_with_opener_)) { 4387 created_with_opener_)) {
4386 return false; 4388 return false;
4387 } 4389 }
4388 4390
4389 SetHistoryOffsetAndLengthForView(render_view_host, 4391 SetHistoryOffsetAndLengthForView(render_view_host,
4390 controller_.GetLastCommittedEntryIndex(), 4392 controller_.GetLastCommittedEntryIndex(),
4391 controller_.GetEntryCount()); 4393 controller_.GetEntryCount());
4392 4394
4393 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 4395 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
4394 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on 4396 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on
4395 // linux. See crbug.com/83941. 4397 // linux. See crbug.com/83941.
4398 RenderWidgetHostView* rwh_view = render_view_host->GetView();
4396 if (rwh_view) { 4399 if (rwh_view) {
4397 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) 4400 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost())
4398 render_widget_host->WasResized(); 4401 render_widget_host->WasResized();
4399 } 4402 }
4400 #endif 4403 #endif
4401 4404
4402 return true; 4405 return true;
4403 } 4406 }
4404 4407
4405 bool WebContentsImpl::CreateRenderFrameForRenderManager( 4408 bool WebContentsImpl::CreateRenderFrameForRenderManager(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4437 if (!web_contents_android) { 4440 if (!web_contents_android) {
4438 web_contents_android = new WebContentsAndroid(this); 4441 web_contents_android = new WebContentsAndroid(this);
4439 SetUserData(kWebContentsAndroidKey, web_contents_android); 4442 SetUserData(kWebContentsAndroidKey, web_contents_android);
4440 } 4443 }
4441 return web_contents_android; 4444 return web_contents_android;
4442 } 4445 }
4443 4446
4444 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() { 4447 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() {
4445 return CreateRenderViewForRenderManager( 4448 return CreateRenderViewForRenderManager(
4446 GetRenderViewHost(), MSG_ROUTING_NONE, MSG_ROUTING_NONE, 4449 GetRenderViewHost(), MSG_ROUTING_NONE, MSG_ROUTING_NONE,
4447 frame_tree_.root()->current_replication_state(), true); 4450 frame_tree_.root()->current_replication_state());
4448 } 4451 }
4449 4452
4450 #elif defined(OS_MACOSX) 4453 #elif defined(OS_MACOSX)
4451 4454
4452 void WebContentsImpl::SetAllowOtherViews(bool allow) { 4455 void WebContentsImpl::SetAllowOtherViews(bool allow) {
4453 view_->SetAllowOtherViews(allow); 4456 view_->SetAllowOtherViews(allow);
4454 } 4457 }
4455 4458
4456 bool WebContentsImpl::GetAllowOtherViews() { 4459 bool WebContentsImpl::GetAllowOtherViews() {
4457 return view_->GetAllowOtherViews(); 4460 return view_->GetAllowOtherViews();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
4615 player_map->erase(it); 4618 player_map->erase(it);
4616 } 4619 }
4617 4620
4618 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { 4621 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
4619 force_disable_overscroll_content_ = force_disable; 4622 force_disable_overscroll_content_ = force_disable;
4620 if (view_) 4623 if (view_)
4621 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 4624 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
4622 } 4625 }
4623 4626
4624 } // namespace content 4627 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698