OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |