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

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 1303773002: Give the main frame a RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge conflicts Created 5 years, 2 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/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 7868121fa12c7eee2e6fd28858d2fe9caec3c914..06a15f8a1ac0929f4dfc7b34f907215a22e32675 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -214,9 +214,20 @@ 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_) {
+ DCHECK(frame_tree_node->parent());
+ 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 +244,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 +252,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() {
@@ -652,7 +664,10 @@ bool RenderFrameHostImpl::CreateRenderFrame(int proxy_routing_id,
// The RenderWidgetHost takes ownership of its view. It is tied to the
// lifetime of the current RenderProcessHost for this RenderFrameHost.
- if (render_widget_host_) {
+ // TODO(avi): This will need to change to initialize a
+ // RenderWidgetHostViewAura for the main frame once RenderViewHostImpl has-a
Avi (use Gerrit) 2015/10/27 03:08:29 Wait... Can you explain why a cross-platform bunch
dcheng 2015/10/27 03:34:05 I don't know exactly how this will work in the fut
Avi (use Gerrit) 2015/10/27 03:41:31 Granted that the child views each have a RenderWid
dcheng 2015/10/27 04:30:44 Yeah, I just wasn't sure what to call this, so I e
+ // RenderWidgetHostImpl. https://crbug.com/545684
+ if (parent_routing_id != MSG_ROUTING_NONE && render_widget_host_) {
RenderWidgetHostView* rwhv =
new RenderWidgetHostViewChildFrame(render_widget_host_);
rwhv->Hide();
@@ -954,15 +969,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 +980,8 @@ RenderWidgetHostView* RenderFrameHostImpl::GetView() {
frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
}
- return render_view_host_->GetWidget()->GetView();
+ NOTREACHED();
+ return nullptr;
}
int RenderFrameHostImpl::GetEnabledBindings() {
« no previous file with comments | « content/browser/frame_host/interstitial_page_impl.cc ('k') | content/browser/frame_host/render_frame_host_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698