OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/key_systems.h" | 5 #include "media/base/key_systems.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 const std::vector<KeySystemInfo>& concrete_key_systems) { | 388 const std::vector<KeySystemInfo>& concrete_key_systems) { |
389 DCHECK(thread_checker_.CalledOnValidThread()); | 389 DCHECK(thread_checker_.CalledOnValidThread()); |
390 DCHECK(concrete_key_system_map_.empty()); | 390 DCHECK(concrete_key_system_map_.empty()); |
391 DCHECK(parent_key_system_map_.empty()); | 391 DCHECK(parent_key_system_map_.empty()); |
392 | 392 |
393 for (const KeySystemInfo& info : concrete_key_systems) { | 393 for (const KeySystemInfo& info : concrete_key_systems) { |
394 DCHECK(!info.key_system.empty()); | 394 DCHECK(!info.key_system.empty()); |
395 DCHECK_NE(info.persistent_license_support, EME_SESSION_TYPE_INVALID); | 395 DCHECK_NE(info.persistent_license_support, EME_SESSION_TYPE_INVALID); |
396 DCHECK_NE(info.persistent_release_message_support, | 396 DCHECK_NE(info.persistent_release_message_support, |
397 EME_SESSION_TYPE_INVALID); | 397 EME_SESSION_TYPE_INVALID); |
398 // REQUESTABLE and REQUESTABLE_WITH_PERMISSION are not available until we | 398 // TODO(sandersd): Add REQUESTABLE and REQUESTABLE_WITH_PERMISSION for |
399 // can block access/ per-CDM-instance. http://crbug.com/457482 | 399 // persistent_state_support once we can block access per-CDM-instance |
400 // Note: Even once that is fixed, distinctive identifiers should never be | 400 // (http://crbug.com/457482). |
401 // REQUESTABLE, since user permission is always required. | |
402 DCHECK(info.persistent_state_support == EME_FEATURE_NOT_SUPPORTED || | 401 DCHECK(info.persistent_state_support == EME_FEATURE_NOT_SUPPORTED || |
403 info.persistent_state_support == EME_FEATURE_ALWAYS_ENABLED); | 402 info.persistent_state_support == EME_FEATURE_ALWAYS_ENABLED); |
404 DCHECK(info.distinctive_identifier_support == EME_FEATURE_NOT_SUPPORTED || | 403 DCHECK(info.distinctive_identifier_support == EME_FEATURE_NOT_SUPPORTED || |
| 404 // TODO(sandersd): REQUESTABLE_WITH_PERMISSION for all key systems on all |
| 405 // platforms once we have proper enforcement (http://crbug.com/457482). |
| 406 // On Chrome OS, an ID will not be used without permission, but we cannot |
| 407 // currently prevent the CDM from requesting the permission again when no |
| 408 // there was no initial prompt. Thus, we block "not-allowed" below. |
| 409 #if defined(OS_CHROMEOS) |
| 410 (info.distinctive_identifier_support == |
| 411 EME_FEATURE_REQUESTABLE_WITH_PERMISSION && |
| 412 key_system == kWidevineKeySystem) || |
| 413 #endif |
405 info.distinctive_identifier_support == EME_FEATURE_ALWAYS_ENABLED); | 414 info.distinctive_identifier_support == EME_FEATURE_ALWAYS_ENABLED); |
406 if (info.persistent_state_support == EME_FEATURE_NOT_SUPPORTED) { | 415 if (info.persistent_state_support == EME_FEATURE_NOT_SUPPORTED) { |
407 DCHECK_EQ(info.persistent_license_support, | 416 DCHECK_EQ(info.persistent_license_support, |
408 EME_SESSION_TYPE_NOT_SUPPORTED); | 417 EME_SESSION_TYPE_NOT_SUPPORTED); |
409 DCHECK_EQ(info.persistent_release_message_support, | 418 DCHECK_EQ(info.persistent_release_message_support, |
410 EME_SESSION_TYPE_NOT_SUPPORTED); | 419 EME_SESSION_TYPE_NOT_SUPPORTED); |
411 } | 420 } |
412 DCHECK(!IsSupportedKeySystem(info.key_system)) | 421 DCHECK(!IsSupportedKeySystem(info.key_system)) |
413 << "Key system '" << info.key_system << "' already registered"; | 422 << "Key system '" << info.key_system << "' already registered"; |
414 DCHECK(!parent_key_system_map_.count(info.key_system)) | 423 DCHECK(!parent_key_system_map_.count(info.key_system)) |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 return false; | 717 return false; |
709 } | 718 } |
710 | 719 |
711 switch (key_system_iter->second.distinctive_identifier_support) { | 720 switch (key_system_iter->second.distinctive_identifier_support) { |
712 case EME_FEATURE_INVALID: | 721 case EME_FEATURE_INVALID: |
713 NOTREACHED(); | 722 NOTREACHED(); |
714 return false; | 723 return false; |
715 case EME_FEATURE_NOT_SUPPORTED: | 724 case EME_FEATURE_NOT_SUPPORTED: |
716 return requirement != EME_FEATURE_REQUIRED; | 725 return requirement != EME_FEATURE_REQUIRED; |
717 case EME_FEATURE_REQUESTABLE_WITH_PERMISSION: | 726 case EME_FEATURE_REQUESTABLE_WITH_PERMISSION: |
| 727 // TODO(sandersd): Remove this hack once crbug.com/457482 is addressed. |
| 728 // We cannot currently enforce "not-allowed", so don't allow it. |
| 729 if (requirement == EME_FEATURE_NOT_ALLOWED) |
| 730 return false; |
718 return (requirement != EME_FEATURE_REQUIRED) || is_permission_granted; | 731 return (requirement != EME_FEATURE_REQUIRED) || is_permission_granted; |
719 case EME_FEATURE_REQUESTABLE: | 732 case EME_FEATURE_REQUESTABLE: |
720 NOTREACHED(); | 733 NOTREACHED(); |
721 return true; | 734 return true; |
722 case EME_FEATURE_ALWAYS_ENABLED: | 735 case EME_FEATURE_ALWAYS_ENABLED: |
723 // Distinctive identifiers always require user permission. | 736 // Distinctive identifiers always require user permission. |
724 return (requirement != EME_FEATURE_NOT_ALLOWED) && is_permission_granted; | 737 return (requirement != EME_FEATURE_NOT_ALLOWED) && is_permission_granted; |
725 } | 738 } |
726 | 739 |
727 NOTREACHED(); | 740 NOTREACHED(); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 | 881 |
869 MEDIA_EXPORT void AddContainerMask(const std::string& container, uint32 mask) { | 882 MEDIA_EXPORT void AddContainerMask(const std::string& container, uint32 mask) { |
870 KeySystems::GetInstance().AddContainerMask(container, mask); | 883 KeySystems::GetInstance().AddContainerMask(container, mask); |
871 } | 884 } |
872 | 885 |
873 MEDIA_EXPORT void AddCodecMask(const std::string& codec, uint32 mask) { | 886 MEDIA_EXPORT void AddCodecMask(const std::string& codec, uint32 mask) { |
874 KeySystems::GetInstance().AddCodecMask(codec, mask); | 887 KeySystems::GetInstance().AddCodecMask(codec, mask); |
875 } | 888 } |
876 | 889 |
877 } // namespace media | 890 } // namespace media |
OLD | NEW |