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

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

Issue 616133002: Make RenderFrame(Host) own a RenderWidget(Host). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 11 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 51c9c241ec37466bb2fa073c3c32af10f25c6b61..5ba4e4205fbb16ccbd5121d9dde9d6815e5864b7 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -119,9 +119,10 @@ RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const {
RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const {
if (interstitial_page_)
return interstitial_page_->GetView();
- if (!render_frame_host_)
+ if (!render_frame_host_ ||
+ !render_frame_host_->GetView())
Charlie Reis 2015/01/07 23:58:41 This line looks unnecessary. If render_frame_host
kenrb 2015/01/14 18:13:56 Done.
return NULL;
- return render_frame_host_->render_view_host()->GetView();
+ return render_frame_host_->GetView();
}
RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() {
@@ -212,8 +213,8 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
// our primary one. Otherwise, we might crash if we try to call Show()
// on it later.
if (dest_render_frame_host != render_frame_host_ &&
- dest_render_frame_host->render_view_host()->GetView()) {
- dest_render_frame_host->render_view_host()->GetView()->Hide();
+ dest_render_frame_host->GetView()) {
+ dest_render_frame_host->GetView()->Hide();
} else {
// Notify here as we won't be calling CommitPending (which does the
// notify).
@@ -1051,8 +1052,8 @@ void RenderFrameHostManager::CreatePendingRenderFrameHost(
if (delegate_->IsHidden())
create_render_frame_flags |= CREATE_RF_HIDDEN;
- int opener_route_id =
- CreateOpenerRenderViewsIfNeeded(old_instance, new_instance);
+ int opener_route_id = CreateOpenerRenderViewsIfNeeded(
+ old_instance, new_instance, &create_render_frame_flags);
if (pending_render_frame_host_)
CancelPending();
@@ -1065,7 +1066,8 @@ void RenderFrameHostManager::CreatePendingRenderFrameHost(
int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded(
SiteInstance* old_instance,
- SiteInstance* new_instance) {
+ SiteInstance* new_instance,
+ int* create_render_frame_flags) {
int opener_route_id = MSG_ROUTING_NONE;
if (new_instance->IsRelatedSiteInstance(old_instance)) {
opener_route_id =
@@ -1076,6 +1078,15 @@ int RenderFrameHostManager::CreateOpenerRenderViewsIfNeeded(
// SiteInstance in all nodes except the current one.
frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance(
frame_tree_node_, new_instance);
+ // RenderFrames in different processes from their parent RenderFrames
+ // in the frame tree require RenderWidgets for rendering and processing
+ // input events.
+ if (frame_tree_node_->parent() &&
+ frame_tree_node_->parent()
Charlie Reis 2015/01/07 23:58:41 Unfortunate that we can't use RFHI::IsCrossProcess
kenrb 2015/01/14 18:13:56 Done.
+ ->render_manager()
+ ->current_frame_host()
+ ->GetSiteInstance() != new_instance)
+ *create_render_frame_flags |= CREATE_RF_NEEDS_RENDER_WIDGET_HOST;
}
}
return opener_route_id;
@@ -1105,10 +1116,10 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost(
}
// TODO(creis): Pass hidden to RFH.
- scoped_ptr<RenderFrameHostImpl> render_frame_host =
- make_scoped_ptr(RenderFrameHostFactory::Create(
- render_view_host, render_frame_delegate_, frame_tree,
- frame_tree_node_, frame_routing_id, flags).release());
+ scoped_ptr<RenderFrameHostImpl> render_frame_host = make_scoped_ptr(
+ RenderFrameHostFactory::Create(
+ render_view_host, render_frame_delegate_, render_widget_delegate_,
+ frame_tree, frame_tree_node_, frame_routing_id, flags).release());
return render_frame_host.Pass();
}
@@ -1193,7 +1204,11 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
if (success) {
if (frame_tree_node_->IsMainFrame()) {
// Don't show the main frame's view until we get a DidNavigate from it.
- render_view_host->GetView()->Hide();
+ // Only top-level RenderViewHosts have RenderWidgetHostViews;
Charlie Reis 2015/01/07 23:58:41 nit: Only the RenderViewHost for the top-level Ren
kenrb 2015/01/14 18:13:56 Done.
+ // RenderWidgetHosts for out-of-process iframes will be created
+ // later and hidden.
+ if (render_view_host->GetView())
+ render_view_host->GetView()->Hide();
} else if (!swapped_out) {
// Init the RFH, so a RenderFrame is created in the renderer.
DCHECK(new_render_frame_host.get());
@@ -1344,8 +1359,8 @@ void RenderFrameHostManager::CommitPending() {
// Remember if the page was focused so we can focus the new renderer in
// that case.
bool focus_render_view = !will_focus_location_bar &&
- render_frame_host_->render_view_host()->GetView() &&
- render_frame_host_->render_view_host()->GetView()->HasFocus();
+ render_frame_host_->GetView() &&
+ render_frame_host_->GetView()->HasFocus();
bool is_main_frame = frame_tree_node_->IsMainFrame();
@@ -1360,10 +1375,10 @@ void RenderFrameHostManager::CommitPending() {
render_frame_host_->GetProcess()->RemovePendingView();
// Show the new view (or a sad tab) if necessary.
- bool new_rfh_has_view = !!render_frame_host_->render_view_host()->GetView();
+ bool new_rfh_has_view = !!render_frame_host_->GetView();
if (!delegate_->IsHidden() && new_rfh_has_view) {
// In most cases, we need to show the new view.
- render_frame_host_->render_view_host()->GetView()->Show();
+ render_frame_host_->GetView()->Show();
}
if (!new_rfh_has_view) {
// If the view is gone, then this RenderViewHost died while it was hidden.
@@ -1386,9 +1401,8 @@ void RenderFrameHostManager::CommitPending() {
if (will_focus_location_bar) {
delegate_->SetFocusToLocationBar(false);
- } else if (focus_render_view &&
- render_frame_host_->render_view_host()->GetView()) {
- render_frame_host_->render_view_host()->GetView()->Focus();
+ } else if (focus_render_view && render_frame_host_->GetView()) {
+ render_frame_host_->GetView()->Focus();
}
// Notify that we've swapped RenderFrameHosts. We do this before shutting down
@@ -1414,8 +1428,7 @@ void RenderFrameHostManager::CommitPending() {
// the proxy we're looking for.
RenderFrameProxyHost* proxy_to_parent = GetProxyToParent();
if (proxy_to_parent) {
- proxy_to_parent->SetChildRWHView(
- render_frame_host_->render_view_host()->GetView());
+ proxy_to_parent->SetChildRWHView(render_frame_host_->GetView());
}
// Since the new RenderFrameHost is now committed, there must be no proxies

Powered by Google App Engine
This is Rietveld 408576698