| Index: content/browser/frame_host/render_frame_host_impl.cc
|
| diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
|
| index e71c219091b1ee53ef930b4c34033ecd2f4ba380..e6edd68f44d83b51bd80db3a339ec0cfd26ccafa 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -119,6 +119,7 @@ RenderFrameHostImpl* RenderFrameHostImpl::FromID(int process_id,
|
|
|
| RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
|
| RenderFrameHostDelegate* delegate,
|
| + RenderWidgetHostDelegate* rwh_delegate,
|
| FrameTree* frame_tree,
|
| FrameTreeNode* frame_tree_node,
|
| int routing_id,
|
| @@ -139,6 +140,7 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
|
| no_create_browser_accessibility_manager_for_testing_(false),
|
| weak_ptr_factory_(this) {
|
| bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT);
|
| + bool hidden = !!(flags & CREATE_RF_HIDDEN);
|
| frame_tree_->RegisterRenderFrameHost(this);
|
| GetProcess()->AddRoute(routing_id_, this);
|
| g_routing_id_frame_map.Get().insert(std::make_pair(
|
| @@ -155,6 +157,15 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
|
| SetUpMojoIfNeeded();
|
| swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind(
|
| &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr())));
|
| +
|
| + if (flags & CREATE_RF_NEEDS_RENDER_WIDGET_HOST) {
|
| + render_widget_host_.reset(
|
| + new RenderWidgetHostImpl(rwh_delegate,
|
| + GetProcess(),
|
| + MSG_ROUTING_NONE,
|
| + hidden));
|
| + render_widget_host_->InitForFrame();
|
| + }
|
| }
|
|
|
| RenderFrameHostImpl::~RenderFrameHostImpl() {
|
| @@ -509,7 +520,31 @@ bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id,
|
|
|
| DCHECK(GetProcess()->HasConnection());
|
|
|
| - Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id));
|
| + FrameMsg_NewFrame_WidgetParams widget_params;
|
| + if (render_widget_host_) {
|
| + widget_params.routing_id = render_widget_host_->GetRoutingID();
|
| + widget_params.surface_id = render_widget_host_->surface_id();
|
| + widget_params.hidden = render_widget_host_->is_hidden();
|
| + } else {
|
| + // MSG_ROUTING_NONE will prevent a new RenderWidget from being created in
|
| + // the renderer process.
|
| + widget_params.routing_id = MSG_ROUTING_NONE;
|
| + widget_params.surface_id = 0;
|
| + widget_params.hidden = true;
|
| + }
|
| +
|
| + Send(new FrameMsg_NewFrame(routing_id_,
|
| + parent_routing_id,
|
| + proxy_routing_id,
|
| + widget_params));
|
| +
|
| + // The lifetime of the view gets tied to the lifetime of the
|
| + // current render process for this RenderFrameHost.
|
| + if (render_widget_host_) {
|
| + RenderWidgetHostView* rwhv = new RenderWidgetHostViewChildFrame(
|
| + render_widget_host_.get());
|
| + rwhv->Hide();
|
| + }
|
|
|
| // The renderer now has a RenderFrame for this RenderFrameHost. Note that
|
| // this path is only used for out-of-process iframes. Main frame RenderFrames
|
| @@ -729,9 +764,26 @@ void RenderFrameHostImpl::OnDidDropNavigation() {
|
| }
|
|
|
| RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
|
| + if (render_widget_host_)
|
| + return render_widget_host_.get();
|
| +
|
| + // TODO(kenrb): When RenderViewHost no longer inherits RenderWidgetHost,
|
| + // we can remove this fallback. Currently it is only used for the main
|
| + // frame.
|
| return static_cast<RenderWidgetHostImpl*>(render_view_host_);
|
| }
|
|
|
| +RenderWidgetHostView* RenderFrameHostImpl::GetView() {
|
| + RenderFrameHostImpl* frame = this;
|
| + while (frame) {
|
| + if (frame->render_widget_host_)
|
| + return frame->render_widget_host_->GetView();
|
| + frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
|
| + }
|
| +
|
| + return render_view_host_->GetView();
|
| +}
|
| +
|
| int RenderFrameHostImpl::GetEnabledBindings() {
|
| return render_view_host_->GetEnabledBindings();
|
| }
|
|
|