Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1818)

Unified Diff: content/renderer/media/crypto/key_systems_info.cc

Issue 23464005: Explicitly register each key system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Clear Key on Android Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « content/renderer/media/crypto/key_systems_info.h ('k') | content/renderer/media/crypto/key_systems_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698