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 |