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

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: addressing comments Created 5 years, 4 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 c2ef320311620f6587e9483f41ed7abcb146846c..56899a541b1eb159b8750c541e9a0c1bd82ffb51 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -397,8 +397,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 crashed, then try to create a new one to satisfy this
@@ -416,8 +415,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
// Recreate the opener chain.
CreateOpenerProxiesIfNeeded(dest_render_frame_host->GetSiteInstance());
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
@@ -1040,8 +1038,7 @@ RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation(
if (!navigation_rfh->IsRenderFrameLive()) {
// Recreate the opener chain.
CreateOpenerProxiesIfNeeded(navigation_rfh->GetSiteInstance());
- 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;
}
@@ -1544,12 +1541,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;
@@ -1682,8 +1675,6 @@ bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost(
CreateProxiesForNewRenderFrameHost(old_instance, new_instance,
&create_render_frame_flags);
- 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_ =
@@ -1728,6 +1719,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();
@@ -1740,6 +1732,10 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
proxy_hosts_->Remove(instance->GetId());
// NB |proxy| is deleted at this point.
}
+ if (!render_view_host->GetView()) {
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host,
+ false);
Charlie Reis 2015/08/31 19:02:51 How do we know main_frame_is_proxy is false? This
lfg 2015/09/02 00:32:16 You're right, we don't know that. What ends up hap
+ }
} else {
// Create a new RenderFrameHost if we don't find an existing one.
new_render_frame_host = CreateRenderFrameHost(instance, MSG_ROUTING_NONE,
@@ -1761,8 +1757,12 @@ 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));
+ success = InitRenderView(render_view_host, proxy_routing_id);
+ if (proxy_routing_id == MSG_ROUTING_NONE && !render_view_host->GetView()) {
Charlie Reis 2015/08/31 19:02:51 Maybe using |!swapped_out| would be clearer than |
lfg 2015/09/02 00:32:16 Done.
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host,
+ false);
Charlie Reis 2015/08/31 19:02:51 Again, this could be a subframe, so I'm not sure h
lfg 2015/09/02 00:32:16 Same as above. I've added a IsMainFrame() check, w
+ }
+
if (success) {
// Remember that InitRenderView also created the RenderFrameProxy.
if (swapped_out)
@@ -1847,7 +1847,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();
@@ -1885,7 +1885,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);
}
@@ -1920,8 +1920,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())
@@ -1958,7 +1957,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(
@@ -2268,8 +2267,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;
@@ -2550,11 +2548,8 @@ void RenderFrameHostManager::CreateOpenerProxiesForFrameTree(
// setting its opener to the given route_id. Since the opener can point to
// a subframe, do this on the root frame of the opener's frame tree.
// Return the new view's route_id.
- 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);
}
}

Powered by Google App Engine
This is Rietveld 408576698