Chromium Code Reviews| 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); |
| } |