From 1ccd050b2a2524fd92c280f01226ad031e9ba810 Mon Sep 17 00:00:00 2001 From: "qinmin@chromium.org" Date: Fri, 21 Jun 2013 14:42:01 +0000 Subject: Add a function to convert key system into UUID BUG=163552 Review URL: https://chromiumcodereview.appspot.com/17101027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207815 0039d316-1c4b-4281-b951-d872f2087c98 --- webkit/renderer/media/crypto/key_systems.cc | 11 +++++++++++ webkit/renderer/media/crypto/key_systems.h | 5 +++++ webkit/renderer/media/crypto/key_systems_info.cc | 17 +++++++++++++++-- webkit/renderer/media/crypto/key_systems_info.h | 19 +++++++++++++++++-- webkit/renderer/media/crypto/key_systems_unittest.cc | 18 ++++++++++++++++++ 5 files changed, 66 insertions(+), 4 deletions(-) (limited to 'webkit/renderer') diff --git a/webkit/renderer/media/crypto/key_systems.cc b/webkit/renderer/media/crypto/key_systems.cc index 161ec88..6ece643 100644 --- a/webkit/renderer/media/crypto/key_systems.cc +++ b/webkit/renderer/media/crypto/key_systems.cc @@ -160,4 +160,15 @@ std::string GetPepperType(const std::string& key_system) { } #endif // defined(ENABLE_PEPPER_CDMS) +#if defined(OS_ANDROID) +std::vector GetUUID(const std::string& key_system) { + for (int i = 0; i < kNumKeySystemToUUIDMapping; ++i) { + if (kKeySystemToUUIDMapping[i].key_system == key_system) + return std::vector(kKeySystemToUUIDMapping[i].uuid, + kKeySystemToUUIDMapping[i].uuid + 16); + } + return std::vector(); +} +#endif // defined(OS_ANDROID) + } // namespace webkit_media diff --git a/webkit/renderer/media/crypto/key_systems.h b/webkit/renderer/media/crypto/key_systems.h index 1332bad..a2e439f 100644 --- a/webkit/renderer/media/crypto/key_systems.h +++ b/webkit/renderer/media/crypto/key_systems.h @@ -40,6 +40,11 @@ bool CanUseAesDecryptor(const std::string& key_system); std::string GetPepperType(const std::string& key_system); #endif +#if defined(OS_ANDROID) +// Convert |key_system| to 16-byte Android UUID. +std::vector GetUUID(const std::string& key_system); +#endif + } // namespace webkit_media #endif // WEBKIT_RENDERER_MEDIA_CRYPTO_KEY_SYSTEMS_H_ diff --git a/webkit/renderer/media/crypto/key_systems_info.cc b/webkit/renderer/media/crypto/key_systems_info.cc index 010ed23..9810c34 100644 --- a/webkit/renderer/media/crypto/key_systems_info.cc +++ b/webkit/renderer/media/crypto/key_systems_info.cc @@ -4,8 +4,6 @@ #include "webkit/renderer/media/crypto/key_systems_info.h" -#include "base/basictypes.h" - #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. #if defined(WIDEVINE_CDM_AVAILABLE) && \ @@ -101,6 +99,21 @@ 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 IsSystemCompatible(const std::string& key_system) { #if defined(WIDEVINE_CDM_AVAILABLE) && \ defined(OS_LINUX) && !defined(OS_CHROMEOS) diff --git a/webkit/renderer/media/crypto/key_systems_info.h b/webkit/renderer/media/crypto/key_systems_info.h index 924be72..e80e0f6 100644 --- a/webkit/renderer/media/crypto/key_systems_info.h +++ b/webkit/renderer/media/crypto/key_systems_info.h @@ -7,6 +7,8 @@ #include +#include "base/basictypes.h" + namespace webkit_media { struct MediaFormatAndKeySystem { @@ -20,7 +22,14 @@ struct KeySystemPepperTypePair { const char* key_system; const char* type; }; -#endif +#endif // defined(ENABLE_PEPPER_CDMS) + +#if defined(OS_ANDROID) +struct KeySystemUUIDPair { + const char* key_system; + const uint8 uuid[16]; +}; +#endif // defined(OS_ANDROID) // Specifies the container and codec combinations supported by individual // key systems. Each line is a container-codecs combination and the key system @@ -35,7 +44,13 @@ extern const int kNumSupportedFormatKeySystemCombinations; // There should be one entry for each key system. extern const KeySystemPepperTypePair kKeySystemToPepperTypeMapping[]; extern const int kNumKeySystemToPepperTypeMapping; -#endif +#endif // defined(ENABLE_PEPPER_CDMS) + +#if defined(OS_ANDROID) +// Mapping from key system to UUID, one entry per key system. +extern const KeySystemUUIDPair kKeySystemToUUIDMapping[]; +extern const int kNumKeySystemToUUIDMapping; +#endif // defined(OS_ANDROID) // Returns whether |key_system| is compatible with the user's system. bool IsSystemCompatible(const std::string& key_system); diff --git a/webkit/renderer/media/crypto/key_systems_unittest.cc b/webkit/renderer/media/crypto/key_systems_unittest.cc index efd318d..b8cb1d7 100644 --- a/webkit/renderer/media/crypto/key_systems_unittest.cc +++ b/webkit/renderer/media/crypto/key_systems_unittest.cc @@ -753,4 +753,22 @@ TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_Widevine_MP4) { "audio/mp4", vorbis_codec(), kWidevineAlpha)); } +#if defined(OS_ANDROID) +TEST_F(KeySystemsTest, GetUUID_Widevine) { + std::vector uuid = GetUUID(kWidevineAlpha); +#if defined(WIDEVINE_CDM_AVAILABLE) + EXPECT_EQ(16u, uuid.size()); + EXPECT_EQ(0xED, uuid[15]); +#else + EXPECT_TRUE(uuid.empty()); +#endif +} + +TEST_F(KeySystemsTest, GetUUID_Unrecognized) { + EXPECT_TRUE(GetUUID(kWidevine).empty()); + EXPECT_TRUE(GetUUID(kClearKey).empty()); + EXPECT_TRUE(GetUUID("").empty()); +} +#endif // defined(OS_ANDROID) + } // namespace webkit_media -- cgit v1.1