external_clear_key_key_system_properties.cc 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/cdm/renderer/external_clear_key_key_system_properties.h"
  5. #include "base/notreached.h"
  6. #include "media/base/eme_constants.h"
  7. #include "media/base/key_system_names.h"
  8. namespace cdm {
  9. const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey";
  10. const char kExternalClearKeyInvalidKeySystem[] =
  11. "org.chromium.externalclearkey.invalid";
  12. ExternalClearKeyProperties::ExternalClearKeyProperties() = default;
  13. ExternalClearKeyProperties::~ExternalClearKeyProperties() = default;
  14. std::string ExternalClearKeyProperties::GetBaseKeySystemName() const {
  15. return kExternalClearKeyKeySystem;
  16. }
  17. bool ExternalClearKeyProperties::IsSupportedKeySystem(
  18. const std::string& key_system) const {
  19. // Supports kExternalClearKeyKeySystem and all its sub key systems, except for
  20. // the explicitly "invalid" one. See the test
  21. // EncryptedMediaSupportedTypesExternalClearKeyTest.InvalidKeySystems.
  22. return (key_system == kExternalClearKeyKeySystem ||
  23. media::IsSubKeySystemOf(key_system, kExternalClearKeyKeySystem)) &&
  24. key_system != kExternalClearKeyInvalidKeySystem;
  25. }
  26. bool ExternalClearKeyProperties::IsSupportedInitDataType(
  27. media::EmeInitDataType init_data_type) const {
  28. switch (init_data_type) {
  29. case media::EmeInitDataType::CENC:
  30. case media::EmeInitDataType::WEBM:
  31. case media::EmeInitDataType::KEYIDS:
  32. return true;
  33. case media::EmeInitDataType::UNKNOWN:
  34. return false;
  35. }
  36. NOTREACHED();
  37. return false;
  38. }
  39. absl::optional<media::EmeConfig>
  40. ExternalClearKeyProperties::GetEncryptionSchemeConfigRule(
  41. media::EncryptionScheme encryption_scheme) const {
  42. switch (encryption_scheme) {
  43. case media::EncryptionScheme::kCenc:
  44. case media::EncryptionScheme::kCbcs:
  45. return media::EmeConfig::SupportedRule();
  46. case media::EncryptionScheme::kUnencrypted:
  47. break;
  48. }
  49. NOTREACHED();
  50. return media::EmeConfig::UnsupportedRule();
  51. }
  52. media::SupportedCodecs ExternalClearKeyProperties::GetSupportedCodecs() const {
  53. return media::EME_CODEC_MP4_ALL | media::EME_CODEC_WEBM_ALL;
  54. }
  55. absl::optional<media::EmeConfig>
  56. ExternalClearKeyProperties::GetRobustnessConfigRule(
  57. const std::string& key_system,
  58. media::EmeMediaType media_type,
  59. const std::string& requested_robustness,
  60. const bool* /*hw_secure_requirement*/) const {
  61. if (requested_robustness.empty()) {
  62. return media::EmeConfig::SupportedRule();
  63. } else {
  64. return media::EmeConfig::UnsupportedRule();
  65. }
  66. }
  67. // Persistent license sessions are faked.
  68. absl::optional<media::EmeConfig>
  69. ExternalClearKeyProperties::GetPersistentLicenseSessionSupport() const {
  70. return media::EmeConfig::SupportedRule();
  71. }
  72. media::EmeFeatureSupport ExternalClearKeyProperties::GetPersistentStateSupport()
  73. const {
  74. return media::EmeFeatureSupport::REQUESTABLE;
  75. }
  76. media::EmeFeatureSupport
  77. ExternalClearKeyProperties::GetDistinctiveIdentifierSupport() const {
  78. return media::EmeFeatureSupport::NOT_SUPPORTED;
  79. }
  80. } // namespace cdm