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

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: some review comments addressed Created 5 years, 9 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 29771b2ab65da73c748a60643a0634acce2ec5a2..4375605349c719057c895fb895e1a270de2333da 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -161,6 +161,21 @@ RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() {
return iter->second;
}
+RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() {
+ int64 embedder_frame_tree_node_id = delegate_->GetParentFrameTreeNodeID();
+ FrameTreeNode* embedder_frame_tree_node =
+ FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id);
+ if (!embedder_frame_tree_node)
+ return NULL;
+ RenderFrameProxyHostMap::iterator iter =
Charlie Reis 2015/04/08 23:42:11 Just use RenderFrameHostManager::GetRenderFramePro
lazyboy 2015/04/14 01:38:03 Done.
+ proxy_hosts_.find(embedder_frame_tree_node->render_manager()
Charlie Reis 2015/04/08 23:42:10 Use FrameTreeNode::current_frame_host(), skipping
lazyboy 2015/04/14 01:38:03 Done.
+ ->current_frame_host()->GetSiteInstance()
+ ->GetId());
+ if (iter == proxy_hosts_.end())
+ return NULL;
+ return iter->second;
+}
+
void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) {
pending_web_ui_ = CreateWebUI(url, bindings);
pending_and_current_web_ui_.reset();
@@ -455,6 +470,15 @@ 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"));
+ proxy_to_embedder->SetChildRWHView(current_host()->GetView());
Charlie Reis 2015/04/08 23:42:10 Do you have to do this for every commit in the gue
lazyboy 2015/04/14 01:38:03 No, only the first time. I've moved this to WebCon
+ // TODO(lazyboy): This probably breaks guest visibility.
+ current_host()->GetView()->Show();
+ }
+
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableBrowserSideNavigation)) {
if (render_frame_host == speculative_render_frame_host_.get()) {
@@ -1527,6 +1551,35 @@ void RenderFrameHostManager::EnsureRenderViewInitialized(
source->IsMainFrame());
}
+int RenderFrameHostManager::CreateEmbedderProxy(
+ SiteInstance* embedder_site_instance,
+ int* swapped_out_render_view_routing_id) {
+ int embedder_proxy_flags =
+ CREATE_RF_HIDDEN |
+ CREATE_RF_SWAPPED_OUT |
+ CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // TODO(lazyboy): Do we need this?
+ scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder =
+ 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);
+ return rfph_in_embedder->GetRoutingID();
+}
+
+void RenderFrameHostManager::ReplaceWithGuestProxy(
+ int proxy_to_embedder_routing_id) {
+ current_frame_host()->Send(
+ new FrameMsg_ReplaceLocalFrameWithProxy(
+ current_frame_host()->GetRoutingID(),
+ proxy_to_embedder_routing_id));
+}
+
bool RenderFrameHostManager::InitRenderView(
RenderViewHostImpl* render_view_host,
int opener_route_id,

Powered by Google App Engine
This is Rietveld 408576698