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

Unified Diff: content/browser/web_contents/web_contents_impl.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/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 3c46724086182f256112f0cb2c3841faf15eb3fa..e78bf612349dc4eaa96ad48c1bc346b5cb40188a 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -6,6 +6,7 @@
#include <utility>
+#include "content/browser/frame_host/render_frame_proxy_host.h"
Charlie Reis 2015/03/10 04:09:44 Not allowed by DEPS. web_contents/ can't depend o
lazyboy 2015/04/01 21:47:57 Not required anymore since I moved codes requiring
#include "base/command_line.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
@@ -897,6 +898,7 @@ SiteInstanceImpl* WebContentsImpl::GetSiteInstance() const {
}
SiteInstanceImpl* WebContentsImpl::GetPendingSiteInstance() const {
+ CHECK(!browser_plugin_guest_);
Charlie Reis 2015/03/10 04:09:44 This doesn't belong in an accessor for the SiteIns
lazyboy 2015/04/01 21:47:57 Removed.
RenderViewHostImpl* dest_rvh =
GetRenderManager()->pending_render_view_host() ?
GetRenderManager()->pending_render_view_host() :
@@ -1217,20 +1219,20 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
WebContentsViewDelegate* delegate =
GetContentClient()->browser()->GetWebContentsViewDelegate(this);
- if (browser_plugin_guest_) {
- scoped_ptr<WebContentsView> platform_view(CreateWebContentsView(
- this, delegate, &render_view_host_delegate_view_));
-
- WebContentsViewGuest* rv = new WebContentsViewGuest(
- this, browser_plugin_guest_.get(), platform_view.Pass(),
- render_view_host_delegate_view_);
- render_view_host_delegate_view_ = rv;
- view_.reset(rv);
- } else {
+// if (browser_plugin_guest_) {
+// scoped_ptr<WebContentsView> platform_view(CreateWebContentsView(
+// this, delegate, &render_view_host_delegate_view_));
+//
+// WebContentsViewGuest* rv = new WebContentsViewGuest(
+// this, browser_plugin_guest_.get(), platform_view.Pass(),
+// render_view_host_delegate_view_);
+// render_view_host_delegate_view_ = rv;
+// view_.reset(rv);
+// } else {
// Regular WebContentsView.
view_.reset(CreateWebContentsView(
this, delegate, &render_view_host_delegate_view_));
- }
+// }
CHECK(render_view_host_delegate_view_);
CHECK(view_.get());
@@ -1268,6 +1270,58 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
g_created_callbacks.Get().at(i).Run(this);
}
+int WebContentsImpl::AttachLocalFrameToGuest(WebContents* owner_web_contents,
Charlie Reis 2015/03/10 04:09:44 It looks like most of the operations in here proba
lazyboy 2015/04/01 21:47:57 Moved bulk of these to RFHM.
+ int embedder_local_render_frame_id,
+ int guest_instance_id) {
+ SiteInstance* embedder_si = owner_web_contents->GetSiteInstance();
+ FrameTreeNode* guest_ftn = GetFrameTree()->root();
+
+ RenderFrameHostImpl* embedder_local_frame =
+ RenderFrameHostImpl::FromID(
+ owner_web_contents->GetRenderProcessHost()->GetID(),
+ embedder_local_render_frame_id);
Charlie Reis 2015/03/10 04:09:44 embedder_frame_routing_id?
lazyboy 2015/04/01 21:47:58 Done.
+ DCHECK(embedder_local_frame);
+ FrameTreeNode* embedder_ftn =
+ embedder_local_frame->frame_tree_node();
+
+ FrameTreeNode* embedder_ftn_parent = embedder_ftn->parent();
+ DCHECK(embedder_ftn_parent);
+
+ // TODO: Explain this.
+ guest_ftn->render_manager()->set_pseudo_parent_frame_tree_node_id(
+ embedder_ftn_parent->frame_tree_node_id());
+
+ // Create proxy stuff in Embedder process.
+ int embedder_proxy_flags =
+ CREATE_RF_HIDDEN |
+ CREATE_RF_SWAPPED_OUT |
+ CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // ???.
+ int rv_of_embedder_id;
Charlie Reis 2015/03/10 04:09:44 Let's start moving to names that might use in prac
lazyboy 2015/04/01 21:47:57 OK, I've made some changes.
+ scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder =
+ guest_ftn->render_manager()->CreateRenderFrame(
+ embedder_si,
+ nullptr,
+ MSG_ROUTING_NONE, // opener_route_id
+ embedder_proxy_flags,
+ &rv_of_embedder_id);
+
+ RenderFrameProxyHost* rfph_in_embedder =
+ guest_ftn->render_manager()->GetRenderFrameProxyHost(
+ embedder_si);
+ DCHECK(rfph_in_embedder);
+ int rfph_in_embedder_routing_id = rfph_in_embedder->GetRoutingID();
+
+ // Send a content message to complete the frame swap.
+ embedder_ftn_parent->current_frame_host()->Send(
+ new FrameMsg_ReplaceLocalFrameWithProxy(
+ embedder_ftn->current_frame_host()->GetRoutingID(),
+ rfph_in_embedder_routing_id));
+
+ // The swapped out render view routing ID will be used to send
+ // postMessage.
+ return rv_of_embedder_id;
+}
+
void WebContentsImpl::OnWebContentsDestroyed(WebContentsImpl* web_contents) {
RemoveDestructionObserver(web_contents);
@@ -1509,6 +1563,7 @@ void WebContentsImpl::CreateNewWindow(
int main_frame_route_id,
const ViewHostMsg_CreateWindow_Params& params,
SessionStorageNamespace* session_storage_namespace) {
+ DCHECK(0);
// We usually create the new window in the same BrowsingInstance (group of
// script-related windows), by passing in the current SiteInstance. However,
// if the opener is being suppressed (in a non-guest), we create a new
@@ -1729,12 +1784,12 @@ void WebContentsImpl::ShowCreatedWidget(int route_id,
return;
RenderWidgetHostView* view = NULL;
- BrowserPluginGuest* guest = GetBrowserPluginGuest();
- if (guest && guest->embedder_web_contents()) {
- view = guest->embedder_web_contents()->GetRenderWidgetHostView();
- } else {
+// BrowserPluginGuest* guest = GetBrowserPluginGuest();
+// if (guest && guest->embedder_web_contents()) {
+// view = guest->embedder_web_contents()->GetRenderWidgetHostView();
+// } else {
view = GetRenderWidgetHostView();
- }
+// }
if (is_fullscreen) {
DCHECK_EQ(MSG_ROUTING_NONE, fullscreen_widget_routing_id_);
@@ -4257,7 +4312,8 @@ bool WebContentsImpl::CreateRenderViewForRenderManager(
// until RenderWidgetHost is attached to RenderFrameHost. We need to special
// case this because RWH is still a base class of RenderViewHost, and child
// frame RWHVs are unique in that they do not have their own WebContents.
- if (!for_main_frame_navigation) {
+ bool is_guest = GetSiteInstance()->GetSiteURL().SchemeIs("chrome-guest");
Fady Samuel 2015/03/04 22:21:06 Guests are guests if they have a BrowserPluginGues
lazyboy 2015/04/01 21:47:57 Changed to looking at browser_plugin_guest_ for no
+ if (!for_main_frame_navigation || is_guest) {
RenderWidgetHostViewChildFrame* rwh_view_child =
new RenderWidgetHostViewChildFrame(render_view_host);
rwh_view = rwh_view_child;
@@ -4413,6 +4469,7 @@ BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() const {
void WebContentsImpl::SetBrowserPluginGuest(BrowserPluginGuest* guest) {
CHECK(!browser_plugin_guest_);
+ CHECK(guest);
browser_plugin_guest_.reset(guest);
}

Powered by Google App Engine
This is Rietveld 408576698