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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
450 return render_view_host_; | 450 return render_view_host_; |
451 } | 451 } |
452 | 452 |
453 ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { | 453 ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { |
454 return service_registry_.get(); | 454 return service_registry_.get(); |
455 } | 455 } |
456 | 456 |
457 blink::WebPageVisibilityState RenderFrameHostImpl::GetVisibilityState() { | 457 blink::WebPageVisibilityState RenderFrameHostImpl::GetVisibilityState() { |
458 // Works around the crashes seen in https://crbug.com/501863, where the | 458 // Works around the crashes seen in https://crbug.com/501863, where the |
459 // active WebContents from a browser iterator may contain a render frame | 459 // active WebContents from a browser iterator may contain a render frame |
460 // detached from the frame tree. | 460 // detached from the frame tree. This tries to find a RenderWidgetHost |
461 RenderWidgetHostView* view = RenderFrameHostImpl::GetView(); | 461 // attached to an ancestor frame, and defaults to visibility hidden if |
462 if (!view || !view->GetRenderWidgetHost()) | 462 // it fails. |
463 // TODO(yfriedman, peter): Ideally this would never be called on an | |
464 // unattached frame and we could omit this check. | |
Charlie Reis
2016/05/27 22:50:28
Can you file a bug for removing this whole workaro
kenrb
2016/05/30 19:39:53
Done.
| |
465 RenderFrameHostImpl* frame = this; | |
466 while (frame) { | |
467 if (frame->render_widget_host_) | |
468 break; | |
469 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); | |
Charlie Reis
2016/05/27 22:50:28
nit: Static cast is unnecessary, because RFHI::Get
kenrb
2016/05/30 19:39:53
Done.
| |
470 } | |
471 if (!frame) | |
463 return blink::WebPageVisibilityStateHidden; | 472 return blink::WebPageVisibilityStateHidden; |
464 | 473 |
465 // TODO(mlamouri,kenrb): call GetRenderWidgetHost() directly when it stops | |
466 // returning nullptr in some cases. See https://crbug.com/455245. | |
467 blink::WebPageVisibilityState visibility_state = | 474 blink::WebPageVisibilityState visibility_state = |
468 RenderWidgetHostImpl::From(view->GetRenderWidgetHost())->is_hidden() | 475 GetRenderWidgetHost()->is_hidden() ? blink::WebPageVisibilityStateHidden |
469 ? blink::WebPageVisibilityStateHidden | 476 : blink::WebPageVisibilityStateVisible; |
470 : blink::WebPageVisibilityStateVisible; | |
471 GetContentClient()->browser()->OverridePageVisibilityState(this, | 477 GetContentClient()->browser()->OverridePageVisibilityState(this, |
472 &visibility_state); | 478 &visibility_state); |
473 return visibility_state; | 479 return visibility_state; |
474 } | 480 } |
475 | 481 |
476 bool RenderFrameHostImpl::Send(IPC::Message* message) { | 482 bool RenderFrameHostImpl::Send(IPC::Message* message) { |
477 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { | 483 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { |
478 return render_view_host_->GetWidget()->input_router()->SendInput( | 484 return render_view_host_->GetWidget()->input_router()->SendInput( |
479 base::WrapUnique(message)); | 485 base::WrapUnique(message)); |
480 } | 486 } |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1170 if (!render_view_host_->CanAccessFilesOfPageState(state)) { | 1176 if (!render_view_host_->CanAccessFilesOfPageState(state)) { |
1171 bad_message::ReceivedBadMessage( | 1177 bad_message::ReceivedBadMessage( |
1172 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); | 1178 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); |
1173 return; | 1179 return; |
1174 } | 1180 } |
1175 | 1181 |
1176 delegate_->UpdateStateForFrame(this, state); | 1182 delegate_->UpdateStateForFrame(this, state); |
1177 } | 1183 } |
1178 | 1184 |
1179 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { | 1185 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { |
1180 return render_widget_host_; | |
1181 } | |
1182 | |
1183 RenderWidgetHostView* RenderFrameHostImpl::GetView() { | |
1184 RenderFrameHostImpl* frame = this; | 1186 RenderFrameHostImpl* frame = this; |
1185 while (frame) { | 1187 while (frame) { |
1186 if (frame->render_widget_host_) | 1188 if (frame->render_widget_host_) |
1187 return frame->render_widget_host_->GetView(); | 1189 return frame->render_widget_host_; |
1188 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); | 1190 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); |
Charlie Reis
2016/05/27 22:50:28
nit: Static cast is unnecessary here as well.
kenrb
2016/05/30 19:39:54
Done.
| |
1189 } | 1191 } |
1190 | 1192 |
1191 NOTREACHED(); | 1193 NOTREACHED(); |
1192 return nullptr; | 1194 return nullptr; |
1193 } | 1195 } |
1194 | 1196 |
1197 bool RenderFrameHostImpl::IsLocalRoot() { | |
1198 return !!render_widget_host_; | |
1199 } | |
1200 | |
1201 RenderWidgetHostView* RenderFrameHostImpl::GetView() { | |
1202 return GetRenderWidgetHost()->GetView(); | |
1203 } | |
1204 | |
1195 GlobalFrameRoutingId RenderFrameHostImpl::GetGlobalFrameRoutingId() { | 1205 GlobalFrameRoutingId RenderFrameHostImpl::GetGlobalFrameRoutingId() { |
1196 return GlobalFrameRoutingId(GetProcess()->GetID(), GetRoutingID()); | 1206 return GlobalFrameRoutingId(GetProcess()->GetID(), GetRoutingID()); |
1197 } | 1207 } |
1198 | 1208 |
1199 int RenderFrameHostImpl::GetEnabledBindings() { | 1209 int RenderFrameHostImpl::GetEnabledBindings() { |
1200 return render_view_host_->GetEnabledBindings(); | 1210 return render_view_host_->GetEnabledBindings(); |
1201 } | 1211 } |
1202 | 1212 |
1203 void RenderFrameHostImpl::SetNavigationHandle( | 1213 void RenderFrameHostImpl::SetNavigationHandle( |
1204 std::unique_ptr<NavigationHandleImpl> navigation_handle) { | 1214 std::unique_ptr<NavigationHandleImpl> navigation_handle) { |
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2372 service_registry_android_.reset(); | 2382 service_registry_android_.reset(); |
2373 #endif | 2383 #endif |
2374 | 2384 |
2375 service_registry_.reset(); | 2385 service_registry_.reset(); |
2376 | 2386 |
2377 // Disconnect with ImageDownloader Mojo service in RenderFrame. | 2387 // Disconnect with ImageDownloader Mojo service in RenderFrame. |
2378 mojo_image_downloader_.reset(); | 2388 mojo_image_downloader_.reset(); |
2379 } | 2389 } |
2380 | 2390 |
2381 bool RenderFrameHostImpl::IsFocused() { | 2391 bool RenderFrameHostImpl::IsFocused() { |
2382 // TODO(mlamouri,kenrb): call GetRenderWidgetHost() directly when it stops | 2392 return GetRenderWidgetHost()->is_focused() && |
2383 // returning nullptr in some cases. See https://crbug.com/455245. | |
2384 return RenderWidgetHostImpl::From( | |
2385 GetView()->GetRenderWidgetHost())->is_focused() && | |
2386 frame_tree_->GetFocusedFrame() && | 2393 frame_tree_->GetFocusedFrame() && |
2387 (frame_tree_->GetFocusedFrame() == frame_tree_node() || | 2394 (frame_tree_->GetFocusedFrame() == frame_tree_node() || |
2388 frame_tree_->GetFocusedFrame()->IsDescendantOf(frame_tree_node())); | 2395 frame_tree_->GetFocusedFrame()->IsDescendantOf(frame_tree_node())); |
2389 } | 2396 } |
2390 | 2397 |
2391 bool RenderFrameHostImpl::UpdatePendingWebUI(const GURL& dest_url, | 2398 bool RenderFrameHostImpl::UpdatePendingWebUI(const GURL& dest_url, |
2392 int entry_bindings) { | 2399 int entry_bindings) { |
2393 WebUI::TypeID new_web_ui_type = | 2400 WebUI::TypeID new_web_ui_type = |
2394 WebUIControllerFactoryRegistry::GetInstance()->GetWebUIType( | 2401 WebUIControllerFactoryRegistry::GetInstance()->GetWebUIType( |
2395 GetSiteInstance()->GetBrowserContext(), dest_url); | 2402 GetSiteInstance()->GetBrowserContext(), dest_url); |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2849 // handler after it's destroyed so it can't run after the RFHI is destroyed. | 2856 // handler after it's destroyed so it can't run after the RFHI is destroyed. |
2850 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( | 2857 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( |
2851 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); | 2858 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); |
2852 } | 2859 } |
2853 | 2860 |
2854 void RenderFrameHostImpl::DeleteWebBluetoothService() { | 2861 void RenderFrameHostImpl::DeleteWebBluetoothService() { |
2855 web_bluetooth_service_.reset(); | 2862 web_bluetooth_service_.reset(); |
2856 } | 2863 } |
2857 | 2864 |
2858 } // namespace content | 2865 } // namespace content |
OLD | NEW |