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 |