| Index: content/renderer/media/crypto/key_systems_info.cc
|
| diff --git a/content/renderer/media/crypto/key_systems_info.cc b/content/renderer/media/crypto/key_systems_info.cc
|
| index 006e133ef3dcd927577ad27754ed686985dc6b08..55878b35fe7aa241ef8b7ec39ec0c1fe8c07d29e 100644
|
| --- a/content/renderer/media/crypto/key_systems_info.cc
|
| +++ b/content/renderer/media/crypto/key_systems_info.cc
|
| @@ -5,6 +5,7 @@
|
| #include "content/renderer/media/crypto/key_systems_info.h"
|
|
|
| #include "base/logging.h"
|
| +#include "content/renderer/media/crypto/key_systems.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
|
|
| #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
|
| @@ -30,11 +31,13 @@ static const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey";
|
| #if defined(ENABLE_PEPPER_CDMS)
|
| static const char kExternalClearKeyKeySystem[] =
|
| "org.chromium.externalclearkey";
|
| -#endif // defined(ENABLE_PEPPER_CDMS)
|
| +#elif defined(OS_ANDROID)
|
| +static const uint8 kEmptyUuid[16] =
|
| + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
| + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
|
| +#endif
|
|
|
| #if defined(WIDEVINE_CDM_AVAILABLE)
|
| -// TODO(ddorwin): Automatically support parent systems: http://crbug.com/164303.
|
| -static const char kWidevineBaseKeySystem[] = "com.widevine";
|
|
|
| #if defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE)
|
| // The supported codecs depend on what the CDM provides.
|
| @@ -56,108 +59,87 @@ 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;
|
| +static void RegisterWidevine() {
|
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| + Version glibc_version(gnu_get_libc_version());
|
| + DCHECK(glibc_version.IsValid());
|
| + if (glibc_version.IsOlderThan(WIDEVINE_CDM_MIN_GLIBC_VERSION))
|
| + return;
|
| +#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| +
|
| + AddConcreteSupportedKeySystem(
|
| + kWidevineKeySystem,
|
| + false,
|
| +#if defined(ENABLE_PEPPER_CDMS)
|
| + kWidevineCdmPluginMimeType,
|
| +#elif defined(OS_ANDROID)
|
| + { 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE,
|
| + 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED },
|
| +#endif // defined(ENABLE_PEPPER_CDMS)
|
| + "com.widevine");
|
| + AddSupportedType(kWidevineKeySystem, "video/webm", "vorbis,vp8,vp8.0");
|
| + AddSupportedType(kWidevineKeySystem, "audio/webm", "vorbis");
|
| +#if defined(USE_PROPRIETARY_CODECS) && \
|
| + defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE)
|
| + AddSupportedType(kWidevineKeySystem, "video/mp4", kWidevineVideoMp4Codecs);
|
| + AddSupportedType(kWidevineKeySystem, "audio/mp4", kWidevineAudioMp4Codecs);
|
| +#endif // defined(USE_PROPRIETARY_CODECS) &&
|
| + // defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE)
|
| }
|
| -#endif // defined(WIDEVINE_CDM_AVAILABLE)
|
| +#endif // WIDEVINE_CDM_AVAILABLE
|
|
|
| -const MediaFormatAndKeySystem kSupportedFormatKeySystemCombinations[] = {
|
| +
|
| +static void RegisterClearKey() {
|
| // Clear Key.
|
| - { "video/webm", "vorbis,vp8,vp8.0", kClearKeyKeySystem },
|
| - { "audio/webm", "vorbis", kClearKeyKeySystem },
|
| + AddConcreteSupportedKeySystem(
|
| + kClearKeyKeySystem,
|
| + true,
|
| +#if defined(ENABLE_PEPPER_CDMS)
|
| + std::string(),
|
| +#elif defined(OS_ANDROID)
|
| + kEmptyUuid,
|
| +#endif // defined(ENABLE_PEPPER_CDMS)
|
| + std::string());
|
| + AddSupportedType(kClearKeyKeySystem, "video/webm", "vorbis,vp8,vp8.0");
|
| + AddSupportedType(kClearKeyKeySystem, "audio/webm", "vorbis");
|
| #if defined(USE_PROPRIETARY_CODECS)
|
| - { "video/mp4", "avc1,mp4a", kClearKeyKeySystem },
|
| - { "audio/mp4", "mp4a", kClearKeyKeySystem },
|
| + AddSupportedType(kClearKeyKeySystem, "video/mp4", "avc1,mp4a");
|
| + AddSupportedType(kClearKeyKeySystem, "audio/mp4", "mp4a");
|
| #endif // defined(USE_PROPRIETARY_CODECS)
|
| +}
|
|
|
| #if defined(ENABLE_PEPPER_CDMS)
|
| +static void RegisterExternalClearKey() {
|
| // External Clear Key (used for testing).
|
| - { "video/webm", "vorbis,vp8,vp8.0", kExternalClearKeyKeySystem },
|
| - { "audio/webm", "vorbis", kExternalClearKeyKeySystem },
|
| + AddConcreteSupportedKeySystem(kExternalClearKeyKeySystem, false,
|
| + "application/x-ppapi-clearkey-cdm",
|
| + std::string());
|
| + AddSupportedType(kExternalClearKeyKeySystem,
|
| + "video/webm", "vorbis,vp8,vp8.0");
|
| + AddSupportedType(kExternalClearKeyKeySystem, "audio/webm", "vorbis");
|
| #if defined(USE_PROPRIETARY_CODECS)
|
| - { "video/mp4", "avc1,mp4a", kExternalClearKeyKeySystem },
|
| - { "audio/mp4", "mp4a", kExternalClearKeyKeySystem },
|
| + AddSupportedType(kExternalClearKeyKeySystem, "video/mp4", "avc1,mp4a");
|
| + AddSupportedType(kExternalClearKeyKeySystem, "audio/mp4", "mp4a");
|
| #endif // defined(USE_PROPRIETARY_CODECS)
|
| +}
|
| #endif // defined(ENABLE_PEPPER_CDMS)
|
|
|
| -#if defined(WIDEVINE_CDM_AVAILABLE)
|
| - // Widevine.
|
| - { "video/webm", "vorbis,vp8,vp8.0", kWidevineKeySystem },
|
| - { "audio/webm", "vorbis", kWidevineKeySystem },
|
| -#if defined(USE_PROPRIETARY_CODECS)
|
| -#if defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE)
|
| - { "video/mp4", kWidevineVideoMp4Codecs, kWidevineKeySystem },
|
| - { "audio/mp4", kWidevineAudioMp4Codecs, kWidevineKeySystem },
|
| -#endif // defined(WIDEVINE_CDM_CENC_SUPPORT_AVAILABLE)
|
| -#endif // defined(USE_PROPRIETARY_CODECS)
|
| -#endif // WIDEVINE_CDM_AVAILABLE
|
| -};
|
| -
|
| -const int kNumSupportedFormatKeySystemCombinations =
|
| - arraysize(kSupportedFormatKeySystemCombinations);
|
| +void RegisterKeySystems() {
|
| + RegisterClearKey();
|
|
|
| #if defined(ENABLE_PEPPER_CDMS)
|
| -const KeySystemPepperTypePair kKeySystemToPepperTypeMapping[] = {
|
| - { kExternalClearKeyKeySystem, "application/x-ppapi-clearkey-cdm"},
|
| -#if defined(WIDEVINE_CDM_AVAILABLE)
|
| - { kWidevineKeySystem, kWidevineCdmPluginMimeType}
|
| -#endif // WIDEVINE_CDM_AVAILABLE
|
| -};
|
| -
|
| -const int kNumKeySystemToPepperTypeMapping =
|
| - arraysize(kKeySystemToPepperTypeMapping);
|
| -#endif // defined(ENABLE_PEPPER_CDMS)
|
| -
|
| -#if defined(OS_ANDROID)
|
| -// TODO(qinmin): add UUIDs for other key systems.
|
| -const KeySystemUUIDPair kKeySystemToUUIDMapping[] = {
|
| -#if defined(WIDEVINE_CDM_AVAILABLE)
|
| - { kWidevineKeySystem, { 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE,
|
| - 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED }
|
| - }
|
| -#endif // defined(WIDEVINE_CDM_AVAILABLE)
|
| -};
|
| -
|
| -// arraySize() does not work if the array is empty, so use ARRAYSIZE_UNSAFE().
|
| -const int kNumKeySystemToUUIDMapping =
|
| - ARRAYSIZE_UNSAFE(kKeySystemToUUIDMapping);
|
| -#endif // defined(OS_ANDROID)
|
| -
|
| -bool IsOSIncompatible(const std::string& concrete_key_system) {
|
| - DCHECK(IsConcreteKeySystem(concrete_key_system))
|
| - << concrete_key_system << " is not a concrete system";
|
| -#if defined(WIDEVINE_CDM_AVAILABLE) && \
|
| - defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| - if (IsWidevine(concrete_key_system)) {
|
| - Version glibc_version(gnu_get_libc_version());
|
| - DCHECK(glibc_version.IsValid());
|
| - return glibc_version.IsOlderThan(WIDEVINE_CDM_MIN_GLIBC_VERSION);
|
| - }
|
| + RegisterExternalClearKey();
|
| #endif
|
| - return false;
|
| -}
|
|
|
| -std::string EnsureConcreteKeySystem(const std::string& key_system) {
|
| #if defined(WIDEVINE_CDM_AVAILABLE)
|
| - if (key_system == kWidevineKeySystem || key_system == kWidevineBaseKeySystem)
|
| - return kWidevineKeySystem;
|
| -#endif // WIDEVINE_CDM_AVAILABLE
|
| - // No parent names for Clear Key.
|
| - if (key_system == kClearKeyKeySystem)
|
| - return kClearKeyKeySystem;
|
| -#if defined(ENABLE_PEPPER_CDMS)
|
| - // No parent names for External Clear Key.
|
| - if (key_system == kExternalClearKeyKeySystem)
|
| - return kExternalClearKeyKeySystem;
|
| -#endif // defined(ENABLE_PEPPER_CDMS)
|
| - return std::string();
|
| + RegisterWidevine();
|
| +#endif
|
| }
|
|
|
| bool IsCanPlayTypeSuppressed(const std::string& key_system) {
|
| #if defined(DISABLE_WIDEVINE_CDM_CANPLAYTYPE)
|
| // See http://crbug.com/237627.
|
| - if (IsWidevine(key_system) &&
|
| + if (key_system == kWidevineKeySystem &&
|
| !CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kOverrideEncryptedMediaCanPlayType))
|
| return true;
|
| @@ -175,8 +157,4 @@ std::string KeySystemNameForUMAInternal(const WebKit::WebString& key_system) {
|
| return "Unknown";
|
| }
|
|
|
| -bool CanUseAesDecryptorInternal(const std::string& key_system) {
|
| - return key_system == kClearKeyKeySystem;
|
| -}
|
| -
|
| } // namespace content
|
|
|