diff options
Diffstat (limited to 'content/renderer/render_frame_impl.cc')
-rw-r--r-- | content/renderer/render_frame_impl.cc | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index d7eaf80..d51a402 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -215,7 +215,9 @@ #if defined(ENABLE_PEPPER_CDMS) #include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h" +#include "content/renderer/media/cdm/render_cdm_factory.h" #elif defined(ENABLE_BROWSER_CDMS) +#include "content/renderer/media/cdm/render_cdm_factory.h" #include "content/renderer/media/cdm/renderer_cdm_manager.h" #endif @@ -225,8 +227,6 @@ #if defined(ENABLE_MOJO_CDM) #include "media/mojo/services/mojo_cdm_factory.h" // nogncheck -#else -#include "content/renderer/media/cdm/render_cdm_factory.h" #endif #if defined(ENABLE_MOJO_RENDERER) @@ -755,17 +755,13 @@ bool IsContentWithCertificateErrorsRelevantToUI( // // Note that HLS and MP4 detection are pre-redirect and path-based. It is // possible to load such a URL and find different content. -bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, - const GURL& url) { - if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource) - return media::IsUnifiedMediaPipelineEnabledForMse(); - +bool UseWebMediaPlayerImpl(const GURL& url) { // WMPI does not support HLS. if (media::MediaCodecUtil::IsHLSPath(url)) return false; // Don't use WMPI if the container likely contains a codec we can't decode in - // software and hardware decoders are not available. + // software and platform decoders are not available. if (base::EndsWith(url.path(), ".mp4", base::CompareCase::INSENSITIVE_ASCII) && !media::HasPlatformDecoderSupport()) { @@ -777,6 +773,24 @@ bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, } #endif // defined(OS_ANDROID) +#if defined(ENABLE_MOJO_CDM) +// Returns whether mojo CDM should be used at runtime. Note that even when mojo +// CDM is enabled at compile time (ENABLE_MOJO_CDM is defined), there are cases +// where we want to choose other CDM types. For example, on Android when we use +// WebMediaPlayerAndroid, we still want to use ProxyMediaKeys. In the future, +// when we experiment mojo CDM on desktop, we will choose between mojo CDM and +// pepper CDM at runtime. +// TODO(xhwang): Remove this when we use mojo CDM for all remote CDM cases by +// default. +bool UseMojoCdm() { +#if defined(OS_ANDROID) + return media::IsUnifiedMediaPipelineEnabled(); +#else + return true; +#endif +} +#endif // defined(ENABLE_MOJO_CDM) + } // namespace // static @@ -2383,7 +2397,6 @@ blink::WebPlugin* RenderFrameImpl::createPlugin( } blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( - blink::WebMediaPlayer::LoadType load_type, const blink::WebURL& url, WebMediaPlayerClient* client, WebMediaPlayerEncryptedMediaClient* encrypted_client, @@ -2430,7 +2443,7 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( initial_cdm, media_surface_manager_, media_session); #if defined(OS_ANDROID) - if (!UseWebMediaPlayerImpl(load_type, url)) + if (!UseWebMediaPlayerImpl(url)) return CreateAndroidWebMediaPlayer(client, encrypted_client, params); #endif // defined(OS_ANDROID) @@ -5902,26 +5915,25 @@ bool RenderFrameImpl::AreSecureCodecsSupported() { } media::CdmFactory* RenderFrameImpl::GetCdmFactory() { -#if defined(ENABLE_BROWSER_CDMS) - if (!cdm_manager_) - cdm_manager_ = new RendererCdmManager(this); -#endif // defined(ENABLE_BROWSER_CDMS) - - if (!cdm_factory_) { - DCHECK(frame_); + if (cdm_factory_) + return cdm_factory_.get(); #if defined(ENABLE_MOJO_CDM) + if (UseMojoCdm()) { cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); -#else - cdm_factory_.reset(new RenderCdmFactory( + return cdm_factory_.get(); + } +#endif // defined(ENABLE_MOJO_CDM) + #if defined(ENABLE_PEPPER_CDMS) - base::Bind(&PepperCdmWrapperImpl::Create, frame_) + DCHECK(frame_); + cdm_factory_.reset( + new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); #elif defined(ENABLE_BROWSER_CDMS) - cdm_manager_ -#endif - )); -#endif // defined(ENABLE_MOJO_CDM) - } + if (!cdm_manager_) + cdm_manager_ = new RendererCdmManager(this); + cdm_factory_.reset(new RenderCdmFactory(cdm_manager_)); +#endif // defined(ENABLE_PEPPER_CDMS) return cdm_factory_.get(); } |