| 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "base/win/windows_version.h" | 11 #include "base/win/windows_version.h" |
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "chrome/browser/media/media_browsertest.h" | 13 #include "chrome/browser/media/media_browsertest.h" |
| 14 #include "chrome/browser/media/test_license_server.h" | 14 #include "chrome/browser/media/test_license_server.h" |
| 15 #include "chrome/browser/media/wv_test_license_server_config.h" | 15 #include "chrome/browser/media/wv_test_license_server_config.h" |
| 16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 17 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 17 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 18 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
| 19 #include "chrome/test/base/test_launcher_utils.h" | 19 #include "chrome/test/base/test_launcher_utils.h" |
| 20 #include "content/public/common/content_switches.h" | 20 #include "content/public/common/content_switches.h" |
| 21 #include "content/public/test/browser_test_utils.h" | 21 #include "content/public/test/browser_test_utils.h" |
| 22 #include "ppapi/features/features.h" |
| 22 #include "testing/gtest/include/gtest/gtest-spi.h" | 23 #include "testing/gtest/include/gtest/gtest-spi.h" |
| 24 |
| 23 #if defined(OS_ANDROID) | 25 #if defined(OS_ANDROID) |
| 24 #include "base/android/build_info.h" | 26 #include "base/android/build_info.h" |
| 25 #endif | 27 #endif |
| 26 | 28 |
| 27 #if defined(ENABLE_PEPPER_CDMS) | 29 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 28 #include "chrome/browser/media/pepper_cdm_test_constants.h" | 30 #include "chrome/browser/media/pepper_cdm_test_constants.h" |
| 29 #include "chrome/browser/media/pepper_cdm_test_helper.h" | 31 #include "chrome/browser/media/pepper_cdm_test_helper.h" |
| 30 #include "media/base/media_switches.h" | 32 #include "media/base/media_switches.h" |
| 31 #endif | 33 #endif |
| 32 | 34 |
| 33 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 35 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
| 34 | 36 |
| 35 // Available key systems. | 37 // Available key systems. |
| 36 const char kClearKeyKeySystem[] = "org.w3.clearkey"; | 38 const char kClearKeyKeySystem[] = "org.w3.clearkey"; |
| 37 const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; | 39 const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 base::ASCIIToUTF16(kEmeMessageUnexpectedType)); | 234 base::ASCIIToUTF16(kEmeMessageUnexpectedType)); |
| 233 title_watcher->AlsoWaitForTitle( | 235 title_watcher->AlsoWaitForTitle( |
| 234 base::ASCIIToUTF16(kEmeRenewalMissingHeader)); | 236 base::ASCIIToUTF16(kEmeRenewalMissingHeader)); |
| 235 } | 237 } |
| 236 | 238 |
| 237 void SetUpCommandLine(base::CommandLine* command_line) override { | 239 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 238 command_line->AppendSwitch( | 240 command_line->AppendSwitch( |
| 239 switches::kDisableGestureRequirementForMediaPlayback); | 241 switches::kDisableGestureRequirementForMediaPlayback); |
| 240 } | 242 } |
| 241 | 243 |
| 242 #if defined(ENABLE_PEPPER_CDMS) | 244 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 243 void SetUpDefaultCommandLine(base::CommandLine* command_line) override { | 245 void SetUpDefaultCommandLine(base::CommandLine* command_line) override { |
| 244 base::CommandLine default_command_line(base::CommandLine::NO_PROGRAM); | 246 base::CommandLine default_command_line(base::CommandLine::NO_PROGRAM); |
| 245 InProcessBrowserTest::SetUpDefaultCommandLine(&default_command_line); | 247 InProcessBrowserTest::SetUpDefaultCommandLine(&default_command_line); |
| 246 test_launcher_utils::RemoveCommandLineSwitch( | 248 test_launcher_utils::RemoveCommandLineSwitch( |
| 247 default_command_line, switches::kDisableComponentUpdate, command_line); | 249 default_command_line, switches::kDisableComponentUpdate, command_line); |
| 248 } | 250 } |
| 249 #endif // defined(ENABLE_PEPPER_CDMS) | 251 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 250 | 252 |
| 251 void SetUpCommandLineForKeySystem(const std::string& key_system, | 253 void SetUpCommandLineForKeySystem(const std::string& key_system, |
| 252 base::CommandLine* command_line) { | 254 base::CommandLine* command_line) { |
| 253 if (GetServerConfig(key_system)) | 255 if (GetServerConfig(key_system)) |
| 254 // Since the web and license servers listen on different ports, we need to | 256 // Since the web and license servers listen on different ports, we need to |
| 255 // disable web-security to send license requests to the license server. | 257 // disable web-security to send license requests to the license server. |
| 256 // TODO(shadi): Add port forwarding to the test web server configuration. | 258 // TODO(shadi): Add port forwarding to the test web server configuration. |
| 257 command_line->AppendSwitch(switches::kDisableWebSecurity); | 259 command_line->AppendSwitch(switches::kDisableWebSecurity); |
| 258 | 260 |
| 259 #if defined(ENABLE_PEPPER_CDMS) | 261 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 260 if (IsExternalClearKey(key_system)) { | 262 if (IsExternalClearKey(key_system)) { |
| 261 RegisterPepperCdm(command_line, kClearKeyCdmBaseDirectory, | 263 RegisterPepperCdm(command_line, kClearKeyCdmBaseDirectory, |
| 262 kClearKeyCdmAdapterFileName, kClearKeyCdmDisplayName, | 264 kClearKeyCdmAdapterFileName, kClearKeyCdmDisplayName, |
| 263 kClearKeyCdmPepperMimeType); | 265 kClearKeyCdmPepperMimeType); |
| 264 command_line->AppendSwitchASCII(switches::kEnableFeatures, | 266 command_line->AppendSwitchASCII(switches::kEnableFeatures, |
| 265 media::kExternalClearKeyForTesting.name); | 267 media::kExternalClearKeyForTesting.name); |
| 266 } | 268 } |
| 267 #endif // defined(ENABLE_PEPPER_CDMS) | 269 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 268 } | 270 } |
| 269 }; | 271 }; |
| 270 | 272 |
| 271 #if defined(ENABLE_PEPPER_CDMS) | 273 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 272 // Tests encrypted media playback using ExternalClearKey key system in | 274 // Tests encrypted media playback using ExternalClearKey key system in |
| 273 // decrypt-and-decode mode. | 275 // decrypt-and-decode mode. |
| 274 class ECKEncryptedMediaTest : public EncryptedMediaTestBase { | 276 class ECKEncryptedMediaTest : public EncryptedMediaTestBase { |
| 275 public: | 277 public: |
| 276 // We use special |key_system| names to do non-playback related tests, e.g. | 278 // We use special |key_system| names to do non-playback related tests, e.g. |
| 277 // kExternalClearKeyFileIOTestKeySystem is used to test file IO. | 279 // kExternalClearKeyFileIOTestKeySystem is used to test file IO. |
| 278 void TestNonPlaybackCases(const std::string& key_system, | 280 void TestNonPlaybackCases(const std::string& key_system, |
| 279 const std::string& expected_title) { | 281 const std::string& expected_title) { |
| 280 // Since we do not test playback, arbitrarily choose a test file and source | 282 // Since we do not test playback, arbitrarily choose a test file and source |
| 281 // type. | 283 // type. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 304 // Tests encrypted media playback using Widevine key system. | 306 // Tests encrypted media playback using Widevine key system. |
| 305 class WVEncryptedMediaTest : public EncryptedMediaTestBase { | 307 class WVEncryptedMediaTest : public EncryptedMediaTestBase { |
| 306 protected: | 308 protected: |
| 307 void SetUpCommandLine(base::CommandLine* command_line) override { | 309 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 308 EncryptedMediaTestBase::SetUpCommandLine(command_line); | 310 EncryptedMediaTestBase::SetUpCommandLine(command_line); |
| 309 SetUpCommandLineForKeySystem(kWidevineKeySystem, command_line); | 311 SetUpCommandLineForKeySystem(kWidevineKeySystem, command_line); |
| 310 } | 312 } |
| 311 }; | 313 }; |
| 312 | 314 |
| 313 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 315 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 314 #endif // defined(ENABLE_PEPPER_CDMS) | 316 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 315 | 317 |
| 316 // Tests encrypted media playback with a combination of parameters: | 318 // Tests encrypted media playback with a combination of parameters: |
| 317 // - char*: Key system name. | 319 // - char*: Key system name. |
| 318 // - SrcType: Use MSE or SRC. | 320 // - SrcType: Use MSE or SRC. |
| 319 // | 321 // |
| 320 // Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F) | 322 // Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F) |
| 321 // tests will crash at GetParam(). To add non-parameterized tests, use | 323 // tests will crash at GetParam(). To add non-parameterized tests, use |
| 322 // EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest). | 324 // EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest). |
| 323 class EncryptedMediaTest : public EncryptedMediaTestBase, | 325 class EncryptedMediaTest : public EncryptedMediaTestBase, |
| 324 public testing::WithParamInterface< | 326 public testing::WithParamInterface< |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 INSTANTIATE_TEST_CASE_P(SRC_ClearKey, | 414 INSTANTIATE_TEST_CASE_P(SRC_ClearKey, |
| 413 EncryptedMediaTest, | 415 EncryptedMediaTest, |
| 414 Combine(Values(kClearKeyKeySystem), Values(SRC))); | 416 Combine(Values(kClearKeyKeySystem), Values(SRC))); |
| 415 #endif // !defined(OS_ANDROID) | 417 #endif // !defined(OS_ANDROID) |
| 416 | 418 |
| 417 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, | 419 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, |
| 418 EncryptedMediaTest, | 420 EncryptedMediaTest, |
| 419 Combine(Values(kClearKeyKeySystem), Values(MSE))); | 421 Combine(Values(kClearKeyKeySystem), Values(MSE))); |
| 420 | 422 |
| 421 // External Clear Key is currently only used on platforms that use Pepper CDMs. | 423 // External Clear Key is currently only used on platforms that use Pepper CDMs. |
| 422 #if defined(ENABLE_PEPPER_CDMS) | 424 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 423 INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, | 425 INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, |
| 424 EncryptedMediaTest, | 426 EncryptedMediaTest, |
| 425 Combine(Values(kExternalClearKeyKeySystem), | 427 Combine(Values(kExternalClearKeyKeySystem), |
| 426 Values(SRC))); | 428 Values(SRC))); |
| 427 | 429 |
| 428 INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, | 430 INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, |
| 429 EncryptedMediaTest, | 431 EncryptedMediaTest, |
| 430 Combine(Values(kExternalClearKeyKeySystem), | 432 Combine(Values(kExternalClearKeyKeySystem), |
| 431 Values(MSE))); | 433 Values(MSE))); |
| 432 | 434 |
| 433 const char kExternalClearKeyDecryptOnlyKeySystem[] = | 435 const char kExternalClearKeyDecryptOnlyKeySystem[] = |
| 434 "org.chromium.externalclearkey.decryptonly"; | 436 "org.chromium.externalclearkey.decryptonly"; |
| 435 | 437 |
| 436 // To reduce test time, only run ExternalClearKeyDecryptOnly with MSE. | 438 // To reduce test time, only run ExternalClearKeyDecryptOnly with MSE. |
| 437 INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly, | 439 INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly, |
| 438 EncryptedMediaTest, | 440 EncryptedMediaTest, |
| 439 Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), | 441 Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), |
| 440 Values(MSE))); | 442 Values(MSE))); |
| 441 #endif // defined(ENABLE_PEPPER_CDMS) | 443 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 442 | 444 |
| 443 #if defined(WIDEVINE_CDM_AVAILABLE) | 445 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 444 #if !defined(OS_CHROMEOS) | 446 #if !defined(OS_CHROMEOS) |
| 445 INSTANTIATE_TEST_CASE_P(MSE_Widevine, | 447 INSTANTIATE_TEST_CASE_P(MSE_Widevine, |
| 446 EncryptedMediaTest, | 448 EncryptedMediaTest, |
| 447 Combine(Values(kWidevineKeySystem), Values(MSE))); | 449 Combine(Values(kWidevineKeySystem), Values(MSE))); |
| 448 #endif // !defined(OS_CHROMEOS) | 450 #endif // !defined(OS_CHROMEOS) |
| 449 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 451 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 450 | 452 |
| 451 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) { | 453 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) { |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 #if defined(WIDEVINE_CDM_AVAILABLE) | 600 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 599 // The parent key system cannot be used when creating MediaKeys. | 601 // The parent key system cannot be used when creating MediaKeys. |
| 600 IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException) { | 602 IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException) { |
| 601 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", | 603 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", |
| 602 kWebMVorbisAudioOnly, "com.widevine", MSE, | 604 kWebMVorbisAudioOnly, "com.widevine", MSE, |
| 603 kNoSessionToLoad, false, PlayTwice::NO, | 605 kNoSessionToLoad, false, PlayTwice::NO, |
| 604 kEmeNotSupportedError); | 606 kEmeNotSupportedError); |
| 605 } | 607 } |
| 606 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 608 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 607 | 609 |
| 608 #if defined(ENABLE_PEPPER_CDMS) | 610 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 609 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, InitializeCDMFail) { | 611 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, InitializeCDMFail) { |
| 610 TestNonPlaybackCases(kExternalClearKeyInitializeFailKeySystem, | 612 TestNonPlaybackCases(kExternalClearKeyInitializeFailKeySystem, |
| 611 kEmeNotSupportedError); | 613 kEmeNotSupportedError); |
| 612 } | 614 } |
| 613 | 615 |
| 614 // When CDM crashes, we should still get a decode error. |kError| is reported | 616 // When CDM crashes, we should still get a decode error. |kError| is reported |
| 615 // when the HTMLVideoElement error event fires, indicating an error happened | 617 // when the HTMLVideoElement error event fires, indicating an error happened |
| 616 // during playback. | 618 // during playback. |
| 617 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, CDMCrashDuringDecode) { | 619 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, CDMCrashDuringDecode) { |
| 618 IgnorePluginCrash(); | 620 IgnorePluginCrash(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 644 | 646 |
| 645 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadLoadableSession) { | 647 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadLoadableSession) { |
| 646 TestPlaybackCase(kExternalClearKeyKeySystem, kLoadableSession, kEnded); | 648 TestPlaybackCase(kExternalClearKeyKeySystem, kLoadableSession, kEnded); |
| 647 } | 649 } |
| 648 | 650 |
| 649 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadUnknownSession) { | 651 IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadUnknownSession) { |
| 650 TestPlaybackCase(kExternalClearKeyKeySystem, kUnknownSession, | 652 TestPlaybackCase(kExternalClearKeyKeySystem, kUnknownSession, |
| 651 kEmeSessionNotFound); | 653 kEmeSessionNotFound); |
| 652 } | 654 } |
| 653 | 655 |
| 654 #endif // defined(ENABLE_PEPPER_CDMS) | 656 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| OLD | NEW |