| 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 24 matching lines...) Expand all Loading... |
| 35 const char kUnsupportedContainer[] = "video/foo"; | 35 const char kUnsupportedContainer[] = "video/foo"; |
| 36 | 36 |
| 37 // TODO(sandersd): Extended codec variants (requires proprietary codec support). | 37 // TODO(sandersd): Extended codec variants (requires proprietary codec support). |
| 38 const char kSupportedCodec[] = "vp8"; | 38 const char kSupportedCodec[] = "vp8"; |
| 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 kSupportedCodecs[] = "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 |
| 46 // create a default object that mimics what would be created if an empty |
| 47 // dictionary was passed in. |
| 48 blink::WebMediaKeySystemConfiguration DefaultConfiguration() { |
| 49 // http://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionar
y |
| 50 // If this member (sessionTypes) is not present when the dictionary |
| 51 // is passed to requestMediaKeySystemAccess(), the dictionary will |
| 52 // be treated as if this member is set to [ "temporary" ]. |
| 53 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 54 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 55 |
| 56 blink::WebMediaKeySystemConfiguration config; |
| 57 config.label = ""; |
| 58 config.sessionTypes = session_types; |
| 59 return config; |
| 60 } |
| 61 |
| 45 class FakeKeySystems : public KeySystems { | 62 class FakeKeySystems : public KeySystems { |
| 46 public: | 63 public: |
| 47 ~FakeKeySystems() override { | 64 ~FakeKeySystems() override { |
| 48 } | 65 } |
| 49 | 66 |
| 50 bool IsSupportedKeySystem(const std::string& key_system) const override { | 67 bool IsSupportedKeySystem(const std::string& key_system) const override { |
| 51 if (key_system == kSupported) | 68 if (key_system == kSupported) |
| 52 return true; | 69 return true; |
| 53 return false; | 70 return false; |
| 54 } | 71 } |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 | 254 |
| 238 DISALLOW_COPY_AND_ASSIGN(KeySystemConfigSelectorTest); | 255 DISALLOW_COPY_AND_ASSIGN(KeySystemConfigSelectorTest); |
| 239 }; | 256 }; |
| 240 | 257 |
| 241 // --- Basics --- | 258 // --- Basics --- |
| 242 | 259 |
| 243 TEST_F(KeySystemConfigSelectorTest, NoConfigs) { | 260 TEST_F(KeySystemConfigSelectorTest, NoConfigs) { |
| 244 ASSERT_TRUE(SelectConfigReturnsError()); | 261 ASSERT_TRUE(SelectConfigReturnsError()); |
| 245 } | 262 } |
| 246 | 263 |
| 247 // Most of the tests below assume that an empty config is valid. | 264 TEST_F(KeySystemConfigSelectorTest, DefaultConfig) { |
| 265 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 266 |
| 267 // label = ""; |
| 268 ASSERT_EQ("", config.label); |
| 269 |
| 270 // initDataTypes = []; |
| 271 ASSERT_EQ(0u, config.initDataTypes.size()); |
| 272 |
| 273 // audioCapabilities = []; |
| 274 ASSERT_EQ(0u, config.audioCapabilities.size()); |
| 275 |
| 276 // videoCapabilities = []; |
| 277 ASSERT_EQ(0u, config.videoCapabilities.size()); |
| 278 |
| 279 // distinctiveIdentifier = "optional"; |
| 280 ASSERT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Optional, |
| 281 config.distinctiveIdentifier); |
| 282 |
| 283 // persistentState = "optional"; |
| 284 ASSERT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Optional, |
| 285 config.persistentState); |
| 286 |
| 287 // If this member is not present when the dictionary is passed to |
| 288 // requestMediaKeySystemAccess(), the dictionary will be treated as |
| 289 // if this member is set to [ "temporary" ]. |
| 290 ASSERT_EQ(1u, config.sessionTypes.size()); |
| 291 ASSERT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 292 config.sessionTypes[0]); |
| 293 } |
| 294 |
| 295 // Most of the tests below assume that the default config is valid. |
| 248 TEST_F(KeySystemConfigSelectorTest, EmptyConfig) { | 296 TEST_F(KeySystemConfigSelectorTest, EmptyConfig) { |
| 249 configs_.push_back(blink::WebMediaKeySystemConfiguration()); | 297 configs_.push_back(DefaultConfiguration()); |
| 250 | 298 |
| 251 ASSERT_TRUE(SelectConfigReturnsConfig()); | 299 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 252 EXPECT_TRUE(config_.label.isNull()); | 300 EXPECT_EQ("", config_.label); |
| 253 EXPECT_TRUE(config_.initDataTypes.isEmpty()); | 301 EXPECT_TRUE(config_.initDataTypes.isEmpty()); |
| 254 EXPECT_TRUE(config_.audioCapabilities.isEmpty()); | 302 EXPECT_TRUE(config_.audioCapabilities.isEmpty()); |
| 255 EXPECT_TRUE(config_.videoCapabilities.isEmpty()); | 303 EXPECT_TRUE(config_.videoCapabilities.isEmpty()); |
| 256 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 304 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 257 config_.distinctiveIdentifier); | 305 config_.distinctiveIdentifier); |
| 258 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 306 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 259 config_.persistentState); | 307 config_.persistentState); |
| 260 ASSERT_EQ(1u, config_.sessionTypes.size()); | 308 ASSERT_EQ(1u, config_.sessionTypes.size()); |
| 261 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, | 309 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 262 config_.sessionTypes[0]); | 310 config_.sessionTypes[0]); |
| 263 } | 311 } |
| 264 | 312 |
| 265 TEST_F(KeySystemConfigSelectorTest, Label) { | 313 TEST_F(KeySystemConfigSelectorTest, Label) { |
| 266 blink::WebMediaKeySystemConfiguration config; | 314 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 267 config.label = "foo"; | 315 config.label = "foo"; |
| 268 configs_.push_back(config); | 316 configs_.push_back(config); |
| 269 | 317 |
| 270 ASSERT_TRUE(SelectConfigReturnsConfig()); | 318 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 271 EXPECT_EQ("foo", config_.label); | 319 EXPECT_EQ("foo", config_.label); |
| 272 } | 320 } |
| 273 | 321 |
| 274 // --- keySystem --- | 322 // --- keySystem --- |
| 275 // Empty is not tested because the empty check is in Blink. | 323 // Empty is not tested because the empty check is in Blink. |
| 276 | 324 |
| 277 TEST_F(KeySystemConfigSelectorTest, KeySystem_NonAscii) { | 325 TEST_F(KeySystemConfigSelectorTest, KeySystem_NonAscii) { |
| 278 key_system_ = "\xde\xad\xbe\xef"; | 326 key_system_ = "\xde\xad\xbe\xef"; |
| 279 configs_.push_back(blink::WebMediaKeySystemConfiguration()); | 327 configs_.push_back(DefaultConfiguration()); |
| 280 ASSERT_TRUE(SelectConfigReturnsError()); | 328 ASSERT_TRUE(SelectConfigReturnsError()); |
| 281 } | 329 } |
| 282 | 330 |
| 283 TEST_F(KeySystemConfigSelectorTest, KeySystem_Unsupported) { | 331 TEST_F(KeySystemConfigSelectorTest, KeySystem_Unsupported) { |
| 284 key_system_ = kUnsupported; | 332 key_system_ = kUnsupported; |
| 285 configs_.push_back(blink::WebMediaKeySystemConfiguration()); | 333 configs_.push_back(DefaultConfiguration()); |
| 286 ASSERT_TRUE(SelectConfigReturnsError()); | 334 ASSERT_TRUE(SelectConfigReturnsError()); |
| 287 } | 335 } |
| 288 | 336 |
| 289 // --- initDataTypes --- | 337 // --- initDataTypes --- |
| 290 | 338 |
| 291 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_Empty) { | 339 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_Empty) { |
| 292 blink::WebMediaKeySystemConfiguration config; | 340 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 293 config.hasInitDataTypes = true; | |
| 294 configs_.push_back(config); | 341 configs_.push_back(config); |
| 295 | 342 |
| 296 ASSERT_TRUE(SelectConfigReturnsError()); | 343 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 297 } | 344 } |
| 298 | 345 |
| 299 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_NoneSupported) { | 346 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_NoneSupported) { |
| 300 key_systems_->init_data_type_webm_supported_ = true; | 347 key_systems_->init_data_type_webm_supported_ = true; |
| 301 | 348 |
| 302 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; | 349 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 303 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); | 350 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 304 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); | 351 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); |
| 305 | 352 |
| 306 blink::WebMediaKeySystemConfiguration config; | 353 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 307 config.hasInitDataTypes = true; | |
| 308 config.initDataTypes = init_data_types; | 354 config.initDataTypes = init_data_types; |
| 309 configs_.push_back(config); | 355 configs_.push_back(config); |
| 310 | 356 |
| 311 ASSERT_TRUE(SelectConfigReturnsError()); | 357 ASSERT_TRUE(SelectConfigReturnsError()); |
| 312 } | 358 } |
| 313 | 359 |
| 314 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_SubsetSupported) { | 360 TEST_F(KeySystemConfigSelectorTest, InitDataTypes_SubsetSupported) { |
| 315 key_systems_->init_data_type_webm_supported_ = true; | 361 key_systems_->init_data_type_webm_supported_ = true; |
| 316 | 362 |
| 317 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; | 363 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 318 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); | 364 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 319 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); | 365 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Cenc); |
| 320 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Webm); | 366 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Webm); |
| 321 | 367 |
| 322 blink::WebMediaKeySystemConfiguration config; | 368 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 323 config.hasInitDataTypes = true; | |
| 324 config.initDataTypes = init_data_types; | 369 config.initDataTypes = init_data_types; |
| 325 configs_.push_back(config); | 370 configs_.push_back(config); |
| 326 | 371 |
| 327 ASSERT_TRUE(SelectConfigReturnsConfig()); | 372 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 328 ASSERT_EQ(1u, config_.initDataTypes.size()); | 373 ASSERT_EQ(1u, config_.initDataTypes.size()); |
| 329 EXPECT_EQ(blink::WebEncryptedMediaInitDataType::Webm, | 374 EXPECT_EQ(blink::WebEncryptedMediaInitDataType::Webm, |
| 330 config_.initDataTypes[0]); | 375 config_.initDataTypes[0]); |
| 331 } | 376 } |
| 332 | 377 |
| 333 // --- distinctiveIdentifier --- | 378 // --- distinctiveIdentifier --- |
| 334 | 379 |
| 335 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Default) { | 380 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Default) { |
| 336 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 381 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 337 | 382 |
| 338 blink::WebMediaKeySystemConfiguration config; | 383 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 339 config.distinctiveIdentifier = | 384 config.distinctiveIdentifier = |
| 340 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 385 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 341 configs_.push_back(config); | 386 configs_.push_back(config); |
| 342 | 387 |
| 343 ASSERT_TRUE(SelectConfigReturnsConfig()); | 388 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 344 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 389 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 345 config_.distinctiveIdentifier); | 390 config_.distinctiveIdentifier); |
| 346 } | 391 } |
| 347 | 392 |
| 348 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Forced) { | 393 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Forced) { |
| 349 media_permission_->is_granted = true; | 394 media_permission_->is_granted = true; |
| 350 key_systems_->distinctive_identifier = EmeFeatureSupport::ALWAYS_ENABLED; | 395 key_systems_->distinctive_identifier = EmeFeatureSupport::ALWAYS_ENABLED; |
| 351 | 396 |
| 352 blink::WebMediaKeySystemConfiguration config; | 397 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 353 config.distinctiveIdentifier = | 398 config.distinctiveIdentifier = |
| 354 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 399 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 355 configs_.push_back(config); | 400 configs_.push_back(config); |
| 356 | 401 |
| 357 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 402 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 358 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 403 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 359 config_.distinctiveIdentifier); | 404 config_.distinctiveIdentifier); |
| 360 } | 405 } |
| 361 | 406 |
| 362 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Blocked) { | 407 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_Blocked) { |
| 363 key_systems_->distinctive_identifier = EmeFeatureSupport::NOT_SUPPORTED; | 408 key_systems_->distinctive_identifier = EmeFeatureSupport::NOT_SUPPORTED; |
| 364 | 409 |
| 365 blink::WebMediaKeySystemConfiguration config; | 410 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 366 config.distinctiveIdentifier = | 411 config.distinctiveIdentifier = |
| 367 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 412 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 368 configs_.push_back(config); | 413 configs_.push_back(config); |
| 369 | 414 |
| 370 ASSERT_TRUE(SelectConfigReturnsError()); | 415 ASSERT_TRUE(SelectConfigReturnsError()); |
| 371 } | 416 } |
| 372 | 417 |
| 373 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RequestsPermission) { | 418 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RequestsPermission) { |
| 374 media_permission_->is_granted = true; | 419 media_permission_->is_granted = true; |
| 375 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 420 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 376 | 421 |
| 377 blink::WebMediaKeySystemConfiguration config; | 422 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 378 config.distinctiveIdentifier = | 423 config.distinctiveIdentifier = |
| 379 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 424 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 380 configs_.push_back(config); | 425 configs_.push_back(config); |
| 381 | 426 |
| 382 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 427 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 383 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 428 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 384 config_.distinctiveIdentifier); | 429 config_.distinctiveIdentifier); |
| 385 } | 430 } |
| 386 | 431 |
| 387 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RespectsPermission) { | 432 TEST_F(KeySystemConfigSelectorTest, DistinctiveIdentifier_RespectsPermission) { |
| 388 media_permission_->is_granted = false; | 433 media_permission_->is_granted = false; |
| 389 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 434 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 390 | 435 |
| 391 blink::WebMediaKeySystemConfiguration config; | 436 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 392 config.distinctiveIdentifier = | 437 config.distinctiveIdentifier = |
| 393 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 438 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 394 configs_.push_back(config); | 439 configs_.push_back(config); |
| 395 | 440 |
| 396 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsError()); | 441 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsError()); |
| 397 } | 442 } |
| 398 | 443 |
| 399 // --- persistentState --- | 444 // --- persistentState --- |
| 400 | 445 |
| 401 TEST_F(KeySystemConfigSelectorTest, PersistentState_Default) { | 446 TEST_F(KeySystemConfigSelectorTest, PersistentState_Default) { |
| 402 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 447 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 403 | 448 |
| 404 blink::WebMediaKeySystemConfiguration config; | 449 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 405 config.persistentState = | 450 config.persistentState = |
| 406 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 451 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 407 configs_.push_back(config); | 452 configs_.push_back(config); |
| 408 | 453 |
| 409 ASSERT_TRUE(SelectConfigReturnsConfig()); | 454 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 410 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 455 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 411 config_.persistentState); | 456 config_.persistentState); |
| 412 } | 457 } |
| 413 | 458 |
| 414 TEST_F(KeySystemConfigSelectorTest, PersistentState_Forced) { | 459 TEST_F(KeySystemConfigSelectorTest, PersistentState_Forced) { |
| 415 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; | 460 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; |
| 416 | 461 |
| 417 blink::WebMediaKeySystemConfiguration config; | 462 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 418 config.persistentState = | 463 config.persistentState = |
| 419 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 464 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 420 configs_.push_back(config); | 465 configs_.push_back(config); |
| 421 | 466 |
| 422 ASSERT_TRUE(SelectConfigReturnsConfig()); | 467 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 423 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 468 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 424 config_.persistentState); | 469 config_.persistentState); |
| 425 } | 470 } |
| 426 | 471 |
| 427 TEST_F(KeySystemConfigSelectorTest, PersistentState_Blocked) { | 472 TEST_F(KeySystemConfigSelectorTest, PersistentState_Blocked) { |
| 428 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; | 473 key_systems_->persistent_state = EmeFeatureSupport::ALWAYS_ENABLED; |
| 429 | 474 |
| 430 blink::WebMediaKeySystemConfiguration config; | 475 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 431 config.persistentState = | 476 config.persistentState = |
| 432 blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed; | 477 blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed; |
| 433 configs_.push_back(config); | 478 configs_.push_back(config); |
| 434 | 479 |
| 435 ASSERT_TRUE(SelectConfigReturnsError()); | 480 ASSERT_TRUE(SelectConfigReturnsError()); |
| 436 } | 481 } |
| 437 | 482 |
| 438 // --- sessionTypes --- | 483 // --- sessionTypes --- |
| 439 | 484 |
| 440 TEST_F(KeySystemConfigSelectorTest, SessionTypes_Empty) { | 485 TEST_F(KeySystemConfigSelectorTest, SessionTypes_Empty) { |
| 441 blink::WebMediaKeySystemConfiguration config; | 486 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 442 config.hasSessionTypes = true; | 487 |
| 488 // Default configuration has [ "temporary" ]. |
| 489 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 490 config.sessionTypes = session_types; |
| 491 |
| 443 configs_.push_back(config); | 492 configs_.push_back(config); |
| 444 | 493 |
| 445 ASSERT_TRUE(SelectConfigReturnsConfig()); | 494 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 446 EXPECT_TRUE(config_.sessionTypes.isEmpty()); | 495 EXPECT_TRUE(config_.sessionTypes.isEmpty()); |
| 447 } | 496 } |
| 448 | 497 |
| 449 TEST_F(KeySystemConfigSelectorTest, SessionTypes_SubsetSupported) { | 498 TEST_F(KeySystemConfigSelectorTest, SessionTypes_SubsetSupported) { |
| 450 // Allow persistent state, as it would be required to be successful. | 499 // Allow persistent state, as it would be required to be successful. |
| 451 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 500 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 452 key_systems_->persistent_license = EmeSessionTypeSupport::NOT_SUPPORTED; | 501 key_systems_->persistent_license = EmeSessionTypeSupport::NOT_SUPPORTED; |
| 453 | 502 |
| 454 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 503 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 455 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); | 504 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 456 session_types.push_back( | 505 session_types.push_back( |
| 457 blink::WebEncryptedMediaSessionType::PersistentLicense); | 506 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 458 | 507 |
| 459 blink::WebMediaKeySystemConfiguration config; | 508 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 460 config.hasSessionTypes = true; | |
| 461 config.sessionTypes = session_types; | 509 config.sessionTypes = session_types; |
| 462 configs_.push_back(config); | 510 configs_.push_back(config); |
| 463 | 511 |
| 464 ASSERT_TRUE(SelectConfigReturnsError()); | 512 ASSERT_TRUE(SelectConfigReturnsError()); |
| 465 } | 513 } |
| 466 | 514 |
| 467 TEST_F(KeySystemConfigSelectorTest, SessionTypes_AllSupported) { | 515 TEST_F(KeySystemConfigSelectorTest, SessionTypes_AllSupported) { |
| 468 // Allow persistent state, and expect it to be required. | 516 // Allow persistent state, and expect it to be required. |
| 469 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 517 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 470 key_systems_->persistent_license = EmeSessionTypeSupport::SUPPORTED; | 518 key_systems_->persistent_license = EmeSessionTypeSupport::SUPPORTED; |
| 471 | 519 |
| 472 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 520 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 473 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); | 521 session_types.push_back(blink::WebEncryptedMediaSessionType::Temporary); |
| 474 session_types.push_back( | 522 session_types.push_back( |
| 475 blink::WebEncryptedMediaSessionType::PersistentLicense); | 523 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 476 | 524 |
| 477 blink::WebMediaKeySystemConfiguration config; | 525 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 478 config.persistentState = | 526 config.persistentState = |
| 479 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 527 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 480 config.hasSessionTypes = true; | |
| 481 config.sessionTypes = session_types; | 528 config.sessionTypes = session_types; |
| 482 configs_.push_back(config); | 529 configs_.push_back(config); |
| 483 | 530 |
| 484 ASSERT_TRUE(SelectConfigReturnsConfig()); | 531 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 485 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 532 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 486 config_.persistentState); | 533 config_.persistentState); |
| 487 ASSERT_EQ(2u, config_.sessionTypes.size()); | 534 ASSERT_EQ(2u, config_.sessionTypes.size()); |
| 488 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, | 535 EXPECT_EQ(blink::WebEncryptedMediaSessionType::Temporary, |
| 489 config_.sessionTypes[0]); | 536 config_.sessionTypes[0]); |
| 490 EXPECT_EQ(blink::WebEncryptedMediaSessionType::PersistentLicense, | 537 EXPECT_EQ(blink::WebEncryptedMediaSessionType::PersistentLicense, |
| 491 config_.sessionTypes[1]); | 538 config_.sessionTypes[1]); |
| 492 } | 539 } |
| 493 | 540 |
| 494 TEST_F(KeySystemConfigSelectorTest, SessionTypes_PermissionCanBeRequired) { | 541 TEST_F(KeySystemConfigSelectorTest, SessionTypes_PermissionCanBeRequired) { |
| 495 media_permission_->is_granted = true; | 542 media_permission_->is_granted = true; |
| 496 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 543 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 497 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; | 544 key_systems_->persistent_state = EmeFeatureSupport::REQUESTABLE; |
| 498 key_systems_->persistent_license = | 545 key_systems_->persistent_license = |
| 499 EmeSessionTypeSupport::SUPPORTED_WITH_IDENTIFIER; | 546 EmeSessionTypeSupport::SUPPORTED_WITH_IDENTIFIER; |
| 500 | 547 |
| 501 std::vector<blink::WebEncryptedMediaSessionType> session_types; | 548 std::vector<blink::WebEncryptedMediaSessionType> session_types; |
| 502 session_types.push_back( | 549 session_types.push_back( |
| 503 blink::WebEncryptedMediaSessionType::PersistentLicense); | 550 blink::WebEncryptedMediaSessionType::PersistentLicense); |
| 504 | 551 |
| 505 blink::WebMediaKeySystemConfiguration config; | 552 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 506 config.distinctiveIdentifier = | 553 config.distinctiveIdentifier = |
| 507 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 554 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 508 config.persistentState = | 555 config.persistentState = |
| 509 blink::WebMediaKeySystemConfiguration::Requirement::Optional; | 556 blink::WebMediaKeySystemConfiguration::Requirement::Optional; |
| 510 config.hasSessionTypes = true; | |
| 511 config.sessionTypes = session_types; | 557 config.sessionTypes = session_types; |
| 512 configs_.push_back(config); | 558 configs_.push_back(config); |
| 513 | 559 |
| 514 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 560 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 515 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 561 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 516 config_.distinctiveIdentifier); | 562 config_.distinctiveIdentifier); |
| 517 } | 563 } |
| 518 | 564 |
| 519 // --- videoCapabilities --- | 565 // --- videoCapabilities --- |
| 520 | 566 |
| 521 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Empty) { | 567 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Empty) { |
| 522 blink::WebMediaKeySystemConfiguration config; | 568 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 523 config.hasVideoCapabilities = true; | |
| 524 configs_.push_back(config); | 569 configs_.push_back(config); |
| 525 | 570 |
| 526 ASSERT_TRUE(SelectConfigReturnsError()); | 571 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 527 } | 572 } |
| 528 | 573 |
| 529 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_NoneSupported) { | 574 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_NoneSupported) { |
| 530 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 575 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 531 video_capabilities[0].contentType = "a"; | 576 video_capabilities[0].contentType = "a"; |
| 532 video_capabilities[0].mimeType = kUnsupportedContainer; | 577 video_capabilities[0].mimeType = kUnsupportedContainer; |
| 533 video_capabilities[1].contentType = "b"; | 578 video_capabilities[1].contentType = "b"; |
| 534 video_capabilities[1].mimeType = kSupportedContainer; | 579 video_capabilities[1].mimeType = kSupportedContainer; |
| 535 video_capabilities[1].codecs = kUnsupportedCodec; | 580 video_capabilities[1].codecs = kUnsupportedCodec; |
| 536 | 581 |
| 537 blink::WebMediaKeySystemConfiguration config; | 582 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 538 config.hasVideoCapabilities = true; | |
| 539 config.videoCapabilities = video_capabilities; | 583 config.videoCapabilities = video_capabilities; |
| 540 configs_.push_back(config); | 584 configs_.push_back(config); |
| 541 | 585 |
| 542 ASSERT_TRUE(SelectConfigReturnsError()); | 586 ASSERT_TRUE(SelectConfigReturnsError()); |
| 543 } | 587 } |
| 544 | 588 |
| 545 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_SubsetSupported) { | 589 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_SubsetSupported) { |
| 546 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 590 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 547 video_capabilities[0].contentType = "a"; | 591 video_capabilities[0].contentType = "a"; |
| 548 video_capabilities[0].mimeType = kUnsupportedContainer; | 592 video_capabilities[0].mimeType = kUnsupportedContainer; |
| 549 video_capabilities[1].contentType = "b"; | 593 video_capabilities[1].contentType = "b"; |
| 550 video_capabilities[1].mimeType = kSupportedContainer; | 594 video_capabilities[1].mimeType = kSupportedContainer; |
| 551 | 595 |
| 552 blink::WebMediaKeySystemConfiguration config; | 596 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 553 config.hasVideoCapabilities = true; | |
| 554 config.videoCapabilities = video_capabilities; | 597 config.videoCapabilities = video_capabilities; |
| 555 configs_.push_back(config); | 598 configs_.push_back(config); |
| 556 | 599 |
| 557 ASSERT_TRUE(SelectConfigReturnsConfig()); | 600 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 558 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 601 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 559 EXPECT_EQ("b", config_.videoCapabilities[0].contentType); | 602 EXPECT_EQ("b", config_.videoCapabilities[0].contentType); |
| 560 EXPECT_EQ(kSupportedContainer, config_.videoCapabilities[0].mimeType); | 603 EXPECT_EQ(kSupportedContainer, config_.videoCapabilities[0].mimeType); |
| 561 } | 604 } |
| 562 | 605 |
| 563 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_AllSupported) { | 606 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_AllSupported) { |
| 564 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); | 607 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(2); |
| 565 video_capabilities[0].contentType = "a"; | 608 video_capabilities[0].contentType = "a"; |
| 566 video_capabilities[0].mimeType = kSupportedContainer; | 609 video_capabilities[0].mimeType = kSupportedContainer; |
| 567 video_capabilities[1].contentType = "b"; | 610 video_capabilities[1].contentType = "b"; |
| 568 video_capabilities[1].mimeType = kSupportedContainer; | 611 video_capabilities[1].mimeType = kSupportedContainer; |
| 569 video_capabilities[1].codecs = kSupportedCodecs; | 612 video_capabilities[1].codecs = kSupportedCodecs; |
| 570 | 613 |
| 571 blink::WebMediaKeySystemConfiguration config; | 614 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 572 config.hasVideoCapabilities = true; | |
| 573 config.videoCapabilities = video_capabilities; | 615 config.videoCapabilities = video_capabilities; |
| 574 configs_.push_back(config); | 616 configs_.push_back(config); |
| 575 | 617 |
| 576 ASSERT_TRUE(SelectConfigReturnsConfig()); | 618 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 577 ASSERT_EQ(2u, config_.videoCapabilities.size()); | 619 ASSERT_EQ(2u, config_.videoCapabilities.size()); |
| 578 EXPECT_EQ("a", config_.videoCapabilities[0].contentType); | 620 EXPECT_EQ("a", config_.videoCapabilities[0].contentType); |
| 579 EXPECT_EQ("b", config_.videoCapabilities[1].contentType); | 621 EXPECT_EQ("b", config_.videoCapabilities[1].contentType); |
| 580 } | 622 } |
| 581 | 623 |
| 582 TEST_F(KeySystemConfigSelectorTest, | 624 TEST_F(KeySystemConfigSelectorTest, |
| 583 VideoCapabilities_Codecs_SubsetSupported) { | 625 VideoCapabilities_Codecs_SubsetSupported) { |
| 584 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 626 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 585 video_capabilities[0].contentType = "a"; | 627 video_capabilities[0].contentType = "a"; |
| 586 video_capabilities[0].mimeType = kSupportedContainer; | 628 video_capabilities[0].mimeType = kSupportedContainer; |
| 587 video_capabilities[0].codecs = kUnsupportedCodecs; | 629 video_capabilities[0].codecs = kUnsupportedCodecs; |
| 588 | 630 |
| 589 blink::WebMediaKeySystemConfiguration config; | 631 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 590 config.hasVideoCapabilities = true; | |
| 591 config.videoCapabilities = video_capabilities; | 632 config.videoCapabilities = video_capabilities; |
| 592 configs_.push_back(config); | 633 configs_.push_back(config); |
| 593 | 634 |
| 594 ASSERT_TRUE(SelectConfigReturnsError()); | 635 ASSERT_TRUE(SelectConfigReturnsError()); |
| 595 } | 636 } |
| 596 | 637 |
| 597 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Codecs_AllSupported) { | 638 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Codecs_AllSupported) { |
| 598 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 639 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 599 video_capabilities[0].contentType = "a"; | 640 video_capabilities[0].contentType = "a"; |
| 600 video_capabilities[0].mimeType = kSupportedContainer; | 641 video_capabilities[0].mimeType = kSupportedContainer; |
| 601 video_capabilities[0].codecs = kSupportedCodecs; | 642 video_capabilities[0].codecs = kSupportedCodecs; |
| 602 | 643 |
| 603 blink::WebMediaKeySystemConfiguration config; | 644 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 604 config.hasVideoCapabilities = true; | |
| 605 config.videoCapabilities = video_capabilities; | 645 config.videoCapabilities = video_capabilities; |
| 606 configs_.push_back(config); | 646 configs_.push_back(config); |
| 607 | 647 |
| 608 ASSERT_TRUE(SelectConfigReturnsConfig()); | 648 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 609 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 649 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 610 EXPECT_EQ(kSupportedCodecs, config_.videoCapabilities[0].codecs); | 650 EXPECT_EQ(kSupportedCodecs, config_.videoCapabilities[0].codecs); |
| 611 } | 651 } |
| 612 | 652 |
| 613 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Supported) { | 653 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Supported) { |
| 614 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 654 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 615 video_capabilities[0].contentType = "a"; | 655 video_capabilities[0].contentType = "a"; |
| 616 video_capabilities[0].mimeType = kSupportedContainer; | 656 video_capabilities[0].mimeType = kSupportedContainer; |
| 617 video_capabilities[0].robustness = kSupported; | 657 video_capabilities[0].robustness = kSupported; |
| 618 | 658 |
| 619 blink::WebMediaKeySystemConfiguration config; | 659 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 620 config.hasVideoCapabilities = true; | |
| 621 config.videoCapabilities = video_capabilities; | 660 config.videoCapabilities = video_capabilities; |
| 622 configs_.push_back(config); | 661 configs_.push_back(config); |
| 623 | 662 |
| 624 ASSERT_TRUE(SelectConfigReturnsConfig()); | 663 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 625 ASSERT_EQ(1u, config_.videoCapabilities.size()); | 664 ASSERT_EQ(1u, config_.videoCapabilities.size()); |
| 626 EXPECT_EQ(kSupported, config_.videoCapabilities[0].robustness); | 665 EXPECT_EQ(kSupported, config_.videoCapabilities[0].robustness); |
| 627 } | 666 } |
| 628 | 667 |
| 629 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Unsupported) { | 668 TEST_F(KeySystemConfigSelectorTest, VideoCapabilities_Robustness_Unsupported) { |
| 630 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 669 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 631 video_capabilities[0].contentType = "a"; | 670 video_capabilities[0].contentType = "a"; |
| 632 video_capabilities[0].mimeType = kSupportedContainer; | 671 video_capabilities[0].mimeType = kSupportedContainer; |
| 633 video_capabilities[0].robustness = kUnsupported; | 672 video_capabilities[0].robustness = kUnsupported; |
| 634 | 673 |
| 635 blink::WebMediaKeySystemConfiguration config; | 674 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 636 config.hasVideoCapabilities = true; | |
| 637 config.videoCapabilities = video_capabilities; | 675 config.videoCapabilities = video_capabilities; |
| 638 configs_.push_back(config); | 676 configs_.push_back(config); |
| 639 | 677 |
| 640 ASSERT_TRUE(SelectConfigReturnsError()); | 678 ASSERT_TRUE(SelectConfigReturnsError()); |
| 641 } | 679 } |
| 642 | 680 |
| 643 TEST_F(KeySystemConfigSelectorTest, | 681 TEST_F(KeySystemConfigSelectorTest, |
| 644 VideoCapabilities_Robustness_PermissionCanBeRequired) { | 682 VideoCapabilities_Robustness_PermissionCanBeRequired) { |
| 645 media_permission_->is_granted = true; | 683 media_permission_->is_granted = true; |
| 646 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 684 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 647 | 685 |
| 648 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 686 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 649 video_capabilities[0].contentType = "a"; | 687 video_capabilities[0].contentType = "a"; |
| 650 video_capabilities[0].mimeType = kSupportedContainer; | 688 video_capabilities[0].mimeType = kSupportedContainer; |
| 651 video_capabilities[0].robustness = kRequireIdentifier; | 689 video_capabilities[0].robustness = kRequireIdentifier; |
| 652 | 690 |
| 653 blink::WebMediaKeySystemConfiguration config; | 691 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 654 config.hasVideoCapabilities = true; | |
| 655 config.videoCapabilities = video_capabilities; | 692 config.videoCapabilities = video_capabilities; |
| 656 configs_.push_back(config); | 693 configs_.push_back(config); |
| 657 | 694 |
| 658 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 695 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 659 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, | 696 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::Required, |
| 660 config_.distinctiveIdentifier); | 697 config_.distinctiveIdentifier); |
| 661 } | 698 } |
| 662 | 699 |
| 663 TEST_F(KeySystemConfigSelectorTest, | 700 TEST_F(KeySystemConfigSelectorTest, |
| 664 VideoCapabilities_Robustness_PermissionCanBeRecommended) { | 701 VideoCapabilities_Robustness_PermissionCanBeRecommended) { |
| 665 media_permission_->is_granted = false; | 702 media_permission_->is_granted = false; |
| 666 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 703 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 667 | 704 |
| 668 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); | 705 std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities(1); |
| 669 video_capabilities[0].contentType = "a"; | 706 video_capabilities[0].contentType = "a"; |
| 670 video_capabilities[0].mimeType = kSupportedContainer; | 707 video_capabilities[0].mimeType = kSupportedContainer; |
| 671 video_capabilities[0].robustness = kRecommendIdentifier; | 708 video_capabilities[0].robustness = kRecommendIdentifier; |
| 672 | 709 |
| 673 blink::WebMediaKeySystemConfiguration config; | 710 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 674 config.hasVideoCapabilities = true; | |
| 675 config.videoCapabilities = video_capabilities; | 711 config.videoCapabilities = video_capabilities; |
| 676 configs_.push_back(config); | 712 configs_.push_back(config); |
| 677 | 713 |
| 678 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 714 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 679 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, | 715 EXPECT_EQ(blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed, |
| 680 config_.distinctiveIdentifier); | 716 config_.distinctiveIdentifier); |
| 681 } | 717 } |
| 682 | 718 |
| 683 // --- audioCapabilities --- | 719 // --- audioCapabilities --- |
| 684 // These are handled by the same code as |videoCapabilities|, so only minimal | 720 // These are handled by the same code as |videoCapabilities|, so only minimal |
| 685 // additional testing is done. | 721 // additional testing is done. |
| 686 | 722 |
| 687 TEST_F(KeySystemConfigSelectorTest, AudioCapabilities_SubsetSupported) { | 723 TEST_F(KeySystemConfigSelectorTest, AudioCapabilities_SubsetSupported) { |
| 688 std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities(2); | 724 std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities(2); |
| 689 audio_capabilities[0].contentType = "a"; | 725 audio_capabilities[0].contentType = "a"; |
| 690 audio_capabilities[0].mimeType = kUnsupportedContainer; | 726 audio_capabilities[0].mimeType = kUnsupportedContainer; |
| 691 audio_capabilities[1].contentType = "b"; | 727 audio_capabilities[1].contentType = "b"; |
| 692 audio_capabilities[1].mimeType = kSupportedContainer; | 728 audio_capabilities[1].mimeType = kSupportedContainer; |
| 693 | 729 |
| 694 blink::WebMediaKeySystemConfiguration config; | 730 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 695 config.hasAudioCapabilities = true; | |
| 696 config.audioCapabilities = audio_capabilities; | 731 config.audioCapabilities = audio_capabilities; |
| 697 configs_.push_back(config); | 732 configs_.push_back(config); |
| 698 | 733 |
| 699 ASSERT_TRUE(SelectConfigReturnsConfig()); | 734 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 700 ASSERT_EQ(1u, config_.audioCapabilities.size()); | 735 ASSERT_EQ(1u, config_.audioCapabilities.size()); |
| 701 EXPECT_EQ("b", config_.audioCapabilities[0].contentType); | 736 EXPECT_EQ("b", config_.audioCapabilities[0].contentType); |
| 702 EXPECT_EQ(kSupportedContainer, config_.audioCapabilities[0].mimeType); | 737 EXPECT_EQ(kSupportedContainer, config_.audioCapabilities[0].mimeType); |
| 703 } | 738 } |
| 704 | 739 |
| 705 // --- Multiple configurations --- | 740 // --- Multiple configurations --- |
| 706 | 741 |
| 707 TEST_F(KeySystemConfigSelectorTest, Configurations_AllSupported) { | 742 TEST_F(KeySystemConfigSelectorTest, Configurations_AllSupported) { |
| 708 blink::WebMediaKeySystemConfiguration config; | 743 blink::WebMediaKeySystemConfiguration config = DefaultConfiguration(); |
| 709 config.label = "a"; | 744 config.label = "a"; |
| 710 configs_.push_back(config); | 745 configs_.push_back(config); |
| 711 config.label = "b"; | 746 config.label = "b"; |
| 712 configs_.push_back(config); | 747 configs_.push_back(config); |
| 713 | 748 |
| 714 ASSERT_TRUE(SelectConfigReturnsConfig()); | 749 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 715 ASSERT_EQ("a", config_.label); | 750 ASSERT_EQ("a", config_.label); |
| 716 } | 751 } |
| 717 | 752 |
| 718 TEST_F(KeySystemConfigSelectorTest, Configurations_SubsetSupported) { | 753 TEST_F(KeySystemConfigSelectorTest, Configurations_SubsetSupported) { |
| 719 blink::WebMediaKeySystemConfiguration config1; | 754 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); |
| 720 config1.label = "a"; | 755 config1.label = "a"; |
| 721 config1.hasInitDataTypes = true; | 756 std::vector<blink::WebEncryptedMediaInitDataType> init_data_types; |
| 757 init_data_types.push_back(blink::WebEncryptedMediaInitDataType::Unknown); |
| 758 config1.initDataTypes = init_data_types; |
| 722 configs_.push_back(config1); | 759 configs_.push_back(config1); |
| 723 | 760 |
| 724 blink::WebMediaKeySystemConfiguration config2; | 761 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); |
| 725 config2.label = "b"; | 762 config2.label = "b"; |
| 726 configs_.push_back(config2); | 763 configs_.push_back(config2); |
| 727 | 764 |
| 728 ASSERT_TRUE(SelectConfigReturnsConfig()); | 765 ASSERT_TRUE(SelectConfigReturnsConfig()); |
| 729 ASSERT_EQ("b", config_.label); | 766 ASSERT_EQ("b", config_.label); |
| 730 } | 767 } |
| 731 | 768 |
| 732 TEST_F(KeySystemConfigSelectorTest, | 769 TEST_F(KeySystemConfigSelectorTest, |
| 733 Configurations_FirstRequiresPermission_Allowed) { | 770 Configurations_FirstRequiresPermission_Allowed) { |
| 734 media_permission_->is_granted = true; | 771 media_permission_->is_granted = true; |
| 735 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 772 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 736 | 773 |
| 737 blink::WebMediaKeySystemConfiguration config1; | 774 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); |
| 738 config1.label = "a"; | 775 config1.label = "a"; |
| 739 config1.distinctiveIdentifier = | 776 config1.distinctiveIdentifier = |
| 740 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 777 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 741 configs_.push_back(config1); | 778 configs_.push_back(config1); |
| 742 | 779 |
| 743 blink::WebMediaKeySystemConfiguration config2; | 780 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); |
| 744 config2.label = "b"; | 781 config2.label = "b"; |
| 745 configs_.push_back(config2); | 782 configs_.push_back(config2); |
| 746 | 783 |
| 747 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 784 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 748 ASSERT_EQ("a", config_.label); | 785 ASSERT_EQ("a", config_.label); |
| 749 } | 786 } |
| 750 | 787 |
| 751 TEST_F(KeySystemConfigSelectorTest, | 788 TEST_F(KeySystemConfigSelectorTest, |
| 752 Configurations_FirstRequiresPermission_Rejected) { | 789 Configurations_FirstRequiresPermission_Rejected) { |
| 753 media_permission_->is_granted = false; | 790 media_permission_->is_granted = false; |
| 754 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; | 791 key_systems_->distinctive_identifier = EmeFeatureSupport::REQUESTABLE; |
| 755 | 792 |
| 756 blink::WebMediaKeySystemConfiguration config1; | 793 blink::WebMediaKeySystemConfiguration config1 = DefaultConfiguration(); |
| 757 config1.label = "a"; | 794 config1.label = "a"; |
| 758 config1.distinctiveIdentifier = | 795 config1.distinctiveIdentifier = |
| 759 blink::WebMediaKeySystemConfiguration::Requirement::Required; | 796 blink::WebMediaKeySystemConfiguration::Requirement::Required; |
| 760 configs_.push_back(config1); | 797 configs_.push_back(config1); |
| 761 | 798 |
| 762 blink::WebMediaKeySystemConfiguration config2; | 799 blink::WebMediaKeySystemConfiguration config2 = DefaultConfiguration(); |
| 763 config2.label = "b"; | 800 config2.label = "b"; |
| 764 configs_.push_back(config2); | 801 configs_.push_back(config2); |
| 765 | 802 |
| 766 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); | 803 ASSERT_TRUE(SelectConfigRequestsPermissionAndReturnsConfig()); |
| 767 ASSERT_EQ("b", config_.label); | 804 ASSERT_EQ("b", config_.label); |
| 768 } | 805 } |
| 769 | 806 |
| 770 } // namespace media | 807 } // namespace media |
| OLD | NEW |