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/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 | 274 |
275 #if BUILDFLAG(ENABLE_PEPPER_CDMS) | 275 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
276 void SetUpDefaultCommandLine(base::CommandLine* command_line) override { | 276 void SetUpDefaultCommandLine(base::CommandLine* command_line) override { |
277 base::CommandLine default_command_line(base::CommandLine::NO_PROGRAM); | 277 base::CommandLine default_command_line(base::CommandLine::NO_PROGRAM); |
278 InProcessBrowserTest::SetUpDefaultCommandLine(&default_command_line); | 278 InProcessBrowserTest::SetUpDefaultCommandLine(&default_command_line); |
279 test_launcher_utils::RemoveCommandLineSwitch( | 279 test_launcher_utils::RemoveCommandLineSwitch( |
280 default_command_line, switches::kDisableComponentUpdate, command_line); | 280 default_command_line, switches::kDisableComponentUpdate, command_line); |
281 } | 281 } |
282 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) | 282 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
283 | 283 |
284 void SetUpCommandLineForKeySystem(const std::string& key_system, | 284 void SetUpForKeySystem(const std::string& key_system, |
285 CdmHostType cdm_host_type, | 285 CdmHostType cdm_host_type) { |
286 base::CommandLine* command_line) { | |
287 if (GetServerConfig(key_system)) | |
288 // Since the web and license servers listen on different ports, we need to | |
289 // disable web-security to send license requests to the license server. | |
290 // TODO(shadi): Add port forwarding to the test web server configuration. | |
291 command_line->AppendSwitch(switches::kDisableWebSecurity); | |
292 | |
293 #if BUILDFLAG(ENABLE_PEPPER_CDMS) | 286 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
294 if (IsExternalClearKey(key_system)) { | 287 if (IsExternalClearKey(key_system)) { |
295 RegisterPepperCdm(command_line, media::kClearKeyCdmBaseDirectory, | |
296 media::kClearKeyCdmAdapterFileName, | |
297 media::kClearKeyCdmDisplayName, | |
298 media::kClearKeyCdmPepperMimeType); | |
299 if (cdm_host_type == CdmHostType::kMojo) { | 288 if (cdm_host_type == CdmHostType::kMojo) { |
300 scoped_feature_list_.InitWithFeatures( | 289 scoped_feature_list_.InitWithFeatures( |
301 {media::kExternalClearKeyForTesting, media::kMojoCdm, | 290 {media::kExternalClearKeyForTesting, media::kMojoCdm, |
302 media::kSupportExperimentalCdmInterface}, | 291 media::kSupportExperimentalCdmInterface}, |
303 {}); | 292 {}); |
304 } else { | 293 } else { |
305 // Pepper CDMs are conditionally compiled with or without support for | 294 // Pepper CDMs are conditionally compiled with or without support for |
306 // experimental CDMs, so media::kSupportExperimentalCdmInterface is | 295 // experimental CDMs, so media::kSupportExperimentalCdmInterface is |
307 // not needed as it isn't checked. | 296 // not needed as it isn't checked. |
308 scoped_feature_list_.InitWithFeatures( | 297 scoped_feature_list_.InitWithFeatures( |
309 {media::kExternalClearKeyForTesting}, {}); | 298 {media::kExternalClearKeyForTesting}, {}); |
310 } | 299 } |
311 } else { | 300 } else { |
312 if (cdm_host_type == CdmHostType::kMojo) { | 301 if (cdm_host_type == CdmHostType::kMojo) { |
313 scoped_feature_list_.InitWithFeatures( | 302 scoped_feature_list_.InitWithFeatures( |
314 {media::kMojoCdm, media::kSupportExperimentalCdmInterface}, {}); | 303 {media::kMojoCdm, media::kSupportExperimentalCdmInterface}, {}); |
315 } | 304 } |
316 } | 305 } |
317 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) | 306 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
318 } | 307 } |
319 | 308 |
| 309 void SetUpCommandLineForKeySystem(const std::string& key_system, |
| 310 base::CommandLine* command_line) { |
| 311 if (GetServerConfig(key_system)) |
| 312 // Since the web and license servers listen on different ports, we need to |
| 313 // disable web-security to send license requests to the license server. |
| 314 // TODO(shadi): Add port forwarding to the test web server configuration. |
| 315 command_line->AppendSwitch(switches::kDisableWebSecurity); |
| 316 |
| 317 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 318 if (IsExternalClearKey(key_system)) { |
| 319 RegisterPepperCdm(command_line, media::kClearKeyCdmBaseDirectory, |
| 320 media::kClearKeyCdmAdapterFileName, |
| 321 media::kClearKeyCdmDisplayName, |
| 322 media::kClearKeyCdmPepperMimeType); |
| 323 } |
| 324 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
| 325 } |
| 326 |
320 base::test::ScopedFeatureList scoped_feature_list_; | 327 base::test::ScopedFeatureList scoped_feature_list_; |
321 }; | 328 }; |
322 | 329 |
323 #if BUILDFLAG(ENABLE_PEPPER_CDMS) | 330 #if BUILDFLAG(ENABLE_PEPPER_CDMS) |
324 // Tests encrypted media playback using ExternalClearKey key system in | 331 // Tests encrypted media playback using ExternalClearKey key system in |
325 // decrypt-and-decode mode. | 332 // decrypt-and-decode mode. |
326 class ECKEncryptedMediaTest : public EncryptedMediaTestBase, | 333 class ECKEncryptedMediaTest : public EncryptedMediaTestBase, |
327 public testing::WithParamInterface<CdmHostType> { | 334 public testing::WithParamInterface<CdmHostType> { |
328 public: | 335 public: |
| 336 ECKEncryptedMediaTest() { |
| 337 SetUpForKeySystem(kExternalClearKeyKeySystem, GetParam()); |
| 338 } |
| 339 |
329 // We use special |key_system| names to do non-playback related tests, | 340 // We use special |key_system| names to do non-playback related tests, |
330 // e.g. kExternalClearKeyFileIOTestKeySystem is used to test file IO. | 341 // e.g. kExternalClearKeyFileIOTestKeySystem is used to test file IO. |
331 void TestNonPlaybackCases(const std::string& key_system, | 342 void TestNonPlaybackCases(const std::string& key_system, |
332 const std::string& expected_title) { | 343 const std::string& expected_title) { |
333 // Since we do not test playback, arbitrarily choose a test file and source | 344 // Since we do not test playback, arbitrarily choose a test file and source |
334 // type. | 345 // type. |
335 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", | 346 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", |
336 kWebMVorbisAudioOnly, key_system, SrcType::SRC, | 347 kWebMVorbisAudioOnly, key_system, SrcType::SRC, |
337 kNoSessionToLoad, false, PlayCount::ONCE, | 348 kNoSessionToLoad, false, PlayCount::ONCE, |
338 expected_title); | 349 expected_title); |
339 } | 350 } |
340 | 351 |
341 void TestPlaybackCase(const std::string& key_system, | 352 void TestPlaybackCase(const std::string& key_system, |
342 const std::string& session_to_load, | 353 const std::string& session_to_load, |
343 const std::string& expected_title) { | 354 const std::string& expected_title) { |
344 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-320x240-v_enc-v.webm", | 355 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-320x240-v_enc-v.webm", |
345 kWebMVP8VideoOnly, key_system, SrcType::MSE, | 356 kWebMVP8VideoOnly, key_system, SrcType::MSE, |
346 session_to_load, false, PlayCount::ONCE, | 357 session_to_load, false, PlayCount::ONCE, |
347 expected_title); | 358 expected_title); |
348 } | 359 } |
349 | 360 |
350 bool IsUsingMojoCdm() const { return GetParam() == CdmHostType::kMojo; } | 361 bool IsUsingMojoCdm() const { return GetParam() == CdmHostType::kMojo; } |
351 | 362 |
352 protected: | 363 protected: |
353 void SetUpCommandLine(base::CommandLine* command_line) override { | 364 void SetUpCommandLine(base::CommandLine* command_line) override { |
354 EncryptedMediaTestBase::SetUpCommandLine(command_line); | 365 EncryptedMediaTestBase::SetUpCommandLine(command_line); |
355 SetUpCommandLineForKeySystem(kExternalClearKeyKeySystem, GetParam(), | 366 SetUpCommandLineForKeySystem(kExternalClearKeyKeySystem, command_line); |
356 command_line); | |
357 } | 367 } |
358 }; | 368 }; |
359 | 369 |
360 #if defined(WIDEVINE_CDM_AVAILABLE) | 370 #if defined(WIDEVINE_CDM_AVAILABLE) |
361 // Tests encrypted media playback using Widevine key system. | 371 // Tests encrypted media playback using Widevine key system. |
362 class WVEncryptedMediaTest : public EncryptedMediaTestBase { | 372 class WVEncryptedMediaTest : public EncryptedMediaTestBase { |
| 373 public: |
| 374 WVEncryptedMediaTest() { |
| 375 SetUpForKeySystem(kWidevineKeySystem, CdmHostType::kPepper); |
| 376 } |
| 377 |
363 protected: | 378 protected: |
364 void SetUpCommandLine(base::CommandLine* command_line) override { | 379 void SetUpCommandLine(base::CommandLine* command_line) override { |
365 EncryptedMediaTestBase::SetUpCommandLine(command_line); | 380 EncryptedMediaTestBase::SetUpCommandLine(command_line); |
366 SetUpCommandLineForKeySystem(kWidevineKeySystem, CdmHostType::kPepper, | 381 SetUpCommandLineForKeySystem(kWidevineKeySystem, command_line); |
367 command_line); | |
368 } | 382 } |
369 }; | 383 }; |
370 | 384 |
371 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 385 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
372 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) | 386 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) |
373 | 387 |
374 // Tests encrypted media playback with a combination of parameters: | 388 // Tests encrypted media playback with a combination of parameters: |
375 // - char*: Key system name. | 389 // - char*: Key system name. |
376 // - SrcType: Use MSE or SRC. | 390 // - SrcType: Use MSE or SRC. |
377 // | 391 // |
378 // Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F) | 392 // Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F) |
379 // tests will crash at GetParam(). To add non-parameterized tests, use | 393 // tests will crash at GetParam(). To add non-parameterized tests, use |
380 // EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest). | 394 // EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest). |
381 class EncryptedMediaTest | 395 class EncryptedMediaTest |
382 : public EncryptedMediaTestBase, | 396 : public EncryptedMediaTestBase, |
383 public testing::WithParamInterface< | 397 public testing::WithParamInterface< |
384 std::tr1::tuple<const char*, SrcType, CdmHostType>> { | 398 std::tr1::tuple<const char*, SrcType, CdmHostType>> { |
385 public: | 399 public: |
| 400 EncryptedMediaTest() { |
| 401 SetUpForKeySystem(CurrentKeySystem(), CurrentCdmHostType()); |
| 402 } |
| 403 |
386 std::string CurrentKeySystem() { | 404 std::string CurrentKeySystem() { |
387 return std::tr1::get<0>(GetParam()); | 405 return std::tr1::get<0>(GetParam()); |
388 } | 406 } |
389 | 407 |
390 SrcType CurrentSourceType() { | 408 SrcType CurrentSourceType() { |
391 return std::tr1::get<1>(GetParam()); | 409 return std::tr1::get<1>(GetParam()); |
392 } | 410 } |
393 | 411 |
394 CdmHostType CurrentCdmHostType() { return std::tr1::get<2>(GetParam()); } | 412 CdmHostType CurrentCdmHostType() { return std::tr1::get<2>(GetParam()); } |
395 | 413 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 } | 490 } |
473 | 491 |
474 void DisableEncryptedMedia() { | 492 void DisableEncryptedMedia() { |
475 PrefService* pref_service = browser()->profile()->GetPrefs(); | 493 PrefService* pref_service = browser()->profile()->GetPrefs(); |
476 pref_service->SetBoolean(prefs::kWebKitEncryptedMediaEnabled, false); | 494 pref_service->SetBoolean(prefs::kWebKitEncryptedMediaEnabled, false); |
477 } | 495 } |
478 | 496 |
479 protected: | 497 protected: |
480 void SetUpCommandLine(base::CommandLine* command_line) override { | 498 void SetUpCommandLine(base::CommandLine* command_line) override { |
481 EncryptedMediaTestBase::SetUpCommandLine(command_line); | 499 EncryptedMediaTestBase::SetUpCommandLine(command_line); |
482 SetUpCommandLineForKeySystem(CurrentKeySystem(), CurrentCdmHostType(), | 500 SetUpCommandLineForKeySystem(CurrentKeySystem(), command_line); |
483 command_line); | |
484 } | 501 } |
485 }; | 502 }; |
486 | 503 |
487 using ::testing::Combine; | 504 using ::testing::Combine; |
488 using ::testing::Values; | 505 using ::testing::Values; |
489 | 506 |
490 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, | 507 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, |
491 EncryptedMediaTest, | 508 EncryptedMediaTest, |
492 Combine(Values(kClearKeyKeySystem), | 509 Combine(Values(kClearKeyKeySystem), |
493 Values(SrcType::MSE), | 510 Values(SrcType::MSE), |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 DVLOG(0) << "Skipping test; Not working with mojo CDM yet."; | 845 DVLOG(0) << "Skipping test; Not working with mojo CDM yet."; |
829 return; | 846 return; |
830 } | 847 } |
831 | 848 |
832 TestNonPlaybackCases(kExternalClearKeyVerifyCdmHostTestKeySystem, | 849 TestNonPlaybackCases(kExternalClearKeyVerifyCdmHostTestKeySystem, |
833 kUnitTestSuccess); | 850 kUnitTestSuccess); |
834 } | 851 } |
835 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) | 852 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) |
836 | 853 |
837 } // namespace chrome | 854 } // namespace chrome |
OLD | NEW |