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

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: Revert unused changes from previous attempt + more cleanup. Created 5 years, 10 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 0cd3b53b3c42c4eed16da2eba5360ecbc65d8a34..b28716a7d1808351efdd68fff90c3de92ecf7636 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -61,6 +61,7 @@ RenderFrameHostManager::RenderFrameHostManager(
render_frame_delegate_(render_frame_delegate),
render_view_delegate_(render_view_delegate),
render_widget_delegate_(render_widget_delegate),
+ pseudo_parent_frame_tree_node_id_(-1),
interstitial_page_(nullptr),
should_reuse_web_ui_(false),
weak_factory_(this) {
@@ -149,6 +150,20 @@ RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() {
return iter->second;
}
+RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() {
+ FrameTreeNode* embedder_frame_tree_node =
+ FrameTree::GloballyFindByID(pseudo_parent_frame_tree_node_id_);
+ if (!embedder_frame_tree_node)
+ return NULL;
+ RenderFrameProxyHostMap::iterator iter =
+ proxy_hosts_.find(embedder_frame_tree_node->render_manager()
+ ->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();
@@ -429,6 +444,16 @@ void RenderFrameHostManager::ClearNavigationTransitionData() {
void RenderFrameHostManager::DidNavigateFrame(
RenderFrameHostImpl* render_frame_host,
bool was_caused_by_user_gesture) {
+ if (render_frame_host->GetSiteInstance()->GetSiteURL().SchemeIs(
Fady Samuel 2015/03/04 22:21:06 This doesn't work for other guest types such as <a
Charlie Reis 2015/03/10 04:09:44 Is RenderProcessHostImpl::IsIsolatedGuest() still
lazyboy 2015/04/01 21:47:57 I'm using GetProxyToEmbedder() instead, if we have
+ "chrome-guest")) {
+ RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder();
+ DCHECK(proxy_to_embedder);
+ proxy_to_embedder->SetChildRWHView(current_host()->GetView());
Charlie Reis 2015/03/10 04:09:44 This doesn't seem like the right place for these c
lazyboy 2015/04/01 21:47:57 Technically we don't have pending and don't commit
+ proxy_to_embedder->SetOverriddenParentFTNID(
+ pseudo_parent_frame_tree_node_id_);
+ current_host()->GetView()->Show();
Fady Samuel 2015/03/04 22:21:06 This breaks visibility I think.
lazyboy 2015/04/01 21:47:57 Added TODO to investigate.
+ }
+
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableBrowserSideNavigation)) {
if (render_frame_host == speculative_render_frame_host_.get()) {

Powered by Google App Engine
This is Rietveld 408576698