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

Unified Diff: chrome/browser/media/encrypted_media_browsertest.cc

Issue 182113005: Update EME browser tests to include EME WD (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 6 years, 9 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
« no previous file with comments | « no previous file | chrome/test/data/media/encrypted_media_player.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ef44f3976d9d30b5084e4586a18018ca156b7158..e82276ec5629498d8245d60d1001524e8d94a6dd 100644
--- a/chrome/browser/media/encrypted_media_browsertest.cc
+++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -35,7 +35,8 @@ const char kClearKeyCdmPluginMimeType[] = "application/x-ppapi-clearkey-cdm";
#endif // defined(ENABLE_PEPPER_CDMS)
// Available key systems.
-const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey";
+const char kClearKeyKeySystem[] = "org.w3.clearkey";
+const char kPrefixedClearKeyKeySystem[] = "webkit-org.w3.clearkey";
const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey";
const char kExternalClearKeyDecryptOnlyKeySystem[] =
"org.chromium.externalclearkey.decryptonly";
@@ -71,6 +72,12 @@ enum SrcType {
MSE
};
+// Whether to use prefixed or unprefixed EME.
+enum EmeVersion {
+ PREFIXED,
+ UNPREFIXED
+};
+
// MSE is available on all desktop platforms and on Android 4.1 and later.
static bool IsMSESupported() {
#if defined(OS_ANDROID)
@@ -125,6 +132,7 @@ class EncryptedMediaTestBase : public MediaBrowserTest {
const std::string& media_type,
const std::string& key_system,
SrcType src_type,
+ EmeVersion eme_version,
const std::string& session_to_load,
bool force_invalid_response,
const std::string& expected_title) {
@@ -138,6 +146,8 @@ class EncryptedMediaTestBase : public MediaBrowserTest {
query_params.push_back(std::make_pair("keySystem", key_system));
if (src_type == MSE)
query_params.push_back(std::make_pair("useMSE", "1"));
+ if (eme_version == PREFIXED)
+ query_params.push_back(std::make_pair("usePrefixedEME", "1"));
if (force_invalid_response)
query_params.push_back(std::make_pair("forceInvalidResponse", "1"));
if (!session_to_load.empty())
@@ -149,13 +159,20 @@ class EncryptedMediaTestBase : public MediaBrowserTest {
void RunSimpleEncryptedMediaTest(const std::string& media_file,
const std::string& media_type,
const std::string& key_system,
- SrcType src_type) {
+ SrcType src_type,
+ EmeVersion eme_version) {
std::string expected_title = kEnded;
if (!IsPlayBackPossible(key_system))
expected_title = kEmeKeyError;
- RunEncryptedMediaTest("encrypted_media_player.html", media_file, media_type,
- key_system, src_type, kNoSessionToLoad, false,
+ RunEncryptedMediaTest("encrypted_media_player.html",
+ media_file,
+ media_type,
+ key_system,
+ src_type,
+ eme_version,
+ kNoSessionToLoad,
+ false,
expected_title);
// Check KeyMessage received for all key systems.
bool receivedKeyMessage = false;
@@ -294,6 +311,7 @@ class ECKEncryptedMediaTest : public EncryptedMediaTestBase {
kWebMAudioOnly,
key_system,
SRC,
+ PREFIXED,
kNoSessionToLoad,
false,
expected_title);
@@ -312,6 +330,7 @@ class WVEncryptedMediaTest : public EncryptedMediaTestBase {
protected:
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
EncryptedMediaTestBase::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kEnableEncryptedMedia);
SetUpCommandLineForKeySystem(kWidevineKeySystem, command_line);
}
};
@@ -322,12 +341,15 @@ class WVEncryptedMediaTest : public EncryptedMediaTestBase {
// Tests encrypted media playback with a combination of parameters:
// - char*: Key system name.
// - bool: True to load media using MSE, otherwise use src.
+// - bool: True to use unprefixed EME, otherwise use prefixed EME.
//
// Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F)
// tests will crash at GetParam(). To add non-parameterized tests, use
// EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest).
-class EncryptedMediaTest : public EncryptedMediaTestBase,
- public testing::WithParamInterface<std::tr1::tuple<const char*, SrcType> > {
+class EncryptedMediaTest
+ : public EncryptedMediaTestBase,
+ public testing::WithParamInterface<
+ std::tr1::tuple<const char*, SrcType, EmeVersion> > {
public:
std::string CurrentKeySystem() {
return std::tr1::get<0>(GetParam());
@@ -337,10 +359,17 @@ class EncryptedMediaTest : public EncryptedMediaTestBase,
return std::tr1::get<1>(GetParam());
}
+ EmeVersion CurrentEmeVersion() {
+ return std::tr1::get<2>(GetParam());
+ }
+
void TestSimplePlayback(const std::string& encrypted_media,
const std::string& media_type) {
- RunSimpleEncryptedMediaTest(
- encrypted_media, media_type, CurrentKeySystem(), CurrentSourceType());
+ RunSimpleEncryptedMediaTest(encrypted_media,
+ media_type,
+ CurrentKeySystem(),
+ CurrentSourceType(),
+ CurrentEmeVersion());
}
void RunInvalidResponseTest() {
@@ -349,6 +378,7 @@ class EncryptedMediaTest : public EncryptedMediaTestBase,
kWebMAudioVideo,
CurrentKeySystem(),
CurrentSourceType(),
+ CurrentEmeVersion(),
kNoSessionToLoad,
true,
kEmeKeyError);
@@ -360,6 +390,7 @@ class EncryptedMediaTest : public EncryptedMediaTestBase,
kWebMAudioVideo,
CurrentKeySystem(),
CurrentSourceType(),
+ CurrentEmeVersion(),
kNoSessionToLoad,
false,
kEnded);
@@ -370,6 +401,8 @@ class EncryptedMediaTest : public EncryptedMediaTestBase,
std::vector<StringPair> query_params;
query_params.push_back(std::make_pair("keySystem", CurrentKeySystem()));
query_params.push_back(std::make_pair("runEncrypted", "1"));
+ if (CurrentEmeVersion() == PREFIXED)
+ query_params.push_back(std::make_pair("usePrefixedEME", "1"));
RunEncryptedMediaTestPage("mse_config_change.html",
CurrentKeySystem(),
&query_params,
@@ -380,6 +413,9 @@ class EncryptedMediaTest : public EncryptedMediaTestBase,
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
EncryptedMediaTestBase::SetUpCommandLine(command_line);
SetUpCommandLineForKeySystem(CurrentKeySystem(), command_line);
+
+ if (CurrentEmeVersion() == UNPREFIXED)
+ command_line->AppendSwitch(switches::kEnableEncryptedMedia);
}
};
@@ -387,30 +423,90 @@ using ::testing::Combine;
using ::testing::Values;
#if !defined(OS_ANDROID)
-INSTANTIATE_TEST_CASE_P(SRC_ClearKey, EncryptedMediaTest,
- Combine(Values(kClearKeyKeySystem), Values(SRC)));
+INSTANTIATE_TEST_CASE_P(SRC_ClearKey_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kPrefixedClearKeyKeySystem),
+ Values(SRC),
+ Values(PREFIXED)));
+
+// TODO(jrummell): Enable unprefixed tests before shipping unprefixed EME.
+// Disabled now as they don't provide much additional coverage, but do take a
+// bit of time to execute.
+INSTANTIATE_TEST_CASE_P(DISABLED_SRC_ClearKey,
+ EncryptedMediaTest,
+ Combine(Values(kClearKeyKeySystem),
+ Values(SRC),
+ Values(UNPREFIXED)));
#endif // !defined(OS_ANDROID)
-INSTANTIATE_TEST_CASE_P(MSE_ClearKey, EncryptedMediaTest,
- Combine(Values(kClearKeyKeySystem), Values(MSE)));
+INSTANTIATE_TEST_CASE_P(MSE_ClearKey_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kPrefixedClearKeyKeySystem),
+ Values(MSE),
+ Values(PREFIXED)));
+INSTANTIATE_TEST_CASE_P(MSE_ClearKey,
+ EncryptedMediaTest,
+ Combine(Values(kClearKeyKeySystem),
+ Values(MSE),
+ Values(UNPREFIXED)));
// External Clear Key is currently only used on platforms that use Pepper CDMs.
#if defined(ENABLE_PEPPER_CDMS)
-INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, EncryptedMediaTest,
- Combine(Values(kExternalClearKeyKeySystem), Values(SRC)));
-INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, EncryptedMediaTest,
- Combine(Values(kExternalClearKeyKeySystem), Values(MSE)));
+INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyKeySystem),
+ Values(SRC),
+ Values(PREFIXED)));
+// TODO(jrummell): Enable unprefixed tests once the CDM can be loaded using
+// MediaKeys.
+INSTANTIATE_TEST_CASE_P(DISABLED_SRC_ExternalClearKey,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyKeySystem),
+ Values(SRC),
+ Values(UNPREFIXED)));
+INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyKeySystem),
+ Values(MSE),
+ Values(PREFIXED)));
+// TODO(jrummell): Enable unprefixed tests once the CDM can be loaded using
+// MediaKeys.
+INSTANTIATE_TEST_CASE_P(DISABLED_MSE_ExternalClearKey,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyKeySystem),
+ Values(MSE),
+ Values(UNPREFIXED)));
// To reduce test time, only run ExternalClearKeyDecryptOnly with MSE.
-INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly, EncryptedMediaTest,
- Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), Values(MSE)));
+INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyDecryptOnlyKeySystem),
+ Values(MSE),
+ Values(PREFIXED)));
+// TODO(jrummell): Enable unprefixed tests once the CDM can be loaded using
+// MediaKeys.
+INSTANTIATE_TEST_CASE_P(DISABLED_MSE_ExternalClearKeyDecryptOnly,
+ EncryptedMediaTest,
+ Combine(Values(kExternalClearKeyDecryptOnlyKeySystem),
+ Values(MSE),
+ Values(UNPREFIXED)));
#endif // defined(ENABLE_PEPPER_CDMS)
#if defined(WIDEVINE_CDM_AVAILABLE)
// This test doesn't fully test playback with Widevine. So we only run Widevine
// test with MSE (no SRC) to reduce test time. Also, on Android EME only works
// with MSE and we cannot run this test with SRC.
-INSTANTIATE_TEST_CASE_P(MSE_Widevine, EncryptedMediaTest,
- Combine(Values(kWidevineKeySystem), Values(MSE)));
+INSTANTIATE_TEST_CASE_P(MSE_Widevine_Prefixed,
+ EncryptedMediaTest,
+ Combine(Values(kWidevineKeySystem),
+ Values(MSE),
+ Values(PREFIXED)));
+// TODO(jrummell): Enable unprefixed tests once the CDM can be loaded using
+// MediaKeys.
+INSTANTIATE_TEST_CASE_P(DISABLED_MSE_Widevine,
+ EncryptedMediaTest,
+ Combine(Values(kWidevineKeySystem),
+ Values(MSE),
+ Values(UNPREFIXED)));
#endif // defined(WIDEVINE_CDM_AVAILABLE)
IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) {
@@ -496,12 +592,27 @@ IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_MP4) {
#if defined(WIDEVINE_CDM_AVAILABLE)
// The parent key system cannot be used in generateKeyRequest.
-IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException) {
+IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException_Prefixed) {
+ RunEncryptedMediaTest("encrypted_media_player.html",
+ "bear-a-enc_a.webm",
+ kWebMAudioOnly,
+ "com.widevine",
+ MSE,
+ PREFIXED,
+ kNoSessionToLoad,
+ false,
+ kEmeNotSupportedError);
+}
+
+// TODO(jrummell): http://crbug.com/349181
+// The parent key system cannot be used when creating MediaKeys.
+IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, DISABLED_ParentThrowsException) {
RunEncryptedMediaTest("encrypted_media_player.html",
"bear-a-enc_a.webm",
kWebMAudioOnly,
"com.widevine",
MSE,
+ UNPREFIXED,
kNoSessionToLoad,
false,
kEmeNotSupportedError);
@@ -529,6 +640,7 @@ IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadLoadableSession) {
kWebMVideoOnly,
kExternalClearKeyKeySystem,
SRC,
+ PREFIXED,
kLoadableSession,
false,
kEnded);
@@ -541,6 +653,7 @@ IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadUnknownSession) {
kWebMVideoOnly,
kExternalClearKeyKeySystem,
SRC,
+ PREFIXED,
kUnknownSession,
false,
kEmeKeyError);
« no previous file with comments | « no previous file | chrome/test/data/media/encrypted_media_player.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698