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); |
} |