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/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 | 175 |
176 #if defined(ENABLE_PEPPER_CDMS) | 176 #if defined(ENABLE_PEPPER_CDMS) |
177 #include "content/renderer/media/crypto/pepper_cdm_wrapper_impl.h" | 177 #include "content/renderer/media/crypto/pepper_cdm_wrapper_impl.h" |
178 #elif defined(ENABLE_BROWSER_CDMS) | 178 #elif defined(ENABLE_BROWSER_CDMS) |
179 #include "content/renderer/media/crypto/renderer_cdm_manager.h" | 179 #include "content/renderer/media/crypto/renderer_cdm_manager.h" |
180 #endif | 180 #endif |
181 | 181 |
182 #if defined(ENABLE_MOJO_MEDIA) | 182 #if defined(ENABLE_MOJO_MEDIA) |
183 #include "media/mojo/services/mojo_cdm_factory.h" | 183 #include "media/mojo/services/mojo_cdm_factory.h" |
184 #include "media/mojo/services/mojo_renderer_factory.h" | 184 #include "media/mojo/services/mojo_renderer_factory.h" |
| 185 #include "mojo/application/public/cpp/connect.h" |
185 #include "mojo/application/public/interfaces/shell.mojom.h" | 186 #include "mojo/application/public/interfaces/shell.mojom.h" |
186 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" | 187 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" |
187 #else | 188 #else |
188 #include "media/renderers/default_renderer_factory.h" | 189 #include "media/renderers/default_renderer_factory.h" |
189 #endif | 190 #endif |
190 | 191 |
191 #if defined(ENABLE_WEBVR) | 192 #if defined(ENABLE_WEBVR) |
192 #include "content/renderer/vr/vr_dispatcher.h" | 193 #include "content/renderer/vr/vr_dispatcher.h" |
193 #endif | 194 #endif |
194 | 195 |
(...skipping 1830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2025 base::Unretained(GetContentClient()->renderer()), | 2026 base::Unretained(GetContentClient()->renderer()), |
2026 static_cast<RenderFrame*>(this)), | 2027 static_cast<RenderFrame*>(this)), |
2027 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_), | 2028 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_), |
2028 media_log, render_thread->GetMediaThreadTaskRunner(), | 2029 media_log, render_thread->GetMediaThreadTaskRunner(), |
2029 render_thread->compositor_task_runner(), | 2030 render_thread->compositor_task_runner(), |
2030 base::Bind(&GetSharedMainThreadContext3D), GetMediaPermission(), | 2031 base::Bind(&GetSharedMainThreadContext3D), GetMediaPermission(), |
2031 initial_cdm); | 2032 initial_cdm); |
2032 | 2033 |
2033 #if defined(ENABLE_MOJO_MEDIA) | 2034 #if defined(ENABLE_MOJO_MEDIA) |
2034 scoped_ptr<media::RendererFactory> media_renderer_factory( | 2035 scoped_ptr<media::RendererFactory> media_renderer_factory( |
2035 new media::MojoRendererFactory(GetMediaServiceProvider())); | 2036 new media::MojoRendererFactory(GetMediaServiceFactory())); |
2036 #else | 2037 #else |
2037 scoped_ptr<media::RendererFactory> media_renderer_factory = | 2038 scoped_ptr<media::RendererFactory> media_renderer_factory = |
2038 GetContentClient()->renderer()->CreateMediaRendererFactory( | 2039 GetContentClient()->renderer()->CreateMediaRendererFactory( |
2039 this, render_thread->GetGpuFactories(), media_log); | 2040 this, render_thread->GetGpuFactories(), media_log); |
2040 | 2041 |
2041 if (!media_renderer_factory.get()) { | 2042 if (!media_renderer_factory.get()) { |
2042 media_renderer_factory.reset(new media::DefaultRendererFactory( | 2043 media_renderer_factory.reset(new media::DefaultRendererFactory( |
2043 media_log, render_thread->GetGpuFactories(), | 2044 media_log, render_thread->GetGpuFactories(), |
2044 *render_thread->GetAudioHardwareConfig())); | 2045 *render_thread->GetAudioHardwareConfig())); |
2045 } | 2046 } |
(...skipping 2933 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4979 | 4980 |
4980 #endif // defined(OS_ANDROID) | 4981 #endif // defined(OS_ANDROID) |
4981 | 4982 |
4982 media::MediaPermission* RenderFrameImpl::GetMediaPermission() { | 4983 media::MediaPermission* RenderFrameImpl::GetMediaPermission() { |
4983 if (!media_permission_dispatcher_) | 4984 if (!media_permission_dispatcher_) |
4984 media_permission_dispatcher_ = new MediaPermissionDispatcher(this); | 4985 media_permission_dispatcher_ = new MediaPermissionDispatcher(this); |
4985 return media_permission_dispatcher_; | 4986 return media_permission_dispatcher_; |
4986 } | 4987 } |
4987 | 4988 |
4988 #if defined(ENABLE_MOJO_MEDIA) | 4989 #if defined(ENABLE_MOJO_MEDIA) |
4989 mojo::ServiceProvider* RenderFrameImpl::GetMediaServiceProvider() { | 4990 media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() { |
4990 if (!media_service_provider_) { | 4991 if (!media_service_factory_) { |
4991 mojo::InterfacePtr<mojo::Shell> shell_ptr; | 4992 mojo::InterfacePtr<mojo::Shell> shell_ptr; |
4992 GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&shell_ptr)); | 4993 GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&shell_ptr)); |
| 4994 |
| 4995 mojo::ServiceProviderPtr service_provider; |
4993 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 4996 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
4994 request->url = mojo::String::From("mojo:media"); | 4997 request->url = mojo::String::From("mojo:media"); |
4995 shell_ptr->ConnectToApplication( | 4998 shell_ptr->ConnectToApplication(request.Pass(), GetProxy(&service_provider), |
4996 request.Pass(), GetProxy(&media_service_provider_), nullptr); | 4999 nullptr); |
4997 media_service_provider_.set_connection_error_handler( | 5000 |
4998 base::Bind(&RenderFrameImpl::OnMediaServiceProviderConnectionError, | 5001 mojo::ConnectToService(service_provider.get(), &media_service_factory_); |
| 5002 |
| 5003 media_service_factory_.set_connection_error_handler( |
| 5004 base::Bind(&RenderFrameImpl::OnMediaServiceFactoryConnectionError, |
4999 base::Unretained(this))); | 5005 base::Unretained(this))); |
5000 } | 5006 } |
5001 return media_service_provider_.get(); | 5007 |
| 5008 return media_service_factory_.get(); |
5002 } | 5009 } |
5003 | 5010 |
5004 void RenderFrameImpl::OnMediaServiceProviderConnectionError() { | 5011 void RenderFrameImpl::OnMediaServiceFactoryConnectionError() { |
5005 media_service_provider_.reset(); | 5012 // TODO(xhwang): Resetting |media_service_factory_| could cause access |
| 5013 // violation on the old |media_service_factory_| by outstanding |
| 5014 // media::CdmFactory or media::RendererFactory. Find a better way to handle |
| 5015 // this. |
| 5016 // media_service_factory_.reset(); |
5006 } | 5017 } |
5007 #endif | 5018 #endif |
5008 | 5019 |
5009 bool RenderFrameImpl::AreSecureCodecsSupported() { | 5020 bool RenderFrameImpl::AreSecureCodecsSupported() { |
5010 #if defined(OS_ANDROID) | 5021 #if defined(OS_ANDROID) |
5011 // Hardware-secure codecs are only supported if secure surfaces are enabled. | 5022 // Hardware-secure codecs are only supported if secure surfaces are enabled. |
5012 return render_view_->renderer_preferences_ | 5023 return render_view_->renderer_preferences_ |
5013 .use_video_overlay_for_embedded_encrypted_video; | 5024 .use_video_overlay_for_embedded_encrypted_video; |
5014 #else | 5025 #else |
5015 return false; | 5026 return false; |
5016 #endif // defined(OS_ANDROID) | 5027 #endif // defined(OS_ANDROID) |
5017 } | 5028 } |
5018 | 5029 |
5019 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { | 5030 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { |
5020 #if defined(ENABLE_BROWSER_CDMS) | 5031 #if defined(ENABLE_BROWSER_CDMS) |
5021 if (!cdm_manager_) | 5032 if (!cdm_manager_) |
5022 cdm_manager_ = new RendererCdmManager(this); | 5033 cdm_manager_ = new RendererCdmManager(this); |
5023 #endif // defined(ENABLE_BROWSER_CDMS) | 5034 #endif // defined(ENABLE_BROWSER_CDMS) |
5024 | 5035 |
5025 if (!cdm_factory_) { | 5036 if (!cdm_factory_) { |
5026 DCHECK(frame_); | 5037 DCHECK(frame_); |
5027 | 5038 |
5028 #if defined(ENABLE_MOJO_MEDIA) | 5039 #if defined(ENABLE_MOJO_MEDIA) |
5029 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaServiceProvider())); | 5040 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaServiceFactory())); |
5030 #else | 5041 #else |
5031 cdm_factory_.reset(new RenderCdmFactory( | 5042 cdm_factory_.reset(new RenderCdmFactory( |
5032 #if defined(ENABLE_PEPPER_CDMS) | 5043 #if defined(ENABLE_PEPPER_CDMS) |
5033 base::Bind(&PepperCdmWrapperImpl::Create, frame_) | 5044 base::Bind(&PepperCdmWrapperImpl::Create, frame_) |
5034 #elif defined(ENABLE_BROWSER_CDMS) | 5045 #elif defined(ENABLE_BROWSER_CDMS) |
5035 cdm_manager_ | 5046 cdm_manager_ |
5036 #endif | 5047 #endif |
5037 )); | 5048 )); |
5038 #endif // defined(ENABLE_MOJO_MEDIA) | 5049 #endif // defined(ENABLE_MOJO_MEDIA) |
5039 } | 5050 } |
5040 | 5051 |
5041 return cdm_factory_.get(); | 5052 return cdm_factory_.get(); |
5042 } | 5053 } |
5043 | 5054 |
5044 void RenderFrameImpl::RegisterMojoServices() { | 5055 void RenderFrameImpl::RegisterMojoServices() { |
5045 // Only main frame have ImageDownloader service. | 5056 // Only main frame have ImageDownloader service. |
5046 if (!frame_->parent()) { | 5057 if (!frame_->parent()) { |
5047 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>( | 5058 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>( |
5048 base::Bind(&ImageDownloaderImpl::CreateMojoService, | 5059 base::Bind(&ImageDownloaderImpl::CreateMojoService, |
5049 base::Unretained(this))); | 5060 base::Unretained(this))); |
5050 } | 5061 } |
5051 } | 5062 } |
5052 | 5063 |
5053 } // namespace content | 5064 } // namespace content |
OLD | NEW |