| 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 43be1e9382c12832304e21b2ff4e4dd38b18cfb0..4c8cdeefb26a579d720b870f0deebf827fd7f74a 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -214,9 +214,19 @@ RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
|
| &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr())));
|
|
|
| if (widget_routing_id != MSG_ROUTING_NONE) {
|
| - render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(),
|
| - widget_routing_id, hidden);
|
| - render_widget_host_->set_owned_by_render_frame_host(true);
|
| + // TODO(avi): Once RenderViewHostImpl has-a RenderWidgetHostImpl, the main
|
| + // render frame should probably start owning the RenderWidgetHostImpl,
|
| + // so this logic checking for an already existing RWHI should be removed.
|
| + // https://crbug.com/545684
|
| + render_widget_host_ =
|
| + RenderWidgetHostImpl::FromID(GetProcess()->GetID(), widget_routing_id);
|
| + if (!render_widget_host_) {
|
| + render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(),
|
| + widget_routing_id, hidden);
|
| + render_widget_host_->set_owned_by_render_frame_host(true);
|
| + } else {
|
| + DCHECK(!render_widget_host_->owned_by_render_frame_host());
|
| + }
|
| }
|
| }
|
|
|
| @@ -233,10 +243,6 @@ RenderFrameHostImpl::~RenderFrameHostImpl() {
|
| if (IsRFHStateActive(rfh_state_))
|
| GetSiteInstance()->decrement_active_frame_count();
|
|
|
| - // Notify the FrameTree that this RFH is going away, allowing it to shut down
|
| - // the corresponding RenderViewHost if it is no longer needed.
|
| - frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
|
| -
|
| // NULL out the swapout timer; in crash dumps this member will be null only if
|
| // the dtor has run.
|
| swapout_event_monitor_timeout_.reset();
|
| @@ -245,10 +251,15 @@ RenderFrameHostImpl::~RenderFrameHostImpl() {
|
| iter.second.Run(false);
|
| }
|
|
|
| - if (render_widget_host_) {
|
| + if (render_widget_host_ &&
|
| + render_widget_host_->owned_by_render_frame_host()) {
|
| // Shutdown causes the RenderWidgetHost to delete itself.
|
| render_widget_host_->Shutdown();
|
| }
|
| +
|
| + // Notify the FrameTree that this RFH is going away, allowing it to shut down
|
| + // the corresponding RenderViewHost if it is no longer needed.
|
| + frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
|
| }
|
|
|
| int RenderFrameHostImpl::GetRoutingID() {
|
| @@ -954,15 +965,7 @@ void RenderFrameHostImpl::OnDidDropNavigation() {
|
| }
|
|
|
| RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
|
| - if (render_widget_host_)
|
| - return render_widget_host_;
|
| -
|
| - // TODO(kenrb): Remove this fallback and have the top-level frame have a
|
| - // widget host just like all the other frames.
|
| - if (!GetParent())
|
| - return render_view_host_->GetWidget();
|
| -
|
| - return nullptr;
|
| + return render_widget_host_;
|
| }
|
|
|
| RenderWidgetHostView* RenderFrameHostImpl::GetView() {
|
| @@ -973,7 +976,8 @@ RenderWidgetHostView* RenderFrameHostImpl::GetView() {
|
| frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
|
| }
|
|
|
| - return render_view_host_->GetWidget()->GetView();
|
| + NOTREACHED();
|
| + return nullptr;
|
| }
|
|
|
| int RenderFrameHostImpl::GetEnabledBindings() {
|
|
|