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