diff options
author | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 14:42:01 +0000 |
---|---|---|
committer | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 14:42:01 +0000 |
commit | 1ccd050b2a2524fd92c280f01226ad031e9ba810 (patch) | |
tree | bf371fe86aed3d69e328faebdc2a0e4ed7efe138 /webkit/renderer | |
parent | 4c3d809e72a64db376c11b578a6f699c8098f55e (diff) | |
download | chromium_src-1ccd050b2a2524fd92c280f01226ad031e9ba810.zip chromium_src-1ccd050b2a2524fd92c280f01226ad031e9ba810.tar.gz chromium_src-1ccd050b2a2524fd92c280f01226ad031e9ba810.tar.bz2 |
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
Diffstat (limited to 'webkit/renderer')
-rw-r--r-- | webkit/renderer/media/crypto/key_systems.cc | 11 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems.h | 5 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_info.cc | 17 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_info.h | 19 | ||||
-rw-r--r-- | webkit/renderer/media/crypto/key_systems_unittest.cc | 18 |
5 files changed, 66 insertions, 4 deletions
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<uint8> GetUUID(const std::string& key_system) { + for (int i = 0; i < kNumKeySystemToUUIDMapping; ++i) { + if (kKeySystemToUUIDMapping[i].key_system == key_system) + return std::vector<uint8>(kKeySystemToUUIDMapping[i].uuid, + kKeySystemToUUIDMapping[i].uuid + 16); + } + return std::vector<uint8>(); +} +#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<uint8> 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 <string> +#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<uint8> 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 |