diff options
author | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-24 06:35:06 +0000 |
---|---|---|
committer | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-24 06:35:06 +0000 |
commit | d21ead47443e8eaa8ee7f33b56981ddade4d15e7 (patch) | |
tree | b7cb40d118d07807fde173a51b7fd8853d083973 /webkit | |
parent | e98c20771d6dc0c25ce0470c3ba21f4bbc4bb1df (diff) | |
download | chromium_src-d21ead47443e8eaa8ee7f33b56981ddade4d15e7.zip chromium_src-d21ead47443e8eaa8ee7f33b56981ddade4d15e7.tar.gz chromium_src-d21ead47443e8eaa8ee7f33b56981ddade4d15e7.tar.bz2 |
Allow suppressed EME canPlayType() responses to be overridden with flag.
Adds --override-encrypted-media-canplaytype and the corresponding flag.
BUG=252967
TBR=jochen@chromium.org
Review URL: https://chromiumcodereview.appspot.com/17569003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@208158 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/renderer/media/crypto/key_systems.cc | 5 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_info.cc | 33 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_info.h | 3 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_unittest.cc | 11 |
4 files changed, 44 insertions, 8 deletions
diff --git a/webkit/renderer/media/crypto/key_systems.cc b/webkit/renderer/media/crypto/key_systems.cc index 6ece643..2d056b3 100644 --- a/webkit/renderer/media/crypto/key_systems.cc +++ b/webkit/renderer/media/crypto/key_systems.cc @@ -112,6 +112,11 @@ bool KeySystems::IsSupportedKeySystemWithMediaMimeType( const std::string& mime_type, const std::vector<std::string>& codecs, const std::string& key_system) { + // This method is only used by the canPlaytType() path (not the EME methods), + // so we check for suppressed key_systems here. + if(IsCanPlayTypeSuppressed(key_system)) + return false; + if (codecs.empty()) return IsSupportedKeySystemWithContainerAndCodec( mime_type, std::string(), key_system); diff --git a/webkit/renderer/media/crypto/key_systems_info.cc b/webkit/renderer/media/crypto/key_systems_info.cc index 9810c34..bb04667 100644 --- a/webkit/renderer/media/crypto/key_systems_info.cc +++ b/webkit/renderer/media/crypto/key_systems_info.cc @@ -6,6 +6,8 @@ #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. +// The following must be after widevine_cdm_version.h. + #if defined(WIDEVINE_CDM_AVAILABLE) && \ defined(OS_LINUX) && !defined(OS_CHROMEOS) #include <gnu/libc-version.h> @@ -13,6 +15,11 @@ #include "base/version.h" #endif +#if defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) +#include "base/command_line.h" +#include "media/base/media_switches.h" +#endif + namespace webkit_media { static const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; @@ -23,7 +30,6 @@ static const char kExternalClearKeyKeySystem[] = #if defined(WIDEVINE_CDM_AVAILABLE) // TODO(ddorwin): Automatically support parent systems: http://crbug.com/164303. static const char kWidevineBaseKeySystem[] = "com.widevine"; -#endif // defined(WIDEVINE_CDM_AVAILABLE) #if defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE) // The supported codecs depend on what the CDM provides. @@ -45,6 +51,12 @@ static const char kWidevineAudioMp4Codecs[] = #endif #endif // defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE) +static inline bool IsWidevine(const std::string& key_system) { + return key_system == kWidevineKeySystem || + key_system == kWidevineBaseKeySystem; +} +#endif // defined(WIDEVINE_CDM_AVAILABLE) + const MediaFormatAndKeySystem kSupportedFormatKeySystemCombinations[] = { // Clear Key. { "video/webm", "vorbis,vp8,vp8.0", kClearKeyKeySystem }, @@ -64,10 +76,6 @@ const MediaFormatAndKeySystem kSupportedFormatKeySystemCombinations[] = { #if defined(WIDEVINE_CDM_AVAILABLE) // Widevine. - // See http://crbug.com/237627. -#if defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) - { "", "", kWidevineKeySystem }, -#else { "video/webm", "vorbis,vp8,vp8.0", kWidevineKeySystem }, { "audio/webm", "vorbis", kWidevineKeySystem }, { "video/webm", "vorbis,vp8,vp8.0", kWidevineBaseKeySystem }, @@ -80,7 +88,6 @@ const MediaFormatAndKeySystem kSupportedFormatKeySystemCombinations[] = { { "audio/mp4", kWidevineAudioMp4Codecs, kWidevineBaseKeySystem }, #endif // defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE) #endif // defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) -#endif // defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) #endif // WIDEVINE_CDM_AVAILABLE }; @@ -117,8 +124,7 @@ const int kNumKeySystemToUUIDMapping = bool IsSystemCompatible(const std::string& key_system) { #if defined(WIDEVINE_CDM_AVAILABLE) && \ defined(OS_LINUX) && !defined(OS_CHROMEOS) - if (key_system == kWidevineKeySystem || - key_system == kWidevineBaseKeySystem) { + if (IsWidevine(key_system)) { Version glibc_version(gnu_get_libc_version()); DCHECK(glibc_version.IsValid()); return !glibc_version.IsOlderThan(WIDEVINE_CDM_MIN_GLIBC_VERSION); @@ -127,6 +133,17 @@ bool IsSystemCompatible(const std::string& key_system) { return true; } +bool IsCanPlayTypeSuppressed(const std::string& key_system) { +#if defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) + // See http://crbug.com/237627. + if (IsWidevine(key_system) && + !CommandLine::ForCurrentProcess()->HasSwitch( + switches::kOverrideEncryptedMediaCanPlayType)) + return true; +#endif + return false; +} + std::string KeySystemNameForUMAGeneric(const std::string& key_system) { if (key_system == kClearKeyKeySystem) return "ClearKey"; diff --git a/webkit/renderer/media/crypto/key_systems_info.h b/webkit/renderer/media/crypto/key_systems_info.h index e80e0f6..0c499db 100644 --- a/webkit/renderer/media/crypto/key_systems_info.h +++ b/webkit/renderer/media/crypto/key_systems_info.h @@ -55,6 +55,9 @@ extern const int kNumKeySystemToUUIDMapping; // Returns whether |key_system| is compatible with the user's system. bool IsSystemCompatible(const std::string& key_system); +// Returns true if canPlayType should return an empty string for |key_system|. +bool IsCanPlayTypeSuppressed(const std::string& key_system); + // Returns the name that UMA will use for the given |key_system|. // This function can be called frequently. Hence this function should be // implemented not to impact performance. diff --git a/webkit/renderer/media/crypto/key_systems_unittest.cc b/webkit/renderer/media/crypto/key_systems_unittest.cc index b8cb1d7..98cc950 100644 --- a/webkit/renderer/media/crypto/key_systems_unittest.cc +++ b/webkit/renderer/media/crypto/key_systems_unittest.cc @@ -540,7 +540,13 @@ TEST_F(KeySystemsTest, // TEST_F(KeySystemsTest, Widevine_Basic) { +#if defined(WIDEVINE_CDM_AVAILABLE) && \ + defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) + EXPECT_TRUE(IsSupportedKeySystem(WebString::fromUTF8(kWidevineAlpha))); +#else EXPECT_WV(IsSupportedKeySystem(WebString::fromUTF8(kWidevineAlpha))); +#endif + EXPECT_WV(IsSupportedKeySystemWithMediaMimeType( "video/webm", no_codecs(), kWidevineAlpha)); @@ -571,7 +577,12 @@ TEST_F(KeySystemsTest, Widevine_Basic) { TEST_F(KeySystemsTest, Widevine_Parent) { const char* const kWidevineParent = kWidevine; +#if defined(WIDEVINE_CDM_AVAILABLE) && \ + defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE) + EXPECT_TRUE(IsSupportedKeySystem(WebString::fromUTF8(kWidevineParent))); +#else EXPECT_WV(IsSupportedKeySystem(WebString::fromUTF8(kWidevineParent))); +#endif EXPECT_WV(IsSupportedKeySystemWithMediaMimeType( "video/webm", no_codecs(), kWidevineParent)); |