Index: chrome/browser/media/encrypted_media_browsertest.cc |
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc |
index 1998c93f9154aae7db0eea564dcda065c4409781..6f52d2be7a6472c4e436e70effa40176827c4e34 100644 |
--- a/chrome/browser/media/encrypted_media_browsertest.cc |
+++ b/chrome/browser/media/encrypted_media_browsertest.cc |
@@ -33,8 +33,11 @@ const char kClearKeyCdmPluginMimeType[] = "application/x-ppapi-clearkey-cdm"; |
// Available key systems. |
const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; |
-const char kExternalClearKeyKeySystem[] = |
- "org.chromium.externalclearkey"; |
+const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; |
+const char kExternalClearKeyDecryptOnlyKeySystem[] = |
+ "org.chromium.externalclearkey.decryptonly"; |
+const char kExternalClearKeyInitializeFailKeySystem[] = |
+ "org.chromium.externalclearkey.initializefail"; |
// Supported media types. |
const char kWebMAudioOnly[] = "audio/webm; codecs=\"vorbis\""; |
@@ -66,18 +69,25 @@ static bool IsMSESupported() { |
return true; |
} |
+static bool IsParentKeySystemOf(const std::string& parent_key_system, |
+ const std::string& key_system) { |
+ std::string prefix = parent_key_system + '.'; |
+ return key_system.substr(0, prefix.size()) == prefix; |
+} |
+ |
// Base class for encrypted media tests. |
class EncryptedMediaTestBase : public MediaBrowserTest { |
public: |
EncryptedMediaTestBase() : is_pepper_cdm_registered_(false) {} |
- bool IsExternalClearKey(const char* key_system) { |
- return (strcmp(key_system, kExternalClearKeyKeySystem) == 0); |
+ bool IsExternalClearKey(const std::string& key_system) { |
+ return key_system == kExternalClearKeyKeySystem || |
+ IsParentKeySystemOf(kExternalClearKeyKeySystem, key_system); |
} |
#if defined(WIDEVINE_CDM_AVAILABLE) |
- bool IsWidevine(const char* key_system) { |
- return (strcmp(key_system, kWidevineKeySystem) == 0); |
+ bool IsWidevine(const std::string& key_system) { |
+ return key_system == kWidevineKeySystem; |
} |
#endif // defined(WIDEVINE_CDM_AVAILABLE) |
@@ -148,13 +158,11 @@ class EncryptedMediaTestBase : public MediaBrowserTest { |
CommandLine* command_line) { |
#if defined(ENABLE_PEPPER_CDMS) |
if (IsExternalClearKey(key_system)) { |
- RegisterPepperCdm(command_line, kClearKeyCdmAdapterFileName, |
- kExternalClearKeyKeySystem); |
+ RegisterPepperCdm(command_line, kClearKeyCdmAdapterFileName, key_system); |
} |
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT) |
else if (IsWidevine(key_system)) { |
- RegisterPepperCdm(command_line, kWidevineCdmAdapterFileName, |
- kWidevineKeySystem); |
+ RegisterPepperCdm(command_line, kWidevineCdmAdapterFileName, key_system); |
} |
#endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT) |
#endif // defined(ENABLE_PEPPER_CDMS) |
@@ -187,10 +195,10 @@ class EncryptedMediaTestBase : public MediaBrowserTest { |
// Adapted from key_systems.cc. |
std::string GetPepperType(const std::string& key_system) { |
- if (key_system == kExternalClearKeyKeySystem) |
+ if (IsExternalClearKey(key_system)) |
return kClearKeyCdmPluginMimeType; |
#if defined(WIDEVINE_CDM_AVAILABLE) |
- if (key_system == kWidevineKeySystem) |
+ if (IsWidevine(key_system)) |
return kWidevineCdmPluginMimeType; |
#endif // WIDEVINE_CDM_AVAILABLE |
@@ -203,7 +211,8 @@ class EncryptedMediaTestBase : public MediaBrowserTest { |
}; |
#if defined(ENABLE_PEPPER_CDMS) |
-// Tests encrypted media playback using ExternalClearKey key system. |
+// Tests encrypted media playback using ExternalClearKey key system in |
+// decrypt-and-decode mode. |
class ECKEncryptedMediaTest : public EncryptedMediaTestBase { |
protected: |
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
@@ -300,6 +309,9 @@ INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, EncryptedMediaTest, |
Combine(Values(kExternalClearKeyKeySystem), Values(SRC))); |
INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, EncryptedMediaTest, |
Combine(Values(kExternalClearKeyKeySystem), Values(MSE))); |
+// To reduce test time, only run ExternalClearKeyDecryptOnly with MSE. |
+INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly, EncryptedMediaTest, |
+ Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), Values(MSE))); |
#endif // defined(ENABLE_PEPPER_CDMS) |
#if defined(WIDEVINE_CDM_AVAILABLE) |
@@ -381,7 +393,7 @@ IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, |
RunEncryptedMediaTest("encrypted_media_player.html", |
"bear-a-enc_a.webm", |
kWebMAudioOnly, |
- "org.chromium.externalclearkey.initializefail", |
+ kExternalClearKeyInitializeFailKeySystem, |
SRC, |
kEmeKeyError); |
} |