Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index a41cdb260b8e4372543204bdd996cae5d36ee182..5c6b3aa77dbf49fcac774ff2773db90487d463d8 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -214,8 +214,10 @@ |
#endif |
#if defined(ENABLE_PEPPER_CDMS) |
+#include "content/renderer/media/cdm/render_cdm_factory.h" |
#include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.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) |
@@ -760,17 +760,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()) { |
@@ -782,6 +778,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 |
@@ -2382,7 +2396,6 @@ blink::WebPlugin* RenderFrameImpl::createPlugin( |
} |
blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
- blink::WebMediaPlayer::LoadType load_type, |
const blink::WebURL& url, |
WebMediaPlayerClient* client, |
WebMediaPlayerEncryptedMediaClient* encrypted_client, |
@@ -2429,7 +2442,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) |
@@ -5904,26 +5917,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(); |
} |