Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 | 22 |
| 23 namespace media { | 23 namespace media { |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 const char kSupported[] = "supported"; | 27 const char kSupported[] = "supported"; |
| 28 const char kRecommendIdentifier[] = "recommend_identifier"; | 28 const char kRecommendIdentifier[] = "recommend_identifier"; |
| 29 const char kRequireIdentifier[] = "require_identifier"; | 29 const char kRequireIdentifier[] = "require_identifier"; |
| 30 const char kUnsupported[] = "unsupported"; | 30 const char kUnsupported[] = "unsupported"; |
| 31 | 31 |
| 32 // TODO(sandersd): Audio and video variants (doesn't matter for now because the | 32 const char kSupportedVideoContainer[] = "video/webm"; |
| 33 // checks are in KeySystems). | 33 const char kSupportedAudioContainer[] = "audio/webm"; |
| 34 const char kSupportedContainer[] = "video/webm"; | |
| 35 const char kUnsupportedContainer[] = "video/foo"; | 34 const char kUnsupportedContainer[] = "video/foo"; |
| 36 | 35 |
| 37 // TODO(sandersd): Extended codec variants (requires proprietary codec support). | 36 // TODO(sandersd): Extended codec variants (requires proprietary codec support). |
| 38 const char kSupportedCodec[] = "vp8"; | 37 const char kSupportedVideoCodec[] = "vp8"; |
| 38 const char kSupportedAudioCodec[] = "opus"; | |
| 39 const char kUnsupportedCodec[] = "foo"; | 39 const char kUnsupportedCodec[] = "foo"; |
| 40 const char kUnsupportedCodecs[] = "vp8,foo"; | 40 const char kUnsupportedCodecs[] = "vp8,foo"; |
| 41 const char kSupportedCodecs[] = "vp8,vp8"; | 41 const char kSupportedVideoCodecs[] = "vp8,vp8"; |
| 42 | 42 |
| 43 const char kDefaultSecurityOrigin[] = "https://example.com/"; | 43 const char kDefaultSecurityOrigin[] = "https://example.com/"; |
| 44 | 44 |
| 45 // The IDL for MediaKeySystemConfiguration specifies some defaults, so | 45 // The IDL for MediaKeySystemConfiguration specifies some defaults, so |
| 46 // create a default object that mimics what would be created if an empty | 46 // create a default object that mimics what would be created if an empty |
| 47 // dictionary was passed in. | 47 // dictionary was passed in. |
| 48 blink::WebMediaKeySystemConfiguration DefaultConfiguration() { | 48 blink::WebMediaKeySystemConfiguration DefaultConfiguration() { |
| 49 // http://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionar y | 49 // http://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionar y |
| 50 // If this member (sessionTypes) is not present when the dictionary | 50 // If this member (sessionTypes) is not present when the dictionary |
| 51 // is passed to requestMediaKeySystemAccess(), the dictionary will | 51 // is passed to requestMediaKeySystemAccess(), the dictionary will |
| 52 // be treated as if this member is set to [ "temporary" ]. | 52 // be treated as if this member is set to [ "temporary" ]. |
| 53 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 53 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 54 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); | 54 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 55 | 55 |
| 56 blink::WebMediaKeySystemConfiguration config; | 56 blink::WebMediaKeySystemConfiguration config; |
| 57 config.label = ""; | 57 config.label = ""; |
| 58 config.sessionTypes = session_types; | 58 config.sessionTypes = session_types; |
| 59 return config; | 59 return config; |
| 60 } | 60 } |
| 61 | 61 |
| 62 // EME spec requires that at least one of |video_capabilities| and | |
| 63 // |audio_capabilities| be specified. Add a single valid audio capability | |
| 64 // to the DefaultConfiguration(). | |
| 65 blink::WebMediaKeySystemConfiguration UsableConfiguration() { | |
| 66 // blink code parses the contentType into mimeType and codecs, so mimic | |
|
xhwang
2017/02/02 23:12:49
nit: Blink
jrummell
2017/02/03 22:30:24
Done.
| |
| 67 // that here. | |
| 68 std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities(1); | |
| 69 audio_capabilities[0].mimeType = kSupportedAudioContainer; | |
| 70 audio_capabilities[0].codecs = kSupportedAudioCodec; | |
| 71 | |
| 72 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | |
| 73 config.audioCapabilities = audio_capabilities; | |
| 74 return config; | |
| 75 } | |
| 76 | |
| 62 class FakeKeySystems : public KeySystems { | 77 class FakeKeySystems : public KeySystems { |
| 63 public: | 78 public: |
| 64 ~FakeKeySystems() override { | 79 ~FakeKeySystems() override { |
| 65 } | 80 } |
| 66 | 81 |
| 67 bool IsSupportedKeySystem(const std::string& key_system) const override { | 82 bool IsSupportedKeySystem(const std::string& key_system) const override { |
| 68 if (key_system == kSupported) | 83 if (key_system == kSupported) |
| 69 return true; | 84 return true; |
| 70 return false; | 85 return false; |
| 71 } | 86 } |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 88 } | 103 } |
| 89 | 104 |
| 90 // TODO(sandersd): Secure codec simulation. | 105 // TODO(sandersd): Secure codec simulation. |
| 91 EmeConfigRule GetContentTypeConfigRule( | 106 EmeConfigRule GetContentTypeConfigRule( |
| 92 const std::string& key_system, | 107 const std::string& key_system, |
| 93 EmeMediaType media_type, | 108 EmeMediaType media_type, |
| 94 const std::string& container_mime_type, | 109 const std::string& container_mime_type, |
| 95 const std::vector<std::string>& codecs) const override { | 110 const std::vector<std::string>& codecs) const override { |
| 96 if (container_mime_type == kUnsupportedContainer) | 111 if (container_mime_type == kUnsupportedContainer) |
| 97 return EmeConfigRule::NOT_SUPPORTED; | 112 return EmeConfigRule::NOT_SUPPORTED; |
| 98 DCHECK_EQ(kSupportedContainer, container_mime_type); | 113 switch (media_type) { |
| 114 case EmeMediaType::AUDIO: | |
| 115 DCHECK_EQ(kSupportedAudioContainer, container_mime_type); | |
| 116 break; | |
| 117 case EmeMediaType::VIDEO: | |
| 118 DCHECK_EQ(kSupportedVideoContainer, container_mime_type); | |
| 119 break; | |
| 120 } | |
| 99 for (const std::string& codec : codecs) { | 121 for (const std::string& codec : codecs) { |
| 100 if (codec == kUnsupportedCodec) | 122 if (codec == kUnsupportedCodec) |
| 101 return EmeConfigRule::NOT_SUPPORTED; | 123 return EmeConfigRule::NOT_SUPPORTED; |
| 102 DCHECK_EQ(kSupportedCodec, codec); | 124 switch (media_type) { |
| 125 case EmeMediaType::AUDIO: | |
| 126 DCHECK_EQ(kSupportedAudioCodec, codec); | |
| 127 break; | |
| 128 case EmeMediaType::VIDEO: | |
| 129 DCHECK_EQ(kSupportedVideoCodec, codec); | |
| 130 break; | |
| 131 } | |
| 103 } | 132 } |
| 104 return EmeConfigRule::SUPPORTED; | 133 return EmeConfigRule::SUPPORTED; |
| 105 } | 134 } |
| 106 | 135 |
| 107 EmeConfigRule GetRobustnessConfigRule( | 136 EmeConfigRule GetRobustnessConfigRule( |
| 108 const std::string& key_system, | 137 const std::string& key_system, |
| 109 EmeMediaType media_type, | 138 EmeMediaType media_type, |
| 110 const std::string& requested_robustness) const override { | 139 const std::string& requested_robustness) const override { |
| 111 if (requested_robustness.empty()) | 140 if (requested_robustness.empty()) |
| 112 return EmeConfigRule::SUPPORTED; | 141 return EmeConfigRule::SUPPORTED; |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 287 config.persistentState); | 316 config.persistentState); |
| 288 | 317 |
| 289 // If this member is not present when the dictionary is passed to | 318 // If this member is not present when the dictionary is passed to |
| 290 // requestMediaKeySystemAccess(), the dictionary will be treated as | 319 // requestMediaKeySystemAccess(), the dictionary will be treated as |
| 291 // if this member is set to [ "temporary" ]. | 320 // if this member is set to [ "temporary" ]. |
| 292 ASSERT_EQ(1u, config.sessionTypes.size()); | 321 ASSERT_EQ(1u, config.sessionTypes.size()); |
| 293 ASSERT_EQ(blink::WebEncryptedMediaSessionType::Temporary, | 322 ASSERT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 294 config.sessionTypes[0]); | 323 config.sessionTypes[0]); |
| 295 } | 324 } |
| 296 | 325 |
| 297 // Most of the tests below assume that the default config is valid. | |
| 298 TEST_F(KeySystemConfigSelectorTest, EmptyConfig) { | 326 TEST_F(KeySystemConfigSelectorTest, EmptyConfig) { |
| 327 // EME spec requires that at least one of |video_capabilities| and | |
| 328 // |audio_capabilities| be specified, so the default config is invalid. | |
| 299 configs_.push_back(DefaultConfiguration()); | 329 configs_.push_back(DefaultConfiguration()); |
|
xhwang
2017/02/02 23:12:49
Looking at this, maybe EmptyConfiguration() would
jrummell
2017/02/03 22:30:24
Done.
| |
| 330 ASSERT_TRUE(SelectConfigReturnsError()); | |
| 331 } | |
| 332 | |
| 333 // Most of the tests below assume that the the usable config is valid. | |
| 334 // Tests that touch |video_capabilities| and/or |audio_capabilities| can | |
| 335 // modify the default config. | |
| 336 | |
| 337 TEST_F(KeySystemConfigSelectorTest, UsableConfig) { | |
| 338 configs_.push_back(UsableConfiguration()); | |
| 300 | 339 |
| 301 ASSERT_TRUE(SelectConfigReturnsConfig()); | 340 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 302 EXPECT_EQ("", config_.label); | 341 EXPECT_EQ("", config_.label); |
| 303 EXPECT_TRUE(config_.initDataTypes.isEmpty()); | 342 EXPECT_TRUE(config_.initDataTypes.isEmpty()); |
| 304 EXPECT_TRUE(config_.audioCapabilities.isEmpty()); | 343 EXPECT_EQ(1u, config_.audioCapabilities.size()); |
| 305 EXPECT_TRUE(config_.videoCapabilities.isEmpty()); | 344 EXPECT_TRUE(config_.videoCapabilities.isEmpty()); |
| 306 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 345 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 307 config_.distinctiveIdentifier); | 346 config_.distinctiveIdentifier); |
| 308 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 347 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 309 config_.persistentState); | 348 config_.persistentState); |
| 310 ASSERT_EQ(1u, config_.sessionTypes.size()); | 349 ASSERT_EQ(1u, config_.sessionTypes.size()); |
| 311 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, | 350 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 312 config_.sessionTypes[0]); | 351 config_.sessionTypes[0]); |
| 313 } | 352 } |
| 314 | 353 |
| 315 TEST_F(KeySystemConfigSelectorTest, Label) { | 354 TEST_F(KeySystemConfigSelectorTest, Label) { |
| 316 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 355 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 317 config.label = "foo"; | 356 config.label = "foo"; |
| 318 configs_.push_back(config); | 357 configs_.push_back(config); |
| 319 | 358 |
| 320 ASSERT_TRUE(SelectConfigReturnsConfig()); | 359 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 321 EXPECT_EQ("foo", config_.label); | 360 EXPECT_EQ("foo", config_.label); |
| 322 } | 361 } |
| 323 | 362 |
| 324 // --- keySystem --- | 363 // --- keySystem --- |
| 325 // Empty is not tested because the empty check is in Blink. | 364 // Empty is not tested because the empty check is in Blink. |
| 326 | 365 |
| 327 TEST_F(KeySystemConfigSelectorTest, KeySystem_NonAscii) { | 366 TEST_F(KeySystemConfigSelectorTest, KeySystem_NonAscii) { |
| 328 key_system_ = "\xde\xad\xbe\xef"; | 367 key_system_ = "\xde\xad\xbe\xef"; |
| 329 configs_.push_back(DefaultConfiguration()); | 368 configs_.push_back(UsableConfiguration()); |
| 330 ASSERT_TRUE(SelectConfigReturnsError()); | 369 ASSERT_TRUE(SelectConfigReturnsError()); |
| 331 } | 370 } |
| 332 | 371 |
| 333 TEST_F(KeySystemConfigSelectorTest, KeySystem_Unsupported) { | 372 TEST_F(KeySystemConfigSelectorTest, KeySystem_Unsupported) { |
| 334 key_system_ = kUnsupported; | 373 key_system_ = kUnsupported; |
| 335 configs_.push_back(DefaultConfiguration()); | 374 configs_.push_back(UsableConfiguration()); |
| 336 ASSERT_TRUE(SelectConfigReturnsError()); | 375 ASSERT_TRUE(SelectConfigReturnsError()); |
| 337 } | 376 } |
| 338 | 377 |
| 339 // --- initDataTypes --- | 378 // --- initDataTypes --- |
| 340 | 379 |
| 341 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_Empty) { | 380 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_Empty) { |
| 342 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 381 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 343 configs_.push_back(config); | 382 configs_.push_back(config); |
| 344 | 383 |
| 345 ASSERT_TRUE(SelectConfigReturnsConfig()); | 384 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 346 } | 385 } |
| 347 | 386 |
| 348 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_NoneSupported) { | 387 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_NoneSupported) { |
| 349 key_systems_->init_data_type_webm_supported_ = true; | 388 key_systems_->init_data_type_webm_supported_ = true; |
| 350 | 389 |
| 351 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; | 390 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 352 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); | 391 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 353 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); | 392 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); |
| 354 | 393 |
| 355 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 394 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 356 config.initDataTypes = init_data_types; | 395 config.initDataTypes = init_data_types; |
| 357 configs_.push_back(config); | 396 configs_.push_back(config); |
| 358 | 397 |
| 359 ASSERT_TRUE(SelectConfigReturnsError()); | 398 ASSERT_TRUE(SelectConfigReturnsError()); |
| 360 } | 399 } |
| 361 | 400 |
| 362 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_SubsetSupported) { | 401 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_SubsetSupported) { |
| 363 key_systems_->init_data_type_webm_supported_ = true; | 402 key_systems_->init_data_type_webm_supported_ = true; |
| 364 | 403 |
| 365 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; | 404 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 366 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); | 405 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 367 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); | 406 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); |
| 368 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Webm); | 407 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Webm); |
| 369 | 408 |
| 370 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 409 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 371 config.initDataTypes = init_data_types; | 410 config.initDataTypes = init_data_types; |
| 372 configs_.push_back(config); | 411 configs_.push_back(config); |
| 373 | 412 |
| 374 ASSERT_TRUE(SelectConfigReturnsConfig()); | 413 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 375 ASSERT_EQ(1u, config_.initDataTypes.size()); | 414 ASSERT_EQ(1u, config_.initDataTypes.size()); |
| 376 EXPECT_EQ(blink::WebEncryptedMediaInitDataType::Webm, | 415 EXPECT_EQ(blink::WebEncryptedMediaInitDataType::Webm, |
| 377 config_.initDataTypes[0]); | 416 config_.initDataTypes[0]); |
| 378 } | 417 } |
| 379 | 418 |
| 380 // --- distinctiveIdentifier --- | 419 // --- distinctiveIdentifier --- |
| 381 | 420 |
| 382 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Default) { | 421 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Default) { |
| 383 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 422 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 384 | 423 |
| 385 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 424 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 386 config.distinctiveIdentifier = | 425 config.distinctiveIdentifier = |
| 387 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 426 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 388 configs_.push_back(config); | 427 configs_.push_back(config); |
| 389 | 428 |
| 390 ASSERT_TRUE(SelectConfigReturnsConfig()); | 429 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 391 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 430 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 392 config_.distinctiveIdentifier); | 431 config_.distinctiveIdentifier); |
| 393 } | 432 } |
| 394 | 433 |
| 395 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Forced) { | 434 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Forced) { |
| 396 media_permission_->is_granted = true; | 435 media_permission_->is_granted = true; |
| 397 key_systems_->distinctive_identifier = EmeFeatureSupport::ALWAYS_ENABLED; | 436 key_systems_->distinctive_identifier = EmeFeatureSupport::ALWAYS_ENABLED; |
| 398 | 437 |
| 399 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 438 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 400 config.distinctiveIdentifier = | 439 config.distinctiveIdentifier = |
| 401 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 440 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 402 configs_.push_back(config); | 441 configs_.push_back(config); |
| 403 | 442 |
| 404 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 443 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 405 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 444 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 406 config_.distinctiveIdentifier); | 445 config_.distinctiveIdentifier); |
| 407 } | 446 } |
| 408 | 447 |
| 409 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Blocked) { | 448 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Blocked) { |
| 410 key_systems_->distinctive_identifier = EmeFeatureSupport::NOT_SUPPORTED; | 449 key_systems_->distinctive_identifier = EmeFeatureSupport::NOT_SUPPORTED; |
| 411 | 450 |
| 412 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 451 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 413 config.distinctiveIdentifier = | 452 config.distinctiveIdentifier = |
| 414 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 453 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 415 configs_.push_back(config); | 454 configs_.push_back(config); |
| 416 | 455 |
| 417 ASSERT_TRUE(SelectConfigReturnsError()); | 456 ASSERT_TRUE(SelectConfigReturnsError()); |
| 418 } | 457 } |
| 419 | 458 |
| 420 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RequestsPermission) { | 459 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RequestsPermission) { |
| 421 media_permission_->is_granted = true; | 460 media_permission_->is_granted = true; |
| 422 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 461 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 423 | 462 |
| 424 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 463 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 425 config.distinctiveIdentifier = | 464 config.distinctiveIdentifier = |
| 426 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 465 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 427 configs_.push_back(config); | 466 configs_.push_back(config); |
| 428 | 467 |
| 429 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 468 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 430 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 469 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 431 config_.distinctiveIdentifier); | 470 config_.distinctiveIdentifier); |
| 432 } | 471 } |
| 433 | 472 |
| 434 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RespectsPermission) { | 473 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RespectsPermission) { |
| 435 media_permission_->is_granted = false; | 474 media_permission_->is_granted = false; |
| 436 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 475 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 437 | 476 |
| 438 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 477 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 439 config.distinctiveIdentifier = | 478 config.distinctiveIdentifier = |
| 440 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 479 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 441 configs_.push_back(config); | 480 configs_.push_back(config); |
| 442 | 481 |
| 443 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsError()); | 482 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsError()); |
| 444 } | 483 } |
| 445 | 484 |
| 446 // --- persistentState --- | 485 // --- persistentState --- |
| 447 | 486 |
| 448 TEST_F(KeySystemConfigSelectorTest, PersistentState_Default) { | 487 TEST_F(KeySystemConfigSelectorTest, PersistentState_Default) { |
| 449 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 488 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 450 | 489 |
| 451 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 490 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 452 config.persistentState = | 491 config.persistentState = |
| 453 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 492 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 454 configs_.push_back(config); | 493 configs_.push_back(config); |
| 455 | 494 |
| 456 ASSERT_TRUE(SelectConfigReturnsConfig()); | 495 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 457 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 496 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 458 config_.persistentState); | 497 config_.persistentState); |
| 459 } | 498 } |
| 460 | 499 |
| 461 TEST_F(KeySystemConfigSelectorTest, PersistentState_Forced) { | 500 TEST_F(KeySystemConfigSelectorTest, PersistentState_Forced) { |
| 462 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; | 501 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; |
| 463 | 502 |
| 464 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 503 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 465 config.persistentState = | 504 config.persistentState = |
| 466 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 505 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 467 configs_.push_back(config); | 506 configs_.push_back(config); |
| 468 | 507 |
| 469 ASSERT_TRUE(SelectConfigReturnsConfig()); | 508 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 470 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 509 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 471 config_.persistentState); | 510 config_.persistentState); |
| 472 } | 511 } |
| 473 | 512 |
| 474 TEST_F(KeySystemConfigSelectorTest, PersistentState_Blocked) { | 513 TEST_F(KeySystemConfigSelectorTest, PersistentState_Blocked) { |
| 475 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; | 514 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; |
| 476 | 515 |
| 477 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 516 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 478 config.persistentState = | 517 config.persistentState = |
| 479 blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed; | 518 blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed; |
| 480 configs_.push_back(config); | 519 configs_.push_back(config); |
| 481 | 520 |
| 482 ASSERT_TRUE(SelectConfigReturnsError()); | 521 ASSERT_TRUE(SelectConfigReturnsError()); |
| 483 } | 522 } |
| 484 | 523 |
| 485 // --- sessionTypes --- | 524 // --- sessionTypes --- |
| 486 | 525 |
| 487 TEST_F(KeySystemConfigSelectorTest, SessionTypes_Empty) { | 526 TEST_F(KeySystemConfigSelectorTest, SessionTypes_Empty) { |
| 488 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 527 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 489 | 528 |
| 490 // Default configuration has [ "temporary" ]. | 529 // Default configuration has [ "temporary" ]. |
| 491 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 530 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 492 config.sessionTypes = session_types; | 531 config.sessionTypes = session_types; |
| 493 | 532 |
| 494 configs_.push_back(config); | 533 configs_.push_back(config); |
| 495 | 534 |
| 496 ASSERT_TRUE(SelectConfigReturnsConfig()); | 535 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 497 EXPECT_TRUE(config_.sessionTypes.isEmpty()); | 536 EXPECT_TRUE(config_.sessionTypes.isEmpty()); |
| 498 } | 537 } |
| 499 | 538 |
| 500 TEST_F(KeySystemConfigSelectorTest, SessionTypes_SubsetSupported) { | 539 TEST_F(KeySystemConfigSelectorTest, SessionTypes_SubsetSupported) { |
| 501 // Allow persistent state, as it would be required to be successful. | 540 // Allow persistent state, as it would be required to be successful. |
| 502 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 541 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 503 key_systems_->persistent_license = EmeSessionTypeSupport::NOT_SUPPORTED; | 542 key_systems_->persistent_license = EmeSessionTypeSupport::NOT_SUPPORTED; |
| 504 | 543 |
| 505 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 544 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 506 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); | 545 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 507 session_types.push_back( | 546 session_types.push_back( |
| 508 blink::WebEncryptedMediaSessionType::PersistentLicense); | 547 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 509 | 548 |
| 510 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 549 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 511 config.sessionTypes = session_types; | 550 config.sessionTypes = session_types; |
| 512 configs_.push_back(config); | 551 configs_.push_back(config); |
| 513 | 552 |
| 514 ASSERT_TRUE(SelectConfigReturnsError()); | 553 ASSERT_TRUE(SelectConfigReturnsError()); |
| 515 } | 554 } |
| 516 | 555 |
| 517 TEST_F(KeySystemConfigSelectorTest, SessionTypes_AllSupported) { | 556 TEST_F(KeySystemConfigSelectorTest, SessionTypes_AllSupported) { |
| 518 // Allow persistent state, and expect it to be required. | 557 // Allow persistent state, and expect it to be required. |
| 519 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 558 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 520 key_systems_->persistent_license = EmeSessionTypeSupport::SUPPORTED; | 559 key_systems_->persistent_license = EmeSessionTypeSupport::SUPPORTED; |
| 521 | 560 |
| 522 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 561 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 523 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); | 562 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 524 session_types.push_back( | 563 session_types.push_back( |
| 525 blink::WebEncryptedMediaSessionType::PersistentLicense); | 564 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 526 | 565 |
| 527 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 566 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 528 config.persistentState = | 567 config.persistentState = |
| 529 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 568 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 530 config.sessionTypes = session_types; | 569 config.sessionTypes = session_types; |
| 531 configs_.push_back(config); | 570 configs_.push_back(config); |
| 532 | 571 |
| 533 ASSERT_TRUE(SelectConfigReturnsConfig()); | 572 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 534 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 573 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 535 config_.persistentState); | 574 config_.persistentState); |
| 536 ASSERT_EQ(2u, config_.sessionTypes.size()); | 575 ASSERT_EQ(2u, config_.sessionTypes.size()); |
| 537 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, | 576 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 538 config_.sessionTypes[0]); | 577 config_.sessionTypes[0]); |
| 539 EXPECT_EQ(blink::WebEncryptedMediaSessionType::PersistentLicense, | 578 EXPECT_EQ(blink::WebEncryptedMediaSessionType::PersistentLicense, |
| 540 config_.sessionTypes[1]); | 579 config_.sessionTypes[1]); |
| 541 } | 580 } |
| 542 | 581 |
| 543 TEST_F(KeySystemConfigSelectorTest, SessionTypes_PermissionCanBeRequired) { | 582 TEST_F(KeySystemConfigSelectorTest, SessionTypes_PermissionCanBeRequired) { |
| 544 media_permission_->is_granted = true; | 583 media_permission_->is_granted = true; |
| 545 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 584 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 546 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 585 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 547 key_systems_->persistent_license = | 586 key_systems_->persistent_license = |
| 548 EmeSessionTypeSupport::SUPPORTED_WITH_IDENTIFIER; | 587 EmeSessionTypeSupport::SUPPORTED_WITH_IDENTIFIER; |
| 549 | 588 |
| 550 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 589 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 551 session_types.push_back( | 590 session_types.push_back( |
| 552 blink::WebEncryptedMediaSessionType::PersistentLicense); | 591 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 553 | 592 |
| 554 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 593 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 555 config.distinctiveIdentifier = | 594 config.distinctiveIdentifier = |
| 556 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 595 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 557 config.persistentState = | 596 config.persistentState = |
| 558 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 597 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 559 config.sessionTypes = session_types; | 598 config.sessionTypes = session_types; |
| 560 configs_.push_back(config); | 599 configs_.push_back(config); |
| 561 | 600 |
| 562 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 601 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 563 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 602 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 564 config_.distinctiveIdentifier); | 603 config_.distinctiveIdentifier); |
| 565 } | 604 } |
| 566 | 605 |
| 567 // --- videoCapabilities --- | 606 // --- videoCapabilities --- |
| 568 | 607 |
| 569 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Empty) { | 608 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Empty) { |
| 570 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 609 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 571 configs_.push_back(config); | 610 configs_.push_back(config); |
| 572 | 611 |
| 573 ASSERT_TRUE(SelectConfigReturnsConfig()); | 612 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 574 } | 613 } |
| 575 | 614 |
| 576 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_NoneSupported) { | 615 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_NoneSupported) { |
| 577 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 616 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 578 video_capabilities[0].contentType = "a"; | 617 video_capabilities[0].contentType = "a"; |
| 579 video_capabilities[0].mimeType = kUnsupportedContainer; | 618 video_capabilities[0].mimeType = kUnsupportedContainer; |
| 580 video_capabilities[1].contentType = "b"; | 619 video_capabilities[1].contentType = "b"; |
| 581 video_capabilities[1].mimeType = kSupportedContainer; | 620 video_capabilities[1].mimeType = kSupportedVideoContainer; |
| 582 video_capabilities[1].codecs = kUnsupportedCodec; | 621 video_capabilities[1].codecs = kUnsupportedCodec; |
| 583 | 622 |
| 584 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 623 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 585 config.videoCapabilities = video_capabilities; | 624 config.videoCapabilities = video_capabilities; |
| 586 configs_.push_back(config); | 625 configs_.push_back(config); |
| 587 | 626 |
| 588 ASSERT_TRUE(SelectConfigReturnsError()); | 627 ASSERT_TRUE(SelectConfigReturnsError()); |
| 589 } | 628 } |
| 590 | 629 |
| 591 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_SubsetSupported) { | 630 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_SubsetSupported) { |
| 592 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 631 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 593 video_capabilities[0].contentType = "a"; | 632 video_capabilities[0].contentType = "a"; |
| 594 video_capabilities[0].mimeType = kUnsupportedContainer; | 633 video_capabilities[0].mimeType = kUnsupportedContainer; |
| 595 video_capabilities[1].contentType = "b"; | 634 video_capabilities[1].contentType = "b"; |
| 596 video_capabilities[1].mimeType = kSupportedContainer; | 635 video_capabilities[1].mimeType = kSupportedVideoContainer; |
| 597 | 636 |
| 598 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 637 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 599 config.videoCapabilities = video_capabilities; | 638 config.videoCapabilities = video_capabilities; |
| 600 configs_.push_back(config); | 639 configs_.push_back(config); |
| 601 | 640 |
| 602 ASSERT_TRUE(SelectConfigReturnsConfig()); | 641 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 603 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 642 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 604 EXPECT_EQ("b", config_.videoCapabilities[0].contentType); | 643 EXPECT_EQ("b", config_.videoCapabilities[0].contentType); |
| 605 EXPECT_EQ(kSupportedContainer, config_.videoCapabilities[0].mimeType); | 644 EXPECT_EQ(kSupportedVideoContainer, config_.videoCapabilities[0].mimeType); |
| 606 } | 645 } |
| 607 | 646 |
| 608 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_AllSupported) { | 647 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_AllSupported) { |
| 609 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 648 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 610 video_capabilities[0].contentType = "a"; | 649 video_capabilities[0].contentType = "a"; |
| 611 video_capabilities[0].mimeType = kSupportedContainer; | 650 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 612 video_capabilities[1].contentType = "b"; | 651 video_capabilities[1].contentType = "b"; |
| 613 video_capabilities[1].mimeType = kSupportedContainer; | 652 video_capabilities[1].mimeType = kSupportedVideoContainer; |
| 614 video_capabilities[1].codecs = kSupportedCodecs; | 653 video_capabilities[1].codecs = kSupportedVideoCodecs; |
| 615 | 654 |
| 616 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 655 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 617 config.videoCapabilities = video_capabilities; | 656 config.videoCapabilities = video_capabilities; |
| 618 configs_.push_back(config); | 657 configs_.push_back(config); |
| 619 | 658 |
| 620 ASSERT_TRUE(SelectConfigReturnsConfig()); | 659 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 621 ASSERT_EQ(2u, config_.videoCapabilities.size()); | 660 ASSERT_EQ(2u, config_.videoCapabilities.size()); |
| 622 EXPECT_EQ("a", config_.videoCapabilities[0].contentType); | 661 EXPECT_EQ("a", config_.videoCapabilities[0].contentType); |
| 623 EXPECT_EQ("b", config_.videoCapabilities[1].contentType); | 662 EXPECT_EQ("b", config_.videoCapabilities[1].contentType); |
| 624 } | 663 } |
| 625 | 664 |
| 626 TEST_F(KeySystemConfigSelectorTest, | 665 TEST_F(KeySystemConfigSelectorTest, |
| 627 VideoCapabilities_Codecs_SubsetSupported) { | 666 VideoCapabilities_Codecs_SubsetSupported) { |
| 628 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 667 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 629 video_capabilities[0].contentType = "a"; | 668 video_capabilities[0].contentType = "a"; |
| 630 video_capabilities[0].mimeType = kSupportedContainer; | 669 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 631 video_capabilities[0].codecs = kUnsupportedCodecs; | 670 video_capabilities[0].codecs = kUnsupportedCodecs; |
| 632 | 671 |
| 633 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 672 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 634 config.videoCapabilities = video_capabilities; | 673 config.videoCapabilities = video_capabilities; |
| 635 configs_.push_back(config); | 674 configs_.push_back(config); |
| 636 | 675 |
| 637 ASSERT_TRUE(SelectConfigReturnsError()); | 676 ASSERT_TRUE(SelectConfigReturnsError()); |
| 638 } | 677 } |
| 639 | 678 |
| 640 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Codecs_AllSupported) { | 679 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Codecs_AllSupported) { |
| 641 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 680 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 642 video_capabilities[0].contentType = "a"; | 681 video_capabilities[0].contentType = "a"; |
| 643 video_capabilities[0].mimeType = kSupportedContainer; | 682 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 644 video_capabilities[0].codecs = kSupportedCodecs; | 683 video_capabilities[0].codecs = kSupportedVideoCodecs; |
| 645 | 684 |
| 646 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 685 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 647 config.videoCapabilities = video_capabilities; | 686 config.videoCapabilities = video_capabilities; |
| 648 configs_.push_back(config); | 687 configs_.push_back(config); |
| 649 | 688 |
| 650 ASSERT_TRUE(SelectConfigReturnsConfig()); | 689 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 651 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 690 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 652 EXPECT_EQ(kSupportedCodecs, config_.videoCapabilities[0].codecs); | 691 EXPECT_EQ(kSupportedVideoCodecs, config_.videoCapabilities[0].codecs); |
| 653 } | 692 } |
| 654 | 693 |
| 655 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Empty) { | 694 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Empty) { |
| 656 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 695 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 657 video_capabilities[0].contentType = "a"; | 696 video_capabilities[0].contentType = "a"; |
| 658 video_capabilities[0].mimeType = kSupportedContainer; | 697 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 659 ASSERT_TRUE(video_capabilities[0].robustness.isEmpty()); | 698 ASSERT_TRUE(video_capabilities[0].robustness.isEmpty()); |
| 660 | 699 |
| 661 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 700 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 662 config.videoCapabilities = video_capabilities; | 701 config.videoCapabilities = video_capabilities; |
| 663 configs_.push_back(config); | 702 configs_.push_back(config); |
| 664 | 703 |
| 665 ASSERT_TRUE(SelectConfigReturnsConfig()); | 704 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 666 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 705 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 667 EXPECT_TRUE(config_.videoCapabilities[0].robustness.isEmpty()); | 706 EXPECT_TRUE(config_.videoCapabilities[0].robustness.isEmpty()); |
| 668 } | 707 } |
| 669 | 708 |
| 670 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Supported) { | 709 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Supported) { |
| 671 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 710 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 672 video_capabilities[0].contentType = "a"; | 711 video_capabilities[0].contentType = "a"; |
| 673 video_capabilities[0].mimeType = kSupportedContainer; | 712 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 674 video_capabilities[0].robustness = kSupported; | 713 video_capabilities[0].robustness = kSupported; |
| 675 | 714 |
| 676 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 715 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 677 config.videoCapabilities = video_capabilities; | 716 config.videoCapabilities = video_capabilities; |
| 678 configs_.push_back(config); | 717 configs_.push_back(config); |
| 679 | 718 |
| 680 ASSERT_TRUE(SelectConfigReturnsConfig()); | 719 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 681 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 720 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 682 EXPECT_EQ(kSupported, config_.videoCapabilities[0].robustness); | 721 EXPECT_EQ(kSupported, config_.videoCapabilities[0].robustness); |
| 683 } | 722 } |
| 684 | 723 |
| 685 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Unsupported) { | 724 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Unsupported) { |
| 686 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 725 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 687 video_capabilities[0].contentType = "a"; | 726 video_capabilities[0].contentType = "a"; |
| 688 video_capabilities[0].mimeType = kSupportedContainer; | 727 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 689 video_capabilities[0].robustness = kUnsupported; | 728 video_capabilities[0].robustness = kUnsupported; |
| 690 | 729 |
| 691 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 730 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 692 config.videoCapabilities = video_capabilities; | 731 config.videoCapabilities = video_capabilities; |
| 693 configs_.push_back(config); | 732 configs_.push_back(config); |
| 694 | 733 |
| 695 ASSERT_TRUE(SelectConfigReturnsError()); | 734 ASSERT_TRUE(SelectConfigReturnsError()); |
| 696 } | 735 } |
| 697 | 736 |
| 698 TEST_F(KeySystemConfigSelectorTest, | 737 TEST_F(KeySystemConfigSelectorTest, |
| 699 VideoCapabilities_Robustness_PermissionCanBeRequired) { | 738 VideoCapabilities_Robustness_PermissionCanBeRequired) { |
| 700 media_permission_->is_granted = true; | 739 media_permission_->is_granted = true; |
| 701 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 740 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 702 | 741 |
| 703 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 742 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 704 video_capabilities[0].contentType = "a"; | 743 video_capabilities[0].contentType = "a"; |
| 705 video_capabilities[0].mimeType = kSupportedContainer; | 744 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 706 video_capabilities[0].robustness = kRequireIdentifier; | 745 video_capabilities[0].robustness = kRequireIdentifier; |
| 707 | 746 |
| 708 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 747 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 709 config.videoCapabilities = video_capabilities; | 748 config.videoCapabilities = video_capabilities; |
| 710 configs_.push_back(config); | 749 configs_.push_back(config); |
| 711 | 750 |
| 712 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 751 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 713 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 752 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 714 config_.distinctiveIdentifier); | 753 config_.distinctiveIdentifier); |
| 715 } | 754 } |
| 716 | 755 |
| 717 TEST_F(KeySystemConfigSelectorTest, | 756 TEST_F(KeySystemConfigSelectorTest, |
| 718 VideoCapabilities_Robustness_PermissionCanBeRecommended) { | 757 VideoCapabilities_Robustness_PermissionCanBeRecommended) { |
| 719 media_permission_->is_granted = false; | 758 media_permission_->is_granted = false; |
| 720 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 759 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 721 | 760 |
| 722 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 761 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 723 video_capabilities[0].contentType = "a"; | 762 video_capabilities[0].contentType = "a"; |
| 724 video_capabilities[0].mimeType = kSupportedContainer; | 763 video_capabilities[0].mimeType = kSupportedVideoContainer; |
| 725 video_capabilities[0].robustness = kRecommendIdentifier; | 764 video_capabilities[0].robustness = kRecommendIdentifier; |
| 726 | 765 |
| 727 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 766 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 728 config.videoCapabilities = video_capabilities; | 767 config.videoCapabilities = video_capabilities; |
| 729 configs_.push_back(config); | 768 configs_.push_back(config); |
| 730 | 769 |
| 731 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 770 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 732 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 771 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 733 config_.distinctiveIdentifier); | 772 config_.distinctiveIdentifier); |
| 734 } | 773 } |
| 735 | 774 |
| 736 // --- audioCapabilities --- | 775 // --- audioCapabilities --- |
| 737 // These are handled by the same code as |videoCapabilities|, so only minimal | 776 // These are handled by the same code as |videoCapabilities|, so only minimal |
| 738 // additional testing is done. | 777 // additional testing is done. |
| 739 | 778 |
| 740 TEST_F(KeySystemConfigSelectorTest, AudioCapabilities_SubsetSupported) { | 779 TEST_F(KeySystemConfigSelectorTest, AudioCapabilities_SubsetSupported) { |
| 741 std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities(2); | 780 std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities(2); |
| 742 audio_capabilities[0].contentType = "a"; | 781 audio_capabilities[0].contentType = "a"; |
| 743 audio_capabilities[0].mimeType = kUnsupportedContainer; | 782 audio_capabilities[0].mimeType = kUnsupportedContainer; |
| 744 audio_capabilities[1].contentType = "b"; | 783 audio_capabilities[1].contentType = "b"; |
| 745 audio_capabilities[1].mimeType = kSupportedContainer; | 784 audio_capabilities[1].mimeType = kSupportedAudioContainer; |
| 746 | 785 |
| 747 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 786 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 748 config.audioCapabilities = audio_capabilities; | 787 config.audioCapabilities = audio_capabilities; |
| 749 configs_.push_back(config); | 788 configs_.push_back(config); |
| 750 | 789 |
| 751 ASSERT_TRUE(SelectConfigReturnsConfig()); | 790 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 752 ASSERT_EQ(1u, config_.audioCapabilities.size()); | 791 ASSERT_EQ(1u, config_.audioCapabilities.size()); |
| 753 EXPECT_EQ("b", config_.audioCapabilities[0].contentType); | 792 EXPECT_EQ("b", config_.audioCapabilities[0].contentType); |
| 754 EXPECT_EQ(kSupportedContainer, config_.audioCapabilities[0].mimeType); | 793 EXPECT_EQ(kSupportedAudioContainer, config_.audioCapabilities[0].mimeType); |
| 755 } | 794 } |
| 756 | 795 |
| 757 // --- Multiple configurations --- | 796 // --- Multiple configurations --- |
| 758 | 797 |
| 759 TEST_F(KeySystemConfigSelectorTest, Configurations_AllSupported) { | 798 TEST_F(KeySystemConfigSelectorTest, Configurations_AllSupported) { |
| 760 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); | 799 blink::WebMediaKeySystemConfiguration config = UsableConfiguration(); |
| 761 config.label = "a"; | 800 config.label = "a"; |
| 762 configs_.push_back(config); | 801 configs_.push_back(config); |
| 763 config.label = "b"; | 802 config.label = "b"; |
| 764 configs_.push_back(config); | 803 configs_.push_back(config); |
| 765 | 804 |
| 766 ASSERT_TRUE(SelectConfigReturnsConfig()); | 805 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 767 ASSERT_EQ("a", config_.label); | 806 ASSERT_EQ("a", config_.label); |
| 768 } | 807 } |
| 769 | 808 |
| 770 TEST_F(KeySystemConfigSelectorTest, Configurations_SubsetSupported) { | 809 TEST_F(KeySystemConfigSelectorTest, Configurations_SubsetSupported) { |
| 771 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); | 810 blink::WebMediaKeySystemConfiguration config1 = UsableConfiguration(); |
| 772 config1.label = "a"; | 811 config1.label = "a"; |
| 773 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; | 812 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 774 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); | 813 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 775 config1.initDataTypes = init_data_types; | 814 config1.initDataTypes = init_data_types; |
| 776 configs_.push_back(config1); | 815 configs_.push_back(config1); |
| 777 | 816 |
| 778 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); | 817 blink::WebMediaKeySystemConfiguration config2 = UsableConfiguration(); |
| 779 config2.label = "b"; | 818 config2.label = "b"; |
| 780 configs_.push_back(config2); | 819 configs_.push_back(config2); |
| 781 | 820 |
| 782 ASSERT_TRUE(SelectConfigReturnsConfig()); | 821 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 783 ASSERT_EQ("b", config_.label); | 822 ASSERT_EQ("b", config_.label); |
| 784 } | 823 } |
| 785 | 824 |
| 786 TEST_F(KeySystemConfigSelectorTest, | 825 TEST_F(KeySystemConfigSelectorTest, |
| 787 Configurations_FirstRequiresPermission_Allowed) { | 826 Configurations_FirstRequiresPermission_Allowed) { |
| 788 media_permission_->is_granted = true; | 827 media_permission_->is_granted = true; |
| 789 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 828 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 790 | 829 |
| 791 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); | 830 blink::WebMediaKeySystemConfiguration config1 = UsableConfiguration(); |
| 792 config1.label = "a"; | 831 config1.label = "a"; |
| 793 config1.distinctiveIdentifier = | 832 config1.distinctiveIdentifier = |
| 794 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 833 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 795 configs_.push_back(config1); | 834 configs_.push_back(config1); |
| 796 | 835 |
| 797 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); | 836 blink::WebMediaKeySystemConfiguration config2 = UsableConfiguration(); |
| 798 config2.label = "b"; | 837 config2.label = "b"; |
| 799 configs_.push_back(config2); | 838 configs_.push_back(config2); |
| 800 | 839 |
| 801 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 840 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 802 ASSERT_EQ("a", config_.label); | 841 ASSERT_EQ("a", config_.label); |
| 803 } | 842 } |
| 804 | 843 |
| 805 TEST_F(KeySystemConfigSelectorTest, | 844 TEST_F(KeySystemConfigSelectorTest, |
| 806 Configurations_FirstRequiresPermission_Rejected) { | 845 Configurations_FirstRequiresPermission_Rejected) { |
| 807 media_permission_->is_granted = false; | 846 media_permission_->is_granted = false; |
| 808 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 847 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 809 | 848 |
| 810 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); | 849 blink::WebMediaKeySystemConfiguration config1 = UsableConfiguration(); |
| 811 config1.label = "a"; | 850 config1.label = "a"; |
| 812 config1.distinctiveIdentifier = | 851 config1.distinctiveIdentifier = |
| 813 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 852 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 814 configs_.push_back(config1); | 853 configs_.push_back(config1); |
| 815 | 854 |
| 816 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); | 855 blink::WebMediaKeySystemConfiguration config2 = UsableConfiguration(); |
| 817 config2.label = "b"; | 856 config2.label = "b"; |
| 818 configs_.push_back(config2); | 857 configs_.push_back(config2); |
| 819 | 858 |
| 820 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 859 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 821 ASSERT_EQ("b", config_.label); | 860 ASSERT_EQ("b", config_.label); |
| 822 } | 861 } |
| 823 | 862 |
| 824 } // namespace media | 863 } // namespace media |
| OLD | NEW |