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 <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 // RemoterFactory that delegates Create() calls to the ContentBrowserClient. | 228 // RemoterFactory that delegates Create() calls to the ContentBrowserClient. |
229 // | 229 // |
230 // Since Create() could be called at any time, perhaps by a stray task being run | 230 // Since Create() could be called at any time, perhaps by a stray task being run |
231 // after a RenderFrameHost has been destroyed, the RemoterFactoryImpl uses the | 231 // after a RenderFrameHost has been destroyed, the RemoterFactoryImpl uses the |
232 // process/routing IDs as a weak reference to the RenderFrameHostImpl. | 232 // process/routing IDs as a weak reference to the RenderFrameHostImpl. |
233 class RemoterFactoryImpl final : public media::mojom::RemoterFactory { | 233 class RemoterFactoryImpl final : public media::mojom::RemoterFactory { |
234 public: | 234 public: |
235 RemoterFactoryImpl(int process_id, int routing_id) | 235 RemoterFactoryImpl(int process_id, int routing_id) |
236 : process_id_(process_id), routing_id_(routing_id) {} | 236 : process_id_(process_id), routing_id_(routing_id) {} |
237 | 237 |
238 static void Bind(int process_id, int routing_id, | 238 static void Bind(int process_id, |
| 239 int routing_id, |
| 240 const service_manager::BindSourceInfo& source_info, |
239 media::mojom::RemoterFactoryRequest request) { | 241 media::mojom::RemoterFactoryRequest request) { |
240 mojo::MakeStrongBinding( | 242 mojo::MakeStrongBinding( |
241 base::MakeUnique<RemoterFactoryImpl>(process_id, routing_id), | 243 base::MakeUnique<RemoterFactoryImpl>(process_id, routing_id), |
242 std::move(request)); | 244 std::move(request)); |
243 } | 245 } |
244 | 246 |
245 private: | 247 private: |
246 void Create(media::mojom::RemotingSourcePtr source, | 248 void Create(media::mojom::RemotingSourcePtr source, |
247 media::mojom::RemoterRequest request) final { | 249 media::mojom::RemoterRequest request) final { |
248 if (auto* host = RenderFrameHostImpl::FromID(process_id_, routing_id_)) { | 250 if (auto* host = RenderFrameHostImpl::FromID(process_id_, routing_id_)) { |
249 GetContentClient()->browser()->CreateMediaRemoter( | 251 GetContentClient()->browser()->CreateMediaRemoter( |
250 host, std::move(source), std::move(request)); | 252 host, std::move(source), std::move(request)); |
251 } | 253 } |
252 } | 254 } |
253 | 255 |
254 const int process_id_; | 256 const int process_id_; |
255 const int routing_id_; | 257 const int routing_id_; |
256 | 258 |
257 DISALLOW_COPY_AND_ASSIGN(RemoterFactoryImpl); | 259 DISALLOW_COPY_AND_ASSIGN(RemoterFactoryImpl); |
258 }; | 260 }; |
259 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING) | 261 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING) |
260 | 262 |
261 template <typename Interface> | 263 template <typename Interface> |
262 void IgnoreInterfaceRequest(mojo::InterfaceRequest<Interface> request) { | 264 void IgnoreInterfaceRequest(const service_manager::BindSourceInfo& source_info, |
| 265 mojo::InterfaceRequest<Interface> request) { |
263 // Intentionally ignore the interface request. | 266 // Intentionally ignore the interface request. |
264 } | 267 } |
265 | 268 |
266 // The following functions simplify code paths where the UI thread notifies the | 269 // The following functions simplify code paths where the UI thread notifies the |
267 // ResourceDispatcherHostImpl of information pertaining to loading behavior of | 270 // ResourceDispatcherHostImpl of information pertaining to loading behavior of |
268 // frame hosts. | 271 // frame hosts. |
269 void NotifyRouteChangesOnIO( | 272 void NotifyRouteChangesOnIO( |
270 base::Callback<void(ResourceDispatcherHostImpl*, | 273 base::Callback<void(ResourceDispatcherHostImpl*, |
271 const GlobalFrameRoutingId&)> frame_callback, | 274 const GlobalFrameRoutingId&)> frame_callback, |
272 std::unique_ptr<std::set<GlobalFrameRoutingId>> routing_ids) { | 275 std::unique_ptr<std::set<GlobalFrameRoutingId>> routing_ids) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 } | 319 } |
317 | 320 |
318 #if defined(OS_ANDROID) | 321 #if defined(OS_ANDROID) |
319 // static | 322 // static |
320 void RenderFrameHost::AllowInjectingJavaScriptForAndroidWebView() { | 323 void RenderFrameHost::AllowInjectingJavaScriptForAndroidWebView() { |
321 g_allow_injecting_javascript = true; | 324 g_allow_injecting_javascript = true; |
322 } | 325 } |
323 | 326 |
324 void CreateMediaPlayerRenderer( | 327 void CreateMediaPlayerRenderer( |
325 content::RenderFrameHost* render_frame_host, | 328 content::RenderFrameHost* render_frame_host, |
326 mojo::InterfaceRequest<media::mojom::Renderer> request) { | 329 const service_manager::BindSourceInfo& source_info, |
| 330 media::mojom::RendererRequest request) { |
327 std::unique_ptr<MediaPlayerRenderer> renderer = | 331 std::unique_ptr<MediaPlayerRenderer> renderer = |
328 base::MakeUnique<MediaPlayerRenderer>(render_frame_host); | 332 base::MakeUnique<MediaPlayerRenderer>(render_frame_host); |
329 | 333 |
330 // base::Unretained is safe here because the lifetime of the MediaPlayerRender | 334 // base::Unretained is safe here because the lifetime of the MediaPlayerRender |
331 // is tied to the lifetime of the MojoRendererService. | 335 // is tied to the lifetime of the MojoRendererService. |
332 media::MojoRendererService::InitiateSurfaceRequestCB surface_request_cb = | 336 media::MojoRendererService::InitiateSurfaceRequestCB surface_request_cb = |
333 base::Bind(&MediaPlayerRenderer::InitiateScopedSurfaceRequest, | 337 base::Bind(&MediaPlayerRenderer::InitiateScopedSurfaceRequest, |
334 base::Unretained(renderer.get())); | 338 base::Unretained(renderer.get())); |
335 | 339 |
336 media::MojoRendererService::Create( | 340 media::MojoRendererService::Create( |
(...skipping 2328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2665 // this object and destruction of any GeolocationServicesImpls created via | 2669 // this object and destruction of any GeolocationServicesImpls created via |
2666 // the below service registry, the reason being that the destruction of the | 2670 // the below service registry, the reason being that the destruction of the |
2667 // latter is triggered by receiving a message that the pipe was closed from | 2671 // latter is triggered by receiving a message that the pipe was closed from |
2668 // the renderer side. Hence, supply the reference to this object as a weak | 2672 // the renderer side. Hence, supply the reference to this object as a weak |
2669 // pointer. | 2673 // pointer. |
2670 GetInterfaceRegistry()->AddInterface( | 2674 GetInterfaceRegistry()->AddInterface( |
2671 base::Bind(&device::GeolocationServiceContext::CreateService, | 2675 base::Bind(&device::GeolocationServiceContext::CreateService, |
2672 base::Unretained(geolocation_service_context))); | 2676 base::Unretained(geolocation_service_context))); |
2673 } | 2677 } |
2674 | 2678 |
2675 device::mojom::WakeLockContext* wake_lock_service_context = | 2679 GetInterfaceRegistry()->AddInterface<device::mojom::WakeLockService>( |
2676 delegate_ ? delegate_->GetWakeLockServiceContext() : nullptr; | 2680 base::Bind(&RenderFrameHostImpl::BindWakeLockServiceRequest, |
2677 if (wake_lock_service_context) { | 2681 base::Unretained(this))); |
2678 // WakeLockServiceContext is owned by WebContentsImpl so it will outlive | |
2679 // this RenderFrameHostImpl, hence a raw pointer can be bound to service | |
2680 // factory callback. | |
2681 GetInterfaceRegistry()->AddInterface<device::mojom::WakeLockService>( | |
2682 base::Bind(&device::mojom::WakeLockContext::GetWakeLock, | |
2683 base::Unretained(wake_lock_service_context))); | |
2684 } | |
2685 | 2682 |
2686 if (!permission_service_context_) | 2683 if (!permission_service_context_) |
2687 permission_service_context_.reset(new PermissionServiceContext(this)); | 2684 permission_service_context_.reset(new PermissionServiceContext(this)); |
2688 | 2685 |
2689 GetInterfaceRegistry()->AddInterface( | 2686 GetInterfaceRegistry()->AddInterface( |
2690 base::Bind(&PermissionServiceContext::CreateService, | 2687 base::Bind(&PermissionServiceContext::CreateService, |
2691 base::Unretained(permission_service_context_.get()))); | 2688 base::Unretained(permission_service_context_.get()))); |
2692 | 2689 |
2693 GetInterfaceRegistry()->AddInterface(base::Bind( | 2690 GetInterfaceRegistry()->AddInterface(base::Bind( |
2694 &PresentationServiceImpl::CreateMojoService, base::Unretained(this))); | 2691 &PresentationServiceImpl::CreateMojoService, base::Unretained(this))); |
(...skipping 968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3663 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); | 3660 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); |
3664 if (!focused_frame_tree_node) | 3661 if (!focused_frame_tree_node) |
3665 return; | 3662 return; |
3666 RenderFrameHostImpl* focused_frame = | 3663 RenderFrameHostImpl* focused_frame = |
3667 focused_frame_tree_node->current_frame_host(); | 3664 focused_frame_tree_node->current_frame_host(); |
3668 DCHECK(focused_frame); | 3665 DCHECK(focused_frame); |
3669 dst->focused_tree_id = focused_frame->GetAXTreeID(); | 3666 dst->focused_tree_id = focused_frame->GetAXTreeID(); |
3670 } | 3667 } |
3671 | 3668 |
3672 WebBluetoothServiceImpl* RenderFrameHostImpl::CreateWebBluetoothService( | 3669 WebBluetoothServiceImpl* RenderFrameHostImpl::CreateWebBluetoothService( |
| 3670 const service_manager::BindSourceInfo& source_info, |
3673 blink::mojom::WebBluetoothServiceRequest request) { | 3671 blink::mojom::WebBluetoothServiceRequest request) { |
3674 // RFHI owns |web_bluetooth_services_| and |web_bluetooth_service| owns the | 3672 // RFHI owns |web_bluetooth_services_| and |web_bluetooth_service| owns the |
3675 // |binding_| which may run the error handler. |binding_| can't run the error | 3673 // |binding_| which may run the error handler. |binding_| can't run the error |
3676 // handler after it's destroyed so it can't run after the RFHI is destroyed. | 3674 // handler after it's destroyed so it can't run after the RFHI is destroyed. |
3677 auto web_bluetooth_service = | 3675 auto web_bluetooth_service = |
3678 base::MakeUnique<WebBluetoothServiceImpl>(this, std::move(request)); | 3676 base::MakeUnique<WebBluetoothServiceImpl>(this, std::move(request)); |
3679 web_bluetooth_service->SetClientConnectionErrorHandler( | 3677 web_bluetooth_service->SetClientConnectionErrorHandler( |
3680 base::Bind(&RenderFrameHostImpl::DeleteWebBluetoothService, | 3678 base::Bind(&RenderFrameHostImpl::DeleteWebBluetoothService, |
3681 base::Unretained(this), web_bluetooth_service.get())); | 3679 base::Unretained(this), web_bluetooth_service.get())); |
3682 web_bluetooth_services_.push_back(std::move(web_bluetooth_service)); | 3680 web_bluetooth_services_.push_back(std::move(web_bluetooth_service)); |
(...skipping 30 matching lines...) Expand all Loading... |
3713 this, std::move(request), | 3711 this, std::move(request), |
3714 base::Bind(&RenderFrameHostImpl::OnMediaInterfaceFactoryConnectionError, | 3712 base::Bind(&RenderFrameHostImpl::OnMediaInterfaceFactoryConnectionError, |
3715 base::Unretained(this)))); | 3713 base::Unretained(this)))); |
3716 } | 3714 } |
3717 | 3715 |
3718 void RenderFrameHostImpl::OnMediaInterfaceFactoryConnectionError() { | 3716 void RenderFrameHostImpl::OnMediaInterfaceFactoryConnectionError() { |
3719 DCHECK(media_interface_proxy_); | 3717 DCHECK(media_interface_proxy_); |
3720 media_interface_proxy_.reset(); | 3718 media_interface_proxy_.reset(); |
3721 } | 3719 } |
3722 | 3720 |
| 3721 void RenderFrameHostImpl::BindWakeLockServiceRequest( |
| 3722 const service_manager::BindSourceInfo& source_info, |
| 3723 device::mojom::WakeLockServiceRequest request) { |
| 3724 device::mojom::WakeLockContext* wake_lock_service_context = |
| 3725 delegate_ ? delegate_->GetWakeLockServiceContext() : nullptr; |
| 3726 if (wake_lock_service_context) |
| 3727 wake_lock_service_context->GetWakeLock(std::move(request)); |
| 3728 } |
| 3729 |
3723 void RenderFrameHostImpl::GetInterface( | 3730 void RenderFrameHostImpl::GetInterface( |
3724 const std::string& interface_name, | 3731 const std::string& interface_name, |
3725 mojo::ScopedMessagePipeHandle interface_pipe) { | 3732 mojo::ScopedMessagePipeHandle interface_pipe) { |
3726 if (interface_registry_.get()) { | 3733 if (interface_registry_.get()) { |
3727 service_manager::BindSourceInfo source_info( | 3734 service_manager::BindSourceInfo source_info( |
3728 GetProcess()->GetChildIdentity(), service_manager::CapabilitySet()); | 3735 GetProcess()->GetChildIdentity(), service_manager::CapabilitySet()); |
3729 interface_registry_->BindInterface(source_info, interface_name, | 3736 interface_registry_->BindInterface(source_info, interface_name, |
3730 std::move(interface_pipe)); | 3737 std::move(interface_pipe)); |
3731 } | 3738 } |
3732 } | 3739 } |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3894 } | 3901 } |
3895 | 3902 |
3896 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( | 3903 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( |
3897 const std::string& interface_name, | 3904 const std::string& interface_name, |
3898 mojo::ScopedMessagePipeHandle pipe) { | 3905 mojo::ScopedMessagePipeHandle pipe) { |
3899 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); | 3906 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); |
3900 } | 3907 } |
3901 #endif | 3908 #endif |
3902 | 3909 |
3903 } // namespace content | 3910 } // namespace content |
OLD | NEW |