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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 1052223008: Shutdown RenderWidgetHost owned by RenderFrameHost when destroying the RenderFrameHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 int routing_id, 142 int routing_id,
143 int flags) 143 int flags)
144 : render_view_host_(render_view_host), 144 : render_view_host_(render_view_host),
145 delegate_(delegate), 145 delegate_(delegate),
146 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)), 146 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)),
147 process_(site_instance->GetProcess()), 147 process_(site_instance->GetProcess()),
148 cross_process_frame_connector_(NULL), 148 cross_process_frame_connector_(NULL),
149 render_frame_proxy_host_(NULL), 149 render_frame_proxy_host_(NULL),
150 frame_tree_(frame_tree), 150 frame_tree_(frame_tree),
151 frame_tree_node_(frame_tree_node), 151 frame_tree_node_(frame_tree_node),
152 render_widget_host_(nullptr),
152 routing_id_(routing_id), 153 routing_id_(routing_id),
153 render_frame_created_(false), 154 render_frame_created_(false),
154 navigations_suspended_(false), 155 navigations_suspended_(false),
155 is_waiting_for_beforeunload_ack_(false), 156 is_waiting_for_beforeunload_ack_(false),
156 unload_ack_is_for_navigation_(false), 157 unload_ack_is_for_navigation_(false),
157 is_loading_(false), 158 is_loading_(false),
158 pending_commit_(false), 159 pending_commit_(false),
159 accessibility_reset_token_(0), 160 accessibility_reset_token_(0),
160 accessibility_reset_count_(0), 161 accessibility_reset_count_(0),
161 no_create_browser_accessibility_manager_for_testing_(false), 162 no_create_browser_accessibility_manager_for_testing_(false),
(...skipping 11 matching lines...) Expand all
173 } else { 174 } else {
174 rfh_state_ = STATE_DEFAULT; 175 rfh_state_ = STATE_DEFAULT;
175 GetSiteInstance()->increment_active_frame_count(); 176 GetSiteInstance()->increment_active_frame_count();
176 } 177 }
177 178
178 SetUpMojoIfNeeded(); 179 SetUpMojoIfNeeded();
179 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( 180 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind(
180 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); 181 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr())));
181 182
182 if (flags & CREATE_RF_NEEDS_RENDER_WIDGET_HOST) { 183 if (flags & CREATE_RF_NEEDS_RENDER_WIDGET_HOST) {
183 render_widget_host_.reset(new RenderWidgetHostImpl( 184 render_widget_host_ = new RenderWidgetHostImpl(rwh_delegate, GetProcess(),
184 rwh_delegate, GetProcess(), MSG_ROUTING_NONE, hidden)); 185 MSG_ROUTING_NONE, hidden);
185 render_widget_host_->set_owned_by_render_frame_host(true); 186 render_widget_host_->set_owned_by_render_frame_host(true);
186 } 187 }
187 } 188 }
188 189
189 RenderFrameHostImpl::~RenderFrameHostImpl() { 190 RenderFrameHostImpl::~RenderFrameHostImpl() {
190 GetProcess()->RemoveRoute(routing_id_); 191 GetProcess()->RemoveRoute(routing_id_);
191 g_routing_id_frame_map.Get().erase( 192 g_routing_id_frame_map.Get().erase(
192 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 193 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
193 194
194 if (delegate_ && render_frame_created_) 195 if (delegate_ && render_frame_created_)
(...skipping 12 matching lines...) Expand all
207 208
208 // NULL out the swapout timer; in crash dumps this member will be null only if 209 // NULL out the swapout timer; in crash dumps this member will be null only if
209 // the dtor has run. 210 // the dtor has run.
210 swapout_event_monitor_timeout_.reset(); 211 swapout_event_monitor_timeout_.reset();
211 212
212 for (const auto& iter: visual_state_callbacks_) { 213 for (const auto& iter: visual_state_callbacks_) {
213 iter.second.Run(false); 214 iter.second.Run(false);
214 } 215 }
215 216
216 if (render_widget_host_) 217 if (render_widget_host_)
217 render_widget_host_->Cleanup(); 218 render_widget_host_->Shutdown();
kenrb 2015/04/23 21:39:18 Worthwhile to add a comment that the RenderWidgetH
lfg 2015/04/23 22:19:54 Done.
218 } 219 }
219 220
220 int RenderFrameHostImpl::GetRoutingID() { 221 int RenderFrameHostImpl::GetRoutingID() {
221 return routing_id_; 222 return routing_id_;
222 } 223 }
223 224
224 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { 225 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
225 return site_instance_.get(); 226 return site_instance_.get();
226 } 227 }
227 228
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 } 590 }
590 591
591 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id, 592 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id,
592 frame_tree_node()->current_replication_state(), 593 frame_tree_node()->current_replication_state(),
593 widget_params)); 594 widget_params));
594 595
595 // The RenderWidgetHost takes ownership of its view. It is tied to the 596 // The RenderWidgetHost takes ownership of its view. It is tied to the
596 // lifetime of the current RenderProcessHost for this RenderFrameHost. 597 // lifetime of the current RenderProcessHost for this RenderFrameHost.
597 if (render_widget_host_) { 598 if (render_widget_host_) {
598 RenderWidgetHostView* rwhv = 599 RenderWidgetHostView* rwhv =
599 new RenderWidgetHostViewChildFrame(render_widget_host_.get()); 600 new RenderWidgetHostViewChildFrame(render_widget_host_);
600 rwhv->Hide(); 601 rwhv->Hide();
601 } 602 }
602 603
603 if (proxy_routing_id != MSG_ROUTING_NONE) { 604 if (proxy_routing_id != MSG_ROUTING_NONE) {
604 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID( 605 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID(
605 GetProcess()->GetID(), proxy_routing_id); 606 GetProcess()->GetID(), proxy_routing_id);
606 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so 607 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so
607 // remember that. 608 // remember that.
608 proxy->set_render_frame_proxy_created(true); 609 proxy->set_render_frame_proxy_created(true);
609 } 610 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 void RenderFrameHostImpl::OnDidDropNavigation() { 865 void RenderFrameHostImpl::OnDidDropNavigation() {
865 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to 866 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to
866 // force the spinner to start, even if the renderer didn't yet begin the load. 867 // force the spinner to start, even if the renderer didn't yet begin the load.
867 // If it turns out that the renderer dropped the navigation, the spinner needs 868 // If it turns out that the renderer dropped the navigation, the spinner needs
868 // to be turned off. 869 // to be turned off.
869 frame_tree_node_->DidStopLoading(); 870 frame_tree_node_->DidStopLoading();
870 } 871 }
871 872
872 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { 873 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
873 if (render_widget_host_) 874 if (render_widget_host_)
874 return render_widget_host_.get(); 875 return render_widget_host_;
875 876
876 // TODO(kenrb): When RenderViewHost no longer inherits RenderWidgetHost, 877 // TODO(kenrb): When RenderViewHost no longer inherits RenderWidgetHost,
877 // we can remove this fallback. Currently it is only used for the main 878 // we can remove this fallback. Currently it is only used for the main
878 // frame. 879 // frame.
879 if (!GetParent()) 880 if (!GetParent())
880 return static_cast<RenderWidgetHostImpl*>(render_view_host_); 881 return static_cast<RenderWidgetHostImpl*>(render_view_host_);
881 882
882 return nullptr; 883 return nullptr;
883 } 884 }
884 885
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2060 return; 2061 return;
2061 2062
2062 permission_manager->RegisterPermissionUsage( 2063 permission_manager->RegisterPermissionUsage(
2063 PermissionType::GEOLOCATION, 2064 PermissionType::GEOLOCATION,
2064 GetLastCommittedURL().GetOrigin(), 2065 GetLastCommittedURL().GetOrigin(),
2065 frame_tree_node()->frame_tree()->GetMainFrame() 2066 frame_tree_node()->frame_tree()->GetMainFrame()
2066 ->GetLastCommittedURL().GetOrigin()); 2067 ->GetLastCommittedURL().GetOrigin());
2067 } 2068 }
2068 2069
2069 } // namespace content 2070 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698