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

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: Created 6 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 6fcb94122deb087aa949dec2e8299f08e17b58d1..a410d2a8108cd0c0bf0998870d9fbd07b3a36b04 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -1026,6 +1026,7 @@ void RenderFrameHostManager::CreateRenderFrameHostForNewSiteInstance(
SiteInstance* old_instance,
SiteInstance* new_instance,
bool is_main_frame) {
+ int create_render_frame_flags = is_main_frame ? FOR_MAIN_FRAME_NAVIGATION : 0;
// Ensure that we have created RFHs for the new RFH's opener chain if
// we are staying in the same BrowsingInstance. This allows the new RFH
// to send cross-process script calls to its opener(s).
@@ -1039,13 +1040,21 @@ void RenderFrameHostManager::CreateRenderFrameHostForNewSiteInstance(
// 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
nasko 2014/10/01 16:37:14 nit: s/different processes/different SiteInstance/
Charlie Reis 2014/10/01 17:01:08 nit: s/RenderFrames/RenderFrame(Host)s/
kenrb 2014/10/01 19:27:51 Changed RenderWidget(Host)s to just RenderWidgets.
kenrb 2014/10/01 19:27:51 Might processes be better? We use SiteInstance rig
Charlie Reis 2014/10/02 00:06:57 I think we do want to say SiteInstance here. If t
kenrb 2014/10/02 20:20:47 I'm not sure I agree. If a non-protected SiteInsta
Charlie Reis 2014/10/08 21:21:13 I'm skeptical about that. It doesn't make sense t
+ // in the frame tree require RenderWidget(Host)s for rendering
+ // and processing input events.
+ if (frame_tree_node_->parent() &&
+ frame_tree_node_->parent()->render_manager()->
+ current_frame_host()->GetSiteInstance() == new_instance)
nasko 2014/10/01 16:37:14 Shouldn't this be "!=" instead of "=="?
kenrb 2014/10/01 19:27:51 Yes! That explains a lot about some of the problem
+ create_render_frame_flags |= CREATE_RENDER_WIDGET_HOST;
}
}
+ create_render_frame_flags |= delegate_->IsHidden() ? HIDDEN : 0;
+
// Create a non-swapped-out RFH with the given opener.
int route_id = CreateRenderFrame(
- new_instance, opener_route_id, false, is_main_frame,
- delegate_->IsHidden());
+ new_instance, opener_route_id, create_render_frame_flags);
if (route_id == MSG_ROUTING_NONE) {
pending_render_frame_host_.reset();
return;
@@ -1086,11 +1095,11 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost(
int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
int opener_route_id,
- bool swapped_out,
- bool for_main_frame_navigation,
- bool hidden) {
+ int flags) {
+ bool swapped_out = flags & SWAPPED_OUT;
CHECK(instance);
- DCHECK(!swapped_out || hidden); // Swapped out views should always be hidden.
+ // Swapped out views should always be hidden.
+ DCHECK(!swapped_out || (flags & HIDDEN));
// TODO(nasko): Remove the following CHECK once cross-site navigation no
// longer relies on swapped out RFH for the top-level frame.
@@ -1138,8 +1147,11 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
}
} else {
// Create a new RenderFrameHost if we don't find an existing one.
- new_render_frame_host = CreateRenderFrameHost(
- instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, swapped_out, hidden);
+ new_render_frame_host = CreateRenderFrameHost(instance,
+ MSG_ROUTING_NONE,
+ MSG_ROUTING_NONE,
+ swapped_out,
+ flags & HIDDEN);
RenderViewHostImpl* render_view_host =
new_render_frame_host->render_view_host();
int proxy_routing_id = MSG_ROUTING_NONE;
@@ -1160,7 +1172,7 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
bool success = InitRenderView(render_view_host,
opener_route_id,
proxy_routing_id,
- for_main_frame_navigation);
+ flags & FOR_MAIN_FRAME_NAVIGATION);
if (success) {
if (frame_tree_node_->IsMainFrame()) {
// Don't show the main frame's view until we get a DidNavigate from it.
@@ -1180,6 +1192,10 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
frame_to_announce = new_render_frame_host.get();
}
+ if (flags & CREATE_RENDER_WIDGET_HOST)
+ new_render_frame_host->CreateRenderWidgetHost(render_widget_delegate_,
nasko 2014/10/01 16:37:14 Is there ever a case where we need to create a Ren
Charlie Reis 2014/10/01 17:01:08 +1. We do something similar for creating the Rend
kenrb 2014/10/01 19:27:51 I had thought of this, but the comment in line 112
Charlie Reis 2014/10/02 00:06:57 That's only for main frames, which store their RFH
kenrb 2014/10/02 20:20:48 Probably not. This is good to know, I have made th
+ flags & HIDDEN);
+
// Use this as our new pending RFH if it isn't swapped out.
if (!swapped_out)
pending_render_frame_host_ = new_render_frame_host.Pass();

Powered by Google App Engine
This is Rietveld 408576698