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. See |
| 465 // https://crbug.com/615867. |
| 466 RenderFrameHostImpl* frame = this; |
| 467 while (frame) { |
| 468 if (frame->render_widget_host_) |
| 469 break; |
| 470 frame = frame->GetParent(); |
| 471 } |
| 472 if (!frame) |
463 return blink::WebPageVisibilityStateHidden; | 473 return blink::WebPageVisibilityStateHidden; |
464 | 474 |
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 = | 475 blink::WebPageVisibilityState visibility_state = |
468 RenderWidgetHostImpl::From(view->GetRenderWidgetHost())->is_hidden() | 476 GetRenderWidgetHost()->is_hidden() ? blink::WebPageVisibilityStateHidden |
469 ? blink::WebPageVisibilityStateHidden | 477 : blink::WebPageVisibilityStateVisible; |
470 : blink::WebPageVisibilityStateVisible; | |
471 GetContentClient()->browser()->OverridePageVisibilityState(this, | 478 GetContentClient()->browser()->OverridePageVisibilityState(this, |
472 &visibility_state); | 479 &visibility_state); |
473 return visibility_state; | 480 return visibility_state; |
474 } | 481 } |
475 | 482 |
476 bool RenderFrameHostImpl::Send(IPC::Message* message) { | 483 bool RenderFrameHostImpl::Send(IPC::Message* message) { |
477 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { | 484 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { |
478 return render_view_host_->GetWidget()->input_router()->SendInput( | 485 return render_view_host_->GetWidget()->input_router()->SendInput( |
479 base::WrapUnique(message)); | 486 base::WrapUnique(message)); |
480 } | 487 } |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 if (!render_view_host_->CanAccessFilesOfPageState(state)) { | 1177 if (!render_view_host_->CanAccessFilesOfPageState(state)) { |
1171 bad_message::ReceivedBadMessage( | 1178 bad_message::ReceivedBadMessage( |
1172 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); | 1179 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); |
1173 return; | 1180 return; |
1174 } | 1181 } |
1175 | 1182 |
1176 delegate_->UpdateStateForFrame(this, state); | 1183 delegate_->UpdateStateForFrame(this, state); |
1177 } | 1184 } |
1178 | 1185 |
1179 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { | 1186 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { |
1180 return render_widget_host_; | |
1181 } | |
1182 | |
1183 RenderWidgetHostView* RenderFrameHostImpl::GetView() { | |
1184 RenderFrameHostImpl* frame = this; | 1187 RenderFrameHostImpl* frame = this; |
1185 while (frame) { | 1188 while (frame) { |
1186 if (frame->render_widget_host_) | 1189 if (frame->render_widget_host_) |
1187 return frame->render_widget_host_->GetView(); | 1190 return frame->render_widget_host_; |
1188 frame = static_cast<RenderFrameHostImpl*>(frame->GetParent()); | 1191 frame = frame->GetParent(); |
1189 } | 1192 } |
1190 | 1193 |
1191 NOTREACHED(); | 1194 NOTREACHED(); |
1192 return nullptr; | 1195 return nullptr; |
1193 } | 1196 } |
1194 | 1197 |
| 1198 RenderWidgetHostView* RenderFrameHostImpl::GetView() { |
| 1199 return GetRenderWidgetHost()->GetView(); |
| 1200 } |
| 1201 |
1195 GlobalFrameRoutingId RenderFrameHostImpl::GetGlobalFrameRoutingId() { | 1202 GlobalFrameRoutingId RenderFrameHostImpl::GetGlobalFrameRoutingId() { |
1196 return GlobalFrameRoutingId(GetProcess()->GetID(), GetRoutingID()); | 1203 return GlobalFrameRoutingId(GetProcess()->GetID(), GetRoutingID()); |
1197 } | 1204 } |
1198 | 1205 |
1199 int RenderFrameHostImpl::GetEnabledBindings() { | 1206 int RenderFrameHostImpl::GetEnabledBindings() { |
1200 return render_view_host_->GetEnabledBindings(); | 1207 return render_view_host_->GetEnabledBindings(); |
1201 } | 1208 } |
1202 | 1209 |
1203 void RenderFrameHostImpl::SetNavigationHandle( | 1210 void RenderFrameHostImpl::SetNavigationHandle( |
1204 std::unique_ptr<NavigationHandleImpl> navigation_handle) { | 1211 std::unique_ptr<NavigationHandleImpl> navigation_handle) { |
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2372 service_registry_android_.reset(); | 2379 service_registry_android_.reset(); |
2373 #endif | 2380 #endif |
2374 | 2381 |
2375 service_registry_.reset(); | 2382 service_registry_.reset(); |
2376 | 2383 |
2377 // Disconnect with ImageDownloader Mojo service in RenderFrame. | 2384 // Disconnect with ImageDownloader Mojo service in RenderFrame. |
2378 mojo_image_downloader_.reset(); | 2385 mojo_image_downloader_.reset(); |
2379 } | 2386 } |
2380 | 2387 |
2381 bool RenderFrameHostImpl::IsFocused() { | 2388 bool RenderFrameHostImpl::IsFocused() { |
2382 // TODO(mlamouri,kenrb): call GetRenderWidgetHost() directly when it stops | 2389 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() && | 2390 frame_tree_->GetFocusedFrame() && |
2387 (frame_tree_->GetFocusedFrame() == frame_tree_node() || | 2391 (frame_tree_->GetFocusedFrame() == frame_tree_node() || |
2388 frame_tree_->GetFocusedFrame()->IsDescendantOf(frame_tree_node())); | 2392 frame_tree_->GetFocusedFrame()->IsDescendantOf(frame_tree_node())); |
2389 } | 2393 } |
2390 | 2394 |
2391 bool RenderFrameHostImpl::UpdatePendingWebUI(const GURL& dest_url, | 2395 bool RenderFrameHostImpl::UpdatePendingWebUI(const GURL& dest_url, |
2392 int entry_bindings) { | 2396 int entry_bindings) { |
2393 WebUI::TypeID new_web_ui_type = | 2397 WebUI::TypeID new_web_ui_type = |
2394 WebUIControllerFactoryRegistry::GetInstance()->GetWebUIType( | 2398 WebUIControllerFactoryRegistry::GetInstance()->GetWebUIType( |
2395 GetSiteInstance()->GetBrowserContext(), dest_url); | 2399 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. | 2853 // handler after it's destroyed so it can't run after the RFHI is destroyed. |
2850 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( | 2854 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( |
2851 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); | 2855 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); |
2852 } | 2856 } |
2853 | 2857 |
2854 void RenderFrameHostImpl::DeleteWebBluetoothService() { | 2858 void RenderFrameHostImpl::DeleteWebBluetoothService() { |
2855 web_bluetooth_service_.reset(); | 2859 web_bluetooth_service_.reset(); |
2856 } | 2860 } |
2857 | 2861 |
2858 } // namespace content | 2862 } // namespace content |
OLD | NEW |