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

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: addressing Ken's comment. 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 11 matching lines...) Expand all
206 frame_tree_->UnregisterRenderFrameHost(this); 207 frame_tree_->UnregisterRenderFrameHost(this);
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 // Shutdown causes the RenderWidgetHost to delete itself.
219 render_widget_host_->Shutdown();
220 }
218 } 221 }
219 222
220 int RenderFrameHostImpl::GetRoutingID() { 223 int RenderFrameHostImpl::GetRoutingID() {
221 return routing_id_; 224 return routing_id_;
222 } 225 }
223 226
224 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { 227 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
225 return site_instance_.get(); 228 return site_instance_.get();
226 } 229 }
227 230
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 } 592 }
590 593
591 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id, 594 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id,
592 frame_tree_node()->current_replication_state(), 595 frame_tree_node()->current_replication_state(),
593 widget_params)); 596 widget_params));
594 597
595 // The RenderWidgetHost takes ownership of its view. It is tied to the 598 // The RenderWidgetHost takes ownership of its view. It is tied to the
596 // lifetime of the current RenderProcessHost for this RenderFrameHost. 599 // lifetime of the current RenderProcessHost for this RenderFrameHost.
597 if (render_widget_host_) { 600 if (render_widget_host_) {
598 RenderWidgetHostView* rwhv = 601 RenderWidgetHostView* rwhv =
599 new RenderWidgetHostViewChildFrame(render_widget_host_.get()); 602 new RenderWidgetHostViewChildFrame(render_widget_host_);
600 rwhv->Hide(); 603 rwhv->Hide();
601 } 604 }
602 605
603 if (proxy_routing_id != MSG_ROUTING_NONE) { 606 if (proxy_routing_id != MSG_ROUTING_NONE) {
604 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID( 607 RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID(
605 GetProcess()->GetID(), proxy_routing_id); 608 GetProcess()->GetID(), proxy_routing_id);
606 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so 609 // We have also created a RenderFrameProxy in FrameMsg_NewFrame above, so
607 // remember that. 610 // remember that.
608 proxy->set_render_frame_proxy_created(true); 611 proxy->set_render_frame_proxy_created(true);
609 } 612 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 void RenderFrameHostImpl::OnDidDropNavigation() { 867 void RenderFrameHostImpl::OnDidDropNavigation() {
865 // At the end of Navigate(), the FrameTreeNode's DidStartLoading is called to 868 // 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. 869 // 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 870 // If it turns out that the renderer dropped the navigation, the spinner needs
868 // to be turned off. 871 // to be turned off.
869 frame_tree_node_->DidStopLoading(); 872 frame_tree_node_->DidStopLoading();
870 } 873 }
871 874
872 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { 875 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
873 if (render_widget_host_) 876 if (render_widget_host_)
874 return render_widget_host_.get(); 877 return render_widget_host_;
875 878
876 // TODO(kenrb): When RenderViewHost no longer inherits RenderWidgetHost, 879 // TODO(kenrb): When RenderViewHost no longer inherits RenderWidgetHost,
877 // we can remove this fallback. Currently it is only used for the main 880 // we can remove this fallback. Currently it is only used for the main
878 // frame. 881 // frame.
879 if (!GetParent()) 882 if (!GetParent())
880 return static_cast<RenderWidgetHostImpl*>(render_view_host_); 883 return static_cast<RenderWidgetHostImpl*>(render_view_host_);
881 884
882 return nullptr; 885 return nullptr;
883 } 886 }
884 887
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2060 return; 2063 return;
2061 2064
2062 permission_manager->RegisterPermissionUsage( 2065 permission_manager->RegisterPermissionUsage(
2063 PermissionType::GEOLOCATION, 2066 PermissionType::GEOLOCATION,
2064 GetLastCommittedURL().GetOrigin(), 2067 GetLastCommittedURL().GetOrigin(),
2065 frame_tree_node()->frame_tree()->GetMainFrame() 2068 frame_tree_node()->frame_tree()->GetMainFrame()
2066 ->GetLastCommittedURL().GetOrigin()); 2069 ->GetLastCommittedURL().GetOrigin());
2067 } 2070 }
2068 2071
2069 } // namespace content 2072 } // 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