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

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 all the tests. Probably. 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 render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(),
225 widget_routing_id, hidden);
226 render_widget_host_->set_owned_by_render_frame_host(true);
227 }
ncarter (slow) 2015/10/21 22:15:48 Does it make sense to add a DCHECK: else { DCHEC
dcheng 2015/10/21 23:46:51 Done.
220 } 228 }
221 } 229 }
222 230
223 RenderFrameHostImpl::~RenderFrameHostImpl() { 231 RenderFrameHostImpl::~RenderFrameHostImpl() {
224 GetProcess()->RemoveRoute(routing_id_); 232 GetProcess()->RemoveRoute(routing_id_);
225 g_routing_id_frame_map.Get().erase( 233 g_routing_id_frame_map.Get().erase(
226 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 234 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
227 235
228 if (delegate_ && render_frame_created_) 236 if (delegate_ && render_frame_created_)
229 delegate_->RenderFrameDeleted(this); 237 delegate_->RenderFrameDeleted(this);
230 238
231 // If this was swapped out, it already decremented the active frame count of 239 // If this was swapped out, it already decremented the active frame count of
232 // the SiteInstance it belongs to. 240 // the SiteInstance it belongs to.
233 if (IsRFHStateActive(rfh_state_)) 241 if (IsRFHStateActive(rfh_state_))
234 GetSiteInstance()->decrement_active_frame_count(); 242 GetSiteInstance()->decrement_active_frame_count();
235 243
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 244 // NULL out the swapout timer; in crash dumps this member will be null only if
241 // the dtor has run. 245 // the dtor has run.
242 swapout_event_monitor_timeout_.reset(); 246 swapout_event_monitor_timeout_.reset();
243 247
244 for (const auto& iter: visual_state_callbacks_) { 248 for (const auto& iter: visual_state_callbacks_) {
245 iter.second.Run(false); 249 iter.second.Run(false);
246 } 250 }
247 251
248 if (render_widget_host_) { 252 if (render_widget_host_ &&
253 render_widget_host_->owned_by_render_frame_host()) {
249 // Shutdown causes the RenderWidgetHost to delete itself. 254 // Shutdown causes the RenderWidgetHost to delete itself.
250 render_widget_host_->Shutdown(); 255 render_widget_host_->Shutdown();
251 } 256 }
257
258 // Notify the FrameTree that this RFH is going away, allowing it to shut down
259 // the corresponding RenderViewHost if it is no longer needed.
260 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
252 } 261 }
253 262
254 int RenderFrameHostImpl::GetRoutingID() { 263 int RenderFrameHostImpl::GetRoutingID() {
255 return routing_id_; 264 return routing_id_;
256 } 265 }
257 266
258 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() { 267 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
259 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( 268 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
260 GetProcess()->GetID(), routing_id_); 269 GetProcess()->GetID(), routing_id_);
261 } 270 }
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 void RenderFrameHostImpl::OnDidDropNavigation() { 956 void RenderFrameHostImpl::OnDidDropNavigation() {
948 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to 957 // 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. 958 // 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 959 // If it turns out that the renderer dropped the navigation, the spinner needs
951 // to be turned off. 960 // to be turned off.
952 frame_tree_node_->DidStopLoading(); 961 frame_tree_node_->DidStopLoading();
953 navigation_handle_.reset(); 962 navigation_handle_.reset();
954 } 963 }
955 964
956 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { 965 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
957 if (render_widget_host_) 966 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 } 967 }
967 968
968 RenderWidgetHostView* RenderFrameHostImpl::GetView() { 969 RenderWidgetHostView* RenderFrameHostImpl::GetView() {
969 RenderFrameHostImpl* frame = this; 970 RenderFrameHostImpl* frame = this;
970 while (frame) { 971 while (frame) {
971 if (frame->render_widget_host_) 972 if (frame->render_widget_host_)
972 return frame->render_widget_host_->GetView(); 973 return frame->render_widget_host_->GetView();
973 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); 974 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
974 } 975 }
975 976
976 return render_view_host_->GetWidget()->GetView(); 977 NOTREACHED();
978 return nullptr;
977 } 979 }
978 980
979 int RenderFrameHostImpl::GetEnabledBindings() { 981 int RenderFrameHostImpl::GetEnabledBindings() {
980 return render_view_host_->GetEnabledBindings(); 982 return render_view_host_->GetEnabledBindings();
981 } 983 }
982 984
983 void RenderFrameHostImpl::SetNavigationHandle( 985 void RenderFrameHostImpl::SetNavigationHandle(
984 scoped_ptr<NavigationHandleImpl> navigation_handle) { 986 scoped_ptr<NavigationHandleImpl> navigation_handle) {
985 navigation_handle_ = navigation_handle.Pass(); 987 navigation_handle_ = navigation_handle.Pass();
986 } 988 }
(...skipping 1283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2270 BrowserPluginInstanceIDToAXTreeID(value))); 2272 BrowserPluginInstanceIDToAXTreeID(value)));
2271 break; 2273 break;
2272 case AX_CONTENT_INT_ATTRIBUTE_LAST: 2274 case AX_CONTENT_INT_ATTRIBUTE_LAST:
2273 NOTREACHED(); 2275 NOTREACHED();
2274 break; 2276 break;
2275 } 2277 }
2276 } 2278 }
2277 } 2279 }
2278 2280
2279 } // namespace content 2281 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698