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

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: Make <webview> work without --site-per-process as well Created 5 years, 8 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 e4edb08d8a10983399804b2bee6927e59c434658..29a899cdb4077447e5cd75ba391d517d7ca773e5 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -160,6 +160,17 @@ 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 NULL;
Charlie Reis 2015/04/30 23:06:46 nullptr
lazyboy 2015/05/05 07:28:13 Done.
+
+ return GetRenderFrameProxyHost(
+ embedder_frame_tree_node->current_frame_host()->GetSiteInstance());
+}
+
void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) {
pending_web_ui_ = CreateWebUI(url, bindings);
pending_and_current_web_ui_.reset();
@@ -460,6 +471,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();
Charlie Reis 2015/04/30 23:06:46 This is not the right place to call Show. Please
lazyboy 2015/05/05 07:28:13 There's no CommitPending() pending call as swappin
+ }
+
if (!pending_render_frame_host_ && !speculative_render_frame_host_) {
DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_);
@@ -1591,6 +1610,43 @@ void RenderFrameHostManager::EnsureRenderViewInitialized(
source->IsMainFrame());
}
+void RenderFrameHostManager::CreateEmbedderProxy(
+ SiteInstance* embedder_site_instance,
+ int* swapped_out_render_view_routing_id,
+ int* proxy_routing_id) {
+ DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kSitePerProcess));
+ int embedder_proxy_flags =
+ CREATE_RF_HIDDEN |
+ CREATE_RF_SWAPPED_OUT |
+ CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // TODO(lazyboy): Do we need this?
Charlie Reis 2015/04/30 23:06:46 This affects |for_main_frame_navigation| in WebCon
lazyboy 2015/05/05 07:28:13 Keeping FOR_MAIN_FRAME_NAVIGATION. (there's also a
+ scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder =
Charlie Reis 2015/04/30 23:06:45 swapped_out_embedder_rfh
lazyboy 2015/05/05 07:28:13 Done.
+ 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);
+ *proxy_routing_id = rfph_in_embedder->GetRoutingID();
+}
+
+void RenderFrameHostManager::ReplaceWithGuestProxy(
+ int proxy_to_embedder_routing_id) {
+ current_frame_host()->Send(
+ new FrameMsg_ReplaceLocalFrameWithProxy(
Charlie Reis 2015/04/30 23:06:45 (I'm wondering if we should find a way to unify th
lazyboy 2015/05/05 07:28:13 Done as I got rid of the new IPC, using SwapOut IP
+ current_frame_host()->GetRoutingID(),
+ proxy_to_embedder_routing_id));
+}
+
+void RenderFrameHostManager::UpdateGuestRWHView(
+ 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