summaryrefslogtreecommitdiffstats
path: root/webkit/renderer
diff options
context:
space:
mode:
authorqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 14:42:01 +0000
committerqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 14:42:01 +0000
commit1ccd050b2a2524fd92c280f01226ad031e9ba810 (patch)
treebf371fe86aed3d69e328faebdc2a0e4ed7efe138 /webkit/renderer
parent4c3d809e72a64db376c11b578a6f699c8098f55e (diff)
downloadchromium_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.cc11
-rw-r--r--webkit/renderer/media/crypto/key_systems.h5
-rw-r--r--webkit/renderer/media/crypto/key_systems_info.cc17
-rw-r--r--webkit/renderer/media/crypto/key_systems_info.h19
-rw-r--r--webkit/renderer/media/crypto/key_systems_unittest.cc18
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