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