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

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: recreate WidgetViews when reusing RenderView 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 140bf3f096c2bc896146e3b036d0f55670531710..b2f243005626f6b60c4c0f0f21ac9afe007223af 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
@@ -1017,8 +1015,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;
}
@@ -1521,12 +1518,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;
@@ -1659,8 +1652,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_ =
@@ -1705,6 +1696,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();
@@ -1717,6 +1709,9 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
proxy_hosts_->Remove(instance->GetId());
// NB |proxy| is deleted at this point.
}
+ if (!render_view_host->GetView())
Charlie Reis 2015/08/28 18:58:26 nit: This needs braces, since the body doesn't fit
lfg 2015/08/28 21:18:40 Done.
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host,
+ MSG_ROUTING_NONE);
} else {
// Create a new RenderFrameHost if we don't find an existing one.
new_render_frame_host = CreateRenderFrameHost(instance, MSG_ROUTING_NONE,
@@ -1738,8 +1733,11 @@ 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())
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host,
+ proxy_routing_id);
Charlie Reis 2015/08/28 18:58:26 We're only calling this if proxy_routing_id is MSG
lfg 2015/08/28 21:18:40 No, I switched the interface to take a bool. What
+
if (success) {
// Remember that InitRenderView also created the RenderFrameProxy.
if (swapped_out)
@@ -1824,7 +1822,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();
@@ -1862,7 +1860,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);
}
@@ -1897,8 +1895,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())
@@ -1935,7 +1932,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(
@@ -2245,8 +2242,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;
@@ -2512,11 +2508,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