Chromium Code Reviews| 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 |