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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } else { 207 } else {
208 rfh_state_ = STATE_DEFAULT; 208 rfh_state_ = STATE_DEFAULT;
209 GetSiteInstance()->increment_active_frame_count(); 209 GetSiteInstance()->increment_active_frame_count();
210 } 210 }
211 211
212 SetUpMojoIfNeeded(); 212 SetUpMojoIfNeeded();
213 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( 213 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind(
214 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); 214 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr())));
215 215
216 if (widget_routing_id != MSG_ROUTING_NONE) { 216 if (widget_routing_id != MSG_ROUTING_NONE) {
217 render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(), 217 // TODO(avi): Once RenderViewHostImpl has-a RenderWidgetHostImpl, the main
218 widget_routing_id, hidden); 218 // render frame should probably start owning the RenderWidgetHostImpl,
219 render_widget_host_->set_owned_by_render_frame_host(true); 219 // so this logic checking for an already existing RWHI should be removed.
220 // https://crbug.com/545684
221 render_widget_host_ =
222 RenderWidgetHostImpl::FromID(GetProcess()->GetID(), widget_routing_id);
223 if (!render_widget_host_) {
224 DCHECK(frame_tree_node->parent());
225 render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(),
226 widget_routing_id, hidden);
227 render_widget_host_->set_owned_by_render_frame_host(true);
228 } else {
229 DCHECK(!render_widget_host_->owned_by_render_frame_host());
230 }
220 } 231 }
221 } 232 }
222 233
223 RenderFrameHostImpl::~RenderFrameHostImpl() { 234 RenderFrameHostImpl::~RenderFrameHostImpl() {
224 GetProcess()->RemoveRoute(routing_id_); 235 GetProcess()->RemoveRoute(routing_id_);
225 g_routing_id_frame_map.Get().erase( 236 g_routing_id_frame_map.Get().erase(
226 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 237 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
227 238
228 if (delegate_ && render_frame_created_) 239 if (delegate_ && render_frame_created_)
229 delegate_->RenderFrameDeleted(this); 240 delegate_->RenderFrameDeleted(this);
230 241
231 // If this was swapped out, it already decremented the active frame count of 242 // If this was swapped out, it already decremented the active frame count of
232 // the SiteInstance it belongs to. 243 // the SiteInstance it belongs to.
233 if (IsRFHStateActive(rfh_state_)) 244 if (IsRFHStateActive(rfh_state_))
234 GetSiteInstance()->decrement_active_frame_count(); 245 GetSiteInstance()->decrement_active_frame_count();
235 246
236 // Notify the FrameTree that this RFH is going away, allowing it to shut down
237 // the corresponding RenderViewHost if it is no longer needed.
238 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
239
240 // NULL out the swapout timer; in crash dumps this member will be null only if 247 // NULL out the swapout timer; in crash dumps this member will be null only if
241 // the dtor has run. 248 // the dtor has run.
242 swapout_event_monitor_timeout_.reset(); 249 swapout_event_monitor_timeout_.reset();
243 250
244 for (const auto& iter: visual_state_callbacks_) { 251 for (const auto& iter: visual_state_callbacks_) {
245 iter.second.Run(false); 252 iter.second.Run(false);
246 } 253 }
247 254
248 if (render_widget_host_) { 255 if (render_widget_host_ &&
256 render_widget_host_->owned_by_render_frame_host()) {
249 // Shutdown causes the RenderWidgetHost to delete itself. 257 // Shutdown causes the RenderWidgetHost to delete itself.
250 render_widget_host_->Shutdown(); 258 render_widget_host_->Shutdown();
251 } 259 }
260
261 // Notify the FrameTree that this RFH is going away, allowing it to shut down
262 // the corresponding RenderViewHost if it is no longer needed.
263 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
252 } 264 }
253 265
254 int RenderFrameHostImpl::GetRoutingID() { 266 int RenderFrameHostImpl::GetRoutingID() {
255 return routing_id_; 267 return routing_id_;
256 } 268 }
257 269
258 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() { 270 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
259 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( 271 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
260 GetProcess()->GetID(), routing_id_); 272 GetProcess()->GetID(), routing_id_);
261 } 273 }
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 // MSG_ROUTING_NONE will prevent a new RenderWidget from being created in 657 // MSG_ROUTING_NONE will prevent a new RenderWidget from being created in
646 // the renderer process. 658 // the renderer process.
647 params.widget_params.routing_id = MSG_ROUTING_NONE; 659 params.widget_params.routing_id = MSG_ROUTING_NONE;
648 params.widget_params.hidden = true; 660 params.widget_params.hidden = true;
649 } 661 }
650 662
651 Send(new FrameMsg_NewFrame(params)); 663 Send(new FrameMsg_NewFrame(params));
652 664
653 // The RenderWidgetHost takes ownership of its view. It is tied to the 665 // The RenderWidgetHost takes ownership of its view. It is tied to the
654 // lifetime of the current RenderProcessHost for this RenderFrameHost. 666 // lifetime of the current RenderProcessHost for this RenderFrameHost.
655 if (render_widget_host_) { 667 // TODO(avi): This will need to change to initialize a
668 // 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
669 // RenderWidgetHostImpl. https://crbug.com/545684
670 if (parent_routing_id != MSG_ROUTING_NONE && render_widget_host_) {
656 RenderWidgetHostView* rwhv = 671 RenderWidgetHostView* rwhv =
657 new RenderWidgetHostViewChildFrame(render_widget_host_); 672 new RenderWidgetHostViewChildFrame(render_widget_host_);
658 rwhv->Hide(); 673 rwhv->Hide();
659 } 674 }
660 675
661 if (proxy_routing_id != MSG_ROUTING_NONE) { 676 if (proxy_routing_id != MSG_ROUTING_NONE) {
662 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID( 677 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID(
663 GetProcess()->GetID(), proxy_routing_id); 678 GetProcess()->GetID(), proxy_routing_id);
664 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so 679 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so
665 // remember that. 680 // remember that.
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 void RenderFrameHostImpl::OnDidDropNavigation() { 962 void RenderFrameHostImpl::OnDidDropNavigation() {
948 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to 963 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to
949 // force the spinner to start, even if the renderer didn't yet begin the load. 964 // force the spinner to start, even if the renderer didn't yet begin the load.
950 // If it turns out that the renderer dropped the navigation, the spinner needs 965 // If it turns out that the renderer dropped the navigation, the spinner needs
951 // to be turned off. 966 // to be turned off.
952 frame_tree_node_->DidStopLoading(); 967 frame_tree_node_->DidStopLoading();
953 navigation_handle_.reset(); 968 navigation_handle_.reset();
954 } 969 }
955 970
956 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { 971 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
957 if (render_widget_host_) 972 return render_widget_host_;
958 return render_widget_host_;
959
960 // TODO(kenrb): Remove this fallback and have the top-level frame have a
961 // widget host just like all the other frames.
962 if (!GetParent())
963 return render_view_host_->GetWidget();
964
965 return nullptr;
966 } 973 }
967 974
968 RenderWidgetHostView* RenderFrameHostImpl::GetView() { 975 RenderWidgetHostView* RenderFrameHostImpl::GetView() {
969 RenderFrameHostImpl* frame = this; 976 RenderFrameHostImpl* frame = this;
970 while (frame) { 977 while (frame) {
971 if (frame->render_widget_host_) 978 if (frame->render_widget_host_)
972 return frame->render_widget_host_->GetView(); 979 return frame->render_widget_host_->GetView();
973 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); 980 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
974 } 981 }
975 982
976 return render_view_host_->GetWidget()->GetView(); 983 NOTREACHED();
984 return nullptr;
977 } 985 }
978 986
979 int RenderFrameHostImpl::GetEnabledBindings() { 987 int RenderFrameHostImpl::GetEnabledBindings() {
980 return render_view_host_->GetEnabledBindings(); 988 return render_view_host_->GetEnabledBindings();
981 } 989 }
982 990
983 void RenderFrameHostImpl::SetNavigationHandle( 991 void RenderFrameHostImpl::SetNavigationHandle(
984 scoped_ptr<NavigationHandleImpl> navigation_handle) { 992 scoped_ptr<NavigationHandleImpl> navigation_handle) {
985 navigation_handle_ = navigation_handle.Pass(); 993 navigation_handle_ = navigation_handle.Pass();
986 } 994 }
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after
2285 *dst = src; 2293 *dst = src;
2286 2294
2287 if (src.routing_id != -1) 2295 if (src.routing_id != -1)
2288 dst->tree_id = RoutingIDToAXTreeID(src.routing_id); 2296 dst->tree_id = RoutingIDToAXTreeID(src.routing_id);
2289 2297
2290 if (src.parent_routing_id != -1) 2298 if (src.parent_routing_id != -1)
2291 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); 2299 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id);
2292 } 2300 }
2293 2301
2294 } // namespace content 2302 } // namespace content
OLDNEW
« 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