| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/path_service.h" | 6 #include "base/path_service.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "base/win/windows_version.h" | 8 #include "base/win/windows_version.h" |
| 9 #include "chrome/browser/media/media_browsertest.h" | 9 #include "chrome/browser/media/media_browsertest.h" |
| 10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 12 #include "chrome/common/chrome_switches.h" | 12 #include "chrome/common/chrome_switches.h" |
| 13 #include "content/public/test/browser_test_utils.h" | 13 #include "content/public/test/browser_test_utils.h" |
| 14 #if defined(OS_ANDROID) |
| 15 #include "base/android/build_info.h" |
| 16 #endif |
| 14 | 17 |
| 15 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 18 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
| 16 | 19 |
| 17 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(OS_LINUX) | 20 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(OS_LINUX) |
| 18 #include <gnu/libc-version.h> | 21 #include <gnu/libc-version.h> |
| 19 #endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(OS_LINUX) | 22 #endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(OS_LINUX) |
| 20 | 23 |
| 21 #if defined(ENABLE_PEPPER_CDMS) | 24 #if defined(ENABLE_PEPPER_CDMS) |
| 22 // Platform-specific filename relative to the chrome executable. | 25 // Platform-specific filename relative to the chrome executable. |
| 23 const char kClearKeyCdmAdapterFileName[] = | 26 const char kClearKeyCdmAdapterFileName[] = |
| (...skipping 25 matching lines...) Expand all Loading... |
| 49 // EME-specific test results and errors. | 52 // EME-specific test results and errors. |
| 50 const char kEmeKeyError[] = "KEYERROR"; | 53 const char kEmeKeyError[] = "KEYERROR"; |
| 51 const char kEmeNotSupportedError[] = "NOTSUPPORTEDERROR"; | 54 const char kEmeNotSupportedError[] = "NOTSUPPORTEDERROR"; |
| 52 | 55 |
| 53 // The type of video src used to load media. | 56 // The type of video src used to load media. |
| 54 enum SrcType { | 57 enum SrcType { |
| 55 SRC, | 58 SRC, |
| 56 MSE | 59 MSE |
| 57 }; | 60 }; |
| 58 | 61 |
| 62 // MSE is available on all desktop platforms and on Android 4.1 and later. |
| 63 static bool IsMSESupported() { |
| 64 #if defined(OS_ANDROID) |
| 65 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { |
| 66 LOG(INFO) << "MSE is only supported in Android 4.1 and later."; |
| 67 return false; |
| 68 } |
| 69 #endif // defined(OS_ANDROID) |
| 70 return true; |
| 71 } |
| 72 |
| 59 // Base class for encrypted media tests. | 73 // Base class for encrypted media tests. |
| 60 class EncryptedMediaTestBase : public MediaBrowserTest { | 74 class EncryptedMediaTestBase : public MediaBrowserTest { |
| 61 public: | 75 public: |
| 62 EncryptedMediaTestBase() : is_pepper_cdm_registered_(false) {} | 76 EncryptedMediaTestBase() : is_pepper_cdm_registered_(false) {} |
| 63 | 77 |
| 64 bool IsExternalClearKey(const char* key_system) { | 78 bool IsExternalClearKey(const char* key_system) { |
| 65 return (strcmp(key_system, kExternalClearKeyKeySystem) == 0); | 79 return (strcmp(key_system, kExternalClearKeyKeySystem) == 0); |
| 66 } | 80 } |
| 67 | 81 |
| 68 #if defined(WIDEVINE_CDM_AVAILABLE) | 82 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 69 bool IsWidevine(const char* key_system) { | 83 bool IsWidevine(const char* key_system) { |
| 70 return (strcmp(key_system, kWidevineKeySystem) == 0); | 84 return (strcmp(key_system, kWidevineKeySystem) == 0); |
| 71 } | 85 } |
| 72 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 86 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 73 | 87 |
| 74 void RunEncryptedMediaTest(const char* html_page, | 88 void RunEncryptedMediaTest(const char* html_page, |
| 75 const char* media_file, | 89 const char* media_file, |
| 76 const char* media_type, | 90 const char* media_type, |
| 77 const char* key_system, | 91 const char* key_system, |
| 78 SrcType src_type, | 92 SrcType src_type, |
| 79 const char* expectation) { | 93 const char* expectation) { |
| 94 if (src_type == MSE && !IsMSESupported()) { |
| 95 LOG(INFO) << "Skipping test - MSE not supported."; |
| 96 return; |
| 97 } |
| 98 |
| 80 std::vector<StringPair> query_params; | 99 std::vector<StringPair> query_params; |
| 81 query_params.push_back(std::make_pair("mediafile", media_file)); | 100 query_params.push_back(std::make_pair("mediafile", media_file)); |
| 82 query_params.push_back(std::make_pair("mediatype", media_type)); | 101 query_params.push_back(std::make_pair("mediatype", media_type)); |
| 83 query_params.push_back(std::make_pair("keysystem", key_system)); | 102 query_params.push_back(std::make_pair("keysystem", key_system)); |
| 84 if (src_type == MSE) | 103 if (src_type == MSE) |
| 85 query_params.push_back(std::make_pair("usemse", "1")); | 104 query_params.push_back(std::make_pair("usemse", "1")); |
| 86 RunMediaTestPage(html_page, &query_params, expectation, true); | 105 RunMediaTestPage(html_page, &query_params, expectation, true); |
| 87 } | 106 } |
| 88 | 107 |
| 89 void RunSimpleEncryptedMediaTest(const char* media_file, | 108 void RunSimpleEncryptedMediaTest(const char* media_file, |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 LOG(INFO) << "FrameSizeChange test cannot run with Widevine."; | 273 LOG(INFO) << "FrameSizeChange test cannot run with Widevine."; |
| 255 return; | 274 return; |
| 256 } | 275 } |
| 257 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 276 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 258 RunEncryptedMediaTest("encrypted_frame_size_change.html", | 277 RunEncryptedMediaTest("encrypted_frame_size_change.html", |
| 259 "frame_size_change-av-enc-v.webm", kWebMAudioVideo, | 278 "frame_size_change-av-enc-v.webm", kWebMAudioVideo, |
| 260 CurrentKeySystem(), CurrentSourceType(), kEnded); | 279 CurrentKeySystem(), CurrentSourceType(), kEnded); |
| 261 } | 280 } |
| 262 | 281 |
| 263 void TestConfigChange() { | 282 void TestConfigChange() { |
| 283 if (CurrentSourceType() != MSE || !IsMSESupported()) { |
| 284 LOG(INFO) << "Skipping test - config change test requires MSE."; |
| 285 return; |
| 286 } |
| 264 #if defined(WIDEVINE_CDM_AVAILABLE) | 287 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 265 if (IsWidevine(CurrentKeySystem())) { | 288 if (IsWidevine(CurrentKeySystem())) { |
| 266 LOG(INFO) << "ConfigChange test cannot run with Widevine."; | 289 LOG(INFO) << "ConfigChange test cannot run with Widevine."; |
| 267 return; | 290 return; |
| 268 } | 291 } |
| 269 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 292 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 270 std::vector<StringPair> query_params; | 293 std::vector<StringPair> query_params; |
| 271 query_params.push_back(std::make_pair("keysystem", CurrentKeySystem())); | 294 query_params.push_back(std::make_pair("keysystem", CurrentKeySystem())); |
| 272 query_params.push_back(std::make_pair("runencrypted", "1")); | 295 query_params.push_back(std::make_pair("runencrypted", "1")); |
| 273 RunMediaTestPage("mse_config_change.html", &query_params, kEnded, true); | 296 RunMediaTestPage("mse_config_change.html", &query_params, kEnded, true); |
| 274 } | 297 } |
| 275 | 298 |
| 276 protected: | 299 protected: |
| 277 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 300 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 278 EncryptedMediaTestBase::SetUpCommandLine(command_line); | 301 EncryptedMediaTestBase::SetUpCommandLine(command_line); |
| 279 SetUpCommandLineForKeySystem(CurrentKeySystem(), command_line); | 302 SetUpCommandLineForKeySystem(CurrentKeySystem(), command_line); |
| 280 } | 303 } |
| 281 }; | 304 }; |
| 282 | 305 |
| 283 INSTANTIATE_TEST_CASE_P(ClearKey, EncryptedMediaTest, | 306 using ::testing::Combine; |
| 284 ::testing::Combine( | 307 using ::testing::Values; |
| 285 ::testing::Values(kClearKeyKeySystem), ::testing::Values(SRC, MSE))); | 308 |
| 309 #if !defined(OS_ANDROID) |
| 310 INSTANTIATE_TEST_CASE_P(SRC_ClearKey, EncryptedMediaTest, |
| 311 Combine(Values(kClearKeyKeySystem), Values(SRC))); |
| 312 #endif // !defined(OS_ANDROID) |
| 313 |
| 314 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, EncryptedMediaTest, |
| 315 Combine(Values(kClearKeyKeySystem), Values(MSE))); |
| 286 | 316 |
| 287 // External Clear Key is currently only used on platforms that use Pepper CDMs. | 317 // External Clear Key is currently only used on platforms that use Pepper CDMs. |
| 288 #if defined(ENABLE_PEPPER_CDMS) | 318 #if defined(ENABLE_PEPPER_CDMS) |
| 289 INSTANTIATE_TEST_CASE_P(ExternalClearKey, EncryptedMediaTest, | 319 INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, EncryptedMediaTest, |
| 290 ::testing::Combine( | 320 Combine(Values(kExternalClearKeyKeySystem), Values(SRC))); |
| 291 ::testing::Values(kExternalClearKeyKeySystem), | 321 INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, EncryptedMediaTest, |
| 292 ::testing::Values(SRC, MSE))); | 322 Combine(Values(kExternalClearKeyKeySystem), Values(MSE))); |
| 323 #endif // defined(ENABLE_PEPPER_CDMS) |
| 293 | 324 |
| 294 #if defined(WIDEVINE_CDM_AVAILABLE) | 325 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 295 // This test doesn't fully test playback with Widevine. So we only run Widevine | 326 // This test doesn't fully test playback with Widevine. So we only run Widevine |
| 296 // test with MSE (no SRC) to reduce test time. | 327 // test with MSE (no SRC) to reduce test time. Also, on Android EME only works |
| 297 INSTANTIATE_TEST_CASE_P(Widevine, EncryptedMediaTest, | 328 // with MSE and we cannot run this test with SRC. |
| 298 ::testing::Combine( | 329 INSTANTIATE_TEST_CASE_P(MSE_Widevine, EncryptedMediaTest, |
| 299 ::testing::Values(kWidevineKeySystem), ::testing::Values(MSE))); | 330 Combine(Values(kWidevineKeySystem), Values(MSE))); |
| 300 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 331 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 301 #endif // defined(ENABLE_PEPPER_CDMS) | |
| 302 | 332 |
| 303 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) { | 333 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) { |
| 304 TestSimplePlayback("bear-a-enc_a.webm", kWebMAudioOnly); | 334 TestSimplePlayback("bear-a-enc_a.webm", kWebMAudioOnly); |
| 305 } | 335 } |
| 306 | 336 |
| 307 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioClearVideo_WebM) { | 337 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioClearVideo_WebM) { |
| 308 TestSimplePlayback("bear-320x240-av-enc_a.webm", kWebMAudioVideo); | 338 TestSimplePlayback("bear-320x240-av-enc_a.webm", kWebMAudioVideo); |
| 309 } | 339 } |
| 310 | 340 |
| 311 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoAudio_WebM) { | 341 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoAudio_WebM) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, | 399 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, |
| 370 ExternalClearKeyInitializeCDMFail) { | 400 ExternalClearKeyInitializeCDMFail) { |
| 371 RunEncryptedMediaTest("encrypted_media_player.html", | 401 RunEncryptedMediaTest("encrypted_media_player.html", |
| 372 "bear-a-enc_a.webm", | 402 "bear-a-enc_a.webm", |
| 373 kWebMAudioOnly, | 403 kWebMAudioOnly, |
| 374 "org.chromium.externalclearkey.initializefail", | 404 "org.chromium.externalclearkey.initializefail", |
| 375 SRC, | 405 SRC, |
| 376 kEmeKeyError); | 406 kEmeKeyError); |
| 377 } | 407 } |
| 378 #endif // defined(ENABLE_PEPPER_CDMS) | 408 #endif // defined(ENABLE_PEPPER_CDMS) |
| OLD | NEW |