summaryrefslogtreecommitdiffstats
path: root/content/renderer/render_frame_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/renderer/render_frame_impl.cc')
-rw-r--r--content/renderer/render_frame_impl.cc62
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();
}