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

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

Issue 972313002: Make <webview> use out-of-process iframe architecture. (Closed) Base URL: ssh://saopaulo.wat/mnt/dev/shared/src@testoopif2z-better-chrome
Patch Set: not using NPAPI bindings anymore, yay! Created 5 years, 7 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 c9eadcd6b1c225509c0589d4de42abc983e7aeb9..200b0710f52079cd32776933b6c35b8b7a945ebc 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -160,6 +160,22 @@ RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() {
return iter->second;
}
+RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() {
+ int64 embedder_frame_tree_node_id = delegate_->GetEmbedderFrameTreeNodeID();
+ FrameTreeNode* embedder_frame_tree_node =
+ FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id);
+ if (!embedder_frame_tree_node)
+ return nullptr;
+
+ return GetRenderFrameProxyHost(
+ embedder_frame_tree_node->current_frame_host()->GetSiteInstance());
+}
+
+bool RenderFrameHostManager::IsGuest() {
+ return frame_tree_node_->IsMainFrame() &&
+ delegate_->GetEmbedderFrameTreeNodeID() != -1;
+}
+
void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) {
pending_web_ui_ = CreateWebUI(url, bindings);
pending_and_current_web_ui_.reset();
@@ -460,6 +476,14 @@ void RenderFrameHostManager::DidNavigateFrame(
void RenderFrameHostManager::CommitPendingIfNecessary(
RenderFrameHostImpl* render_frame_host,
bool was_caused_by_user_gesture) {
+ RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder();
+ if (proxy_to_embedder) {
+ DCHECK(render_frame_host->GetSiteInstance()->GetSiteURL().SchemeIs(
+ "chrome-guest"));
+ // TODO(lazyboy): This probably breaks guest visibility.
+ current_host()->GetView()->Show();
+ }
+
if (!pending_render_frame_host_ && !speculative_render_frame_host_) {
DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_);
@@ -1602,6 +1626,35 @@ void RenderFrameHostManager::EnsureRenderViewInitialized(
source->IsMainFrame());
}
+int RenderFrameHostManager::CreateEmbedderProxy(
+ SiteInstance* embedder_site_instance) {
+ DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
nasko 2015/05/05 21:34:49 nit: CHECK is fine too : )
lazyboy 2015/05/05 22:33:53 Done.
+ switches::kSitePerProcess));
+ int embedder_proxy_flags = CREATE_RF_HIDDEN | CREATE_RF_SWAPPED_OUT |
+ CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
+ int swapped_out_render_view_routing_id; // Unused.
+ scoped_ptr<RenderFrameHostImpl> swapped_out_embedder_rfh = CreateRenderFrame(
+ embedder_site_instance, nullptr,
+ MSG_ROUTING_NONE, // opener_route_id
+ embedder_proxy_flags, &swapped_out_render_view_routing_id);
+
+ RenderFrameProxyHost* rfph_in_embedder =
+ GetRenderFrameProxyHost(embedder_site_instance);
+ DCHECK(rfph_in_embedder);
nasko 2015/05/05 21:34:49 nit: CHECK
lazyboy 2015/05/05 22:33:53 Done.
+ return rfph_in_embedder->GetRoutingID();
+}
+
+void RenderFrameHostManager::ReplaceWithGuestProxy(
+ int proxy_to_embedder_routing_id) {
+ current_frame_host()->Send(new FrameMsg_SwapOut(
+ current_frame_host()->GetRoutingID(), proxy_to_embedder_routing_id,
+ false /* is_loading */, content::FrameReplicationState()));
+}
+
+void RenderFrameHostManager::SetGuestRWHView(RenderWidgetHostView* child_rwhv) {
+ GetProxyToEmbedder()->SetChildRWHView(child_rwhv);
+}
+
bool RenderFrameHostManager::InitRenderView(
RenderViewHostImpl* render_view_host,
int opener_route_id,

Powered by Google App Engine
This is Rietveld 408576698