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

Unified Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 1306053008: Avoid creating a RenderWidgetHostView for proxies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_manager.cc
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 6ed4f00477e0a4a2a8116a23ac0ccbed70934919..0db22328001286825a1c744dd30e8aed0b89fd35 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -401,8 +401,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
// soon anyway, and we don't have the NavigationEntry for this host.
delegate_->CreateRenderViewForRenderManager(
render_frame_host_->render_view_host(), MSG_ROUTING_NONE,
- MSG_ROUTING_NONE, frame_tree_node_->current_replication_state(),
- frame_tree_node_->IsMainFrame());
+ MSG_ROUTING_NONE, frame_tree_node_->current_replication_state());
}
// If the renderer isn't live, then try to create a new one to satisfy this
@@ -421,8 +420,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(),
frame_tree_node_);
if (!InitRenderView(dest_render_frame_host->render_view_host(),
- MSG_ROUTING_NONE,
- frame_tree_node_->IsMainFrame()))
+ MSG_ROUTING_NONE))
return nullptr;
// Now that we've created a new renderer, be sure to hide it if it isn't
@@ -1058,8 +1056,7 @@ RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation(
if (!navigation_rfh->IsRenderFrameLive()) {
// Recreate the opener chain.
CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_);
- if (!InitRenderView(navigation_rfh->render_view_host(), MSG_ROUTING_NONE,
- frame_tree_node_->IsMainFrame())) {
+ if (!InitRenderView(navigation_rfh->render_view_host(), MSG_ROUTING_NONE)) {
return nullptr;
}
@@ -1562,12 +1559,8 @@ const GURL& RenderFrameHostManager::GetCurrentURLForSiteInstance(
void RenderFrameHostManager::CreatePendingRenderFrameHost(
SiteInstance* old_instance,
- SiteInstance* new_instance,
- bool is_main_frame) {
+ SiteInstance* new_instance) {
int create_render_frame_flags = 0;
- if (is_main_frame)
- create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
-
if (delegate_->IsHidden())
create_render_frame_flags |= CREATE_RF_HIDDEN;
@@ -1691,8 +1684,6 @@ bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost(
CreateProxiesForNewRenderFrameHost(old_instance, new_instance);
int create_render_frame_flags = 0;
- if (frame_tree_node_->IsMainFrame())
- create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
if (delegate_->IsHidden())
create_render_frame_flags |= CREATE_RF_HIDDEN;
speculative_render_frame_host_ =
@@ -1737,6 +1728,7 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
// remove it from the list of proxy hosts below if it will be active.
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
if (proxy && proxy->render_frame_host()) {
+ RenderViewHost* render_view_host = proxy->GetRenderViewHost();
CHECK(!swapped_out_forbidden);
if (view_routing_id_ptr)
*view_routing_id_ptr = proxy->GetRenderViewHost()->GetRoutingID();
@@ -1749,6 +1741,10 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
proxy_hosts_->Remove(instance->GetId());
// NB |proxy| is deleted at this point.
}
+ // If we are reusing the RenderViewHost and it doesn't already have a
+ // RenderWidgetHostView, we need to create one if this is the main frame.
+ if (!render_view_host->GetView() && frame_tree_node_->IsMainFrame())
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
} else {
// Create a new RenderFrameHost if we don't find an existing one.
@@ -1785,8 +1781,17 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
}
- success = InitRenderView(render_view_host, proxy_routing_id,
- !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION));
+ if (frame_tree_node_->IsMainFrame()) {
+ success = InitRenderView(render_view_host, proxy_routing_id);
+
+ // If we are reusing the RenderViewHost and it doesn't already have a
+ // RenderWidgetHostView, we need to create one if this is the main frame.
+ if (!swapped_out && !render_view_host->GetView())
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
+ } else {
+ DCHECK(render_view_host->IsRenderViewLive());
+ }
+
if (success) {
// Remember that InitRenderView also created the RenderFrameProxy.
if (swapped_out)
@@ -1871,7 +1876,7 @@ int RenderFrameHostManager::CreateRenderFrameProxy(SiteInstance* instance) {
if (SiteIsolationPolicy::IsSwappedOutStateForbidden() &&
frame_tree_node_->IsMainFrame()) {
- InitRenderView(render_view_host, proxy->GetRoutingID(), true);
+ InitRenderView(render_view_host, proxy->GetRoutingID());
proxy->set_render_frame_proxy_created(true);
} else {
proxy->InitRenderFrameProxy();
@@ -1906,7 +1911,7 @@ void RenderFrameHostManager::EnsureRenderViewInitialized(
if (!proxy)
return;
- InitRenderView(render_view_host, proxy->GetRoutingID(), false);
+ InitRenderView(render_view_host, proxy->GetRoutingID());
proxy->set_render_frame_proxy_created(true);
}
@@ -1941,8 +1946,7 @@ void RenderFrameHostManager::SetRWHViewForInnerContents(
bool RenderFrameHostManager::InitRenderView(
RenderViewHostImpl* render_view_host,
- int proxy_routing_id,
- bool for_main_frame_navigation) {
+ int proxy_routing_id) {
// Ensure the renderer process is initialized before creating the
// RenderView.
if (!render_view_host->GetProcess()->Init())
@@ -1979,7 +1983,7 @@ bool RenderFrameHostManager::InitRenderView(
return delegate_->CreateRenderViewForRenderManager(
render_view_host, opener_frame_routing_id, proxy_routing_id,
- frame_tree_node_->current_replication_state(), for_main_frame_navigation);
+ frame_tree_node_->current_replication_state());
}
bool RenderFrameHostManager::InitRenderFrame(
@@ -2295,8 +2299,7 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
// CancelPending(), otherwise CancelPending may clear the pending_web_ui_
// and the page will not have its bindings set appropriately.
SetPendingWebUI(dest_url, bindings);
- CreatePendingRenderFrameHost(current_instance, new_instance.get(),
- frame_tree_node_->IsMainFrame());
+ CreatePendingRenderFrameHost(current_instance, new_instance.get());
if (!pending_render_frame_host_)
return nullptr;
@@ -2576,11 +2579,8 @@ void RenderFrameHostManager::CreateOpenerProxiesForFrameTree(
// Create a swapped out RenderView in the given SiteInstance if none
// exists. Since an opener can point to a subframe, do this on the root
// frame of the current opener's frame tree.
- frame_tree->root()->render_manager()->
- CreateRenderFrame(instance, nullptr,
- CREATE_RF_FOR_MAIN_FRAME_NAVIGATION |
- CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
- nullptr);
+ frame_tree->root()->render_manager()->CreateRenderFrame(
+ instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, nullptr);
}
}
}
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.h ('k') | content/browser/renderer_host/render_view_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698