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

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: only call InitRenderView when creating the main frame 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 4143 matching lines...) Expand 10 before | Expand all | Expand 10 after
4154 source_id); 4154 source_id);
4155 } 4155 }
4156 4156
4157 int WebContentsImpl::CreateSwappedOutRenderView( 4157 int WebContentsImpl::CreateSwappedOutRenderView(
4158 SiteInstance* instance) { 4158 SiteInstance* instance) {
4159 int render_view_routing_id = MSG_ROUTING_NONE; 4159 int render_view_routing_id = MSG_ROUTING_NONE;
4160 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { 4160 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) {
4161 GetRenderManager()->CreateRenderFrameProxy(instance); 4161 GetRenderManager()->CreateRenderFrameProxy(instance);
4162 } else { 4162 } else {
4163 GetRenderManager()->CreateRenderFrame( 4163 GetRenderManager()->CreateRenderFrame(
4164 instance, nullptr, 4164 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
4165 CREATE_RF_SWAPPED_OUT | CREATE_RF_FOR_MAIN_FRAME_NAVIGATION |
4166 CREATE_RF_HIDDEN,
4167 &render_view_routing_id); 4165 &render_view_routing_id);
4168 } 4166 }
4169 return render_view_routing_id; 4167 return render_view_routing_id;
4170 } 4168 }
4171 4169
4172 void WebContentsImpl::OnUserGesture() { 4170 void WebContentsImpl::OnUserGesture() {
4173 // Notify observers. 4171 // Notify observers.
4174 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture()); 4172 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture());
4175 4173
4176 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); 4174 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
4329 const GURL& url) { 4327 const GURL& url) {
4330 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( 4328 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(
4331 url, std::string()))); 4329 url, std::string())));
4332 } 4330 }
4333 4331
4334 NavigationEntry* 4332 NavigationEntry*
4335 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { 4333 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() {
4336 return controller_.GetLastCommittedEntry(); 4334 return controller_.GetLastCommittedEntry();
4337 } 4335 }
4338 4336
4339 bool WebContentsImpl::CreateRenderViewForRenderManager( 4337 void WebContentsImpl::CreateRenderWidgetHostViewForRenderManager(
4340 RenderViewHost* render_view_host, 4338 RenderViewHost* render_view_host) {
4341 int opener_frame_routing_id, 4339 RenderWidgetHostViewBase* rwh_view = nullptr;
4342 int proxy_routing_id,
4343 const FrameReplicationState& replicated_frame_state,
4344 bool for_main_frame_navigation) {
4345 TRACE_EVENT0("browser,navigation",
4346 "WebContentsImpl::CreateRenderViewForRenderManager");
4347 // Can be NULL during tests.
4348 RenderWidgetHostViewBase* rwh_view;
4349 // TODO(kenrb): RenderWidgetHostViewChildFrame special casing is temporary
4350 // until RenderWidgetHost is attached to RenderFrameHost. We need to special
4351 // case this because RWH is still a base class of RenderViewHost, and child
4352 // frame RWHVs are unique in that they do not have their own WebContents.
4353 bool is_guest_in_site_per_process = 4340 bool is_guest_in_site_per_process =
4354 !!browser_plugin_guest_.get() && 4341 !!browser_plugin_guest_.get() &&
4355 BrowserPluginGuestMode::UseCrossProcessFramesForGuests(); 4342 BrowserPluginGuestMode::UseCrossProcessFramesForGuests();
4356 if (!for_main_frame_navigation || is_guest_in_site_per_process) { 4343 if (is_guest_in_site_per_process) {
4357 RenderWidgetHostViewChildFrame* rwh_view_child = 4344 RenderWidgetHostViewChildFrame* rwh_view_child =
4358 new RenderWidgetHostViewChildFrame(render_view_host); 4345 new RenderWidgetHostViewChildFrame(render_view_host);
4359 rwh_view = rwh_view_child; 4346 rwh_view = rwh_view_child;
4360 } else { 4347 } else {
4361 rwh_view = view_->CreateViewForWidget(render_view_host, false); 4348 rwh_view = view_->CreateViewForWidget(render_view_host, false);
4362 } 4349 }
4363 4350
4364 // Now that the RenderView has been created, we need to tell it its size. 4351 // Now that the RenderView has been created, we need to tell it its size.
4365 if (rwh_view) 4352 if (rwh_view)
4366 rwh_view->SetSize(GetSizeForNewRenderView()); 4353 rwh_view->SetSize(GetSizeForNewRenderView());
4354 }
4355
4356 bool WebContentsImpl::CreateRenderViewForRenderManager(
4357 RenderViewHost* render_view_host,
4358 int opener_frame_routing_id,
4359 int proxy_routing_id,
4360 const FrameReplicationState& replicated_frame_state) {
4361 TRACE_EVENT0("browser,navigation",
4362 "WebContentsImpl::CreateRenderViewForRenderManager");
4363
4364 if (proxy_routing_id == MSG_ROUTING_NONE)
4365 CreateRenderWidgetHostViewForRenderManager(render_view_host);
4367 4366
4368 // Make sure we use the correct starting page_id in the new RenderView. 4367 // Make sure we use the correct starting page_id in the new RenderView.
4369 UpdateMaxPageIDIfNecessary(render_view_host); 4368 UpdateMaxPageIDIfNecessary(render_view_host);
4370 int32 max_page_id = 4369 int32 max_page_id =
4371 GetMaxPageIDForSiteInstance(render_view_host->GetSiteInstance()); 4370 GetMaxPageIDForSiteInstance(render_view_host->GetSiteInstance());
4372 4371
4373 if (!static_cast<RenderViewHostImpl*>(render_view_host) 4372 if (!static_cast<RenderViewHostImpl*>(render_view_host)
4374 ->CreateRenderView(opener_frame_routing_id, proxy_routing_id, 4373 ->CreateRenderView(opener_frame_routing_id, proxy_routing_id,
4375 max_page_id, replicated_frame_state, 4374 max_page_id, replicated_frame_state,
4376 created_with_opener_)) { 4375 created_with_opener_)) {
4377 return false; 4376 return false;
4378 } 4377 }
4379 4378
4380 SetHistoryOffsetAndLengthForView(render_view_host, 4379 SetHistoryOffsetAndLengthForView(render_view_host,
4381 controller_.GetLastCommittedEntryIndex(), 4380 controller_.GetLastCommittedEntryIndex(),
4382 controller_.GetEntryCount()); 4381 controller_.GetEntryCount());
4383 4382
4384 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 4383 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
4385 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on 4384 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on
4386 // linux. See crbug.com/83941. 4385 // linux. See crbug.com/83941.
4386 RenderWidgetHostView* rwh_view = render_view_host->GetView();
4387 if (rwh_view) { 4387 if (rwh_view) {
4388 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) 4388 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost())
4389 render_widget_host->WasResized(); 4389 render_widget_host->WasResized();
4390 } 4390 }
4391 #endif 4391 #endif
4392 4392
4393 return true; 4393 return true;
4394 } 4394 }
4395 4395
4396 bool WebContentsImpl::CreateRenderFrameForRenderManager( 4396 bool WebContentsImpl::CreateRenderFrameForRenderManager(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4428 if (!web_contents_android) { 4428 if (!web_contents_android) {
4429 web_contents_android = new WebContentsAndroid(this); 4429 web_contents_android = new WebContentsAndroid(this);
4430 SetUserData(kWebContentsAndroidKey, web_contents_android); 4430 SetUserData(kWebContentsAndroidKey, web_contents_android);
4431 } 4431 }
4432 return web_contents_android; 4432 return web_contents_android;
4433 } 4433 }
4434 4434
4435 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() { 4435 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() {
4436 return CreateRenderViewForRenderManager( 4436 return CreateRenderViewForRenderManager(
4437 GetRenderViewHost(), MSG_ROUTING_NONE, MSG_ROUTING_NONE, 4437 GetRenderViewHost(), MSG_ROUTING_NONE, MSG_ROUTING_NONE,
4438 frame_tree_.root()->current_replication_state(), true); 4438 frame_tree_.root()->current_replication_state());
4439 } 4439 }
4440 4440
4441 #elif defined(OS_MACOSX) 4441 #elif defined(OS_MACOSX)
4442 4442
4443 void WebContentsImpl::SetAllowOtherViews(bool allow) { 4443 void WebContentsImpl::SetAllowOtherViews(bool allow) {
4444 view_->SetAllowOtherViews(allow); 4444 view_->SetAllowOtherViews(allow);
4445 } 4445 }
4446 4446
4447 bool WebContentsImpl::GetAllowOtherViews() { 4447 bool WebContentsImpl::GetAllowOtherViews() {
4448 return view_->GetAllowOtherViews(); 4448 return view_->GetAllowOtherViews();
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
4621 return NULL; 4621 return NULL;
4622 } 4622 }
4623 4623
4624 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { 4624 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
4625 force_disable_overscroll_content_ = force_disable; 4625 force_disable_overscroll_content_ = force_disable;
4626 if (view_) 4626 if (view_)
4627 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 4627 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
4628 } 4628 }
4629 4629
4630 } // namespace content 4630 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698