| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/cdm/common/android_cdm_registration.h" |
| |
| #include "base/logging.h" |
| #include "media/base/android/media_drm_bridge.h" |
| #include "media/cdm/cdm_type.h" |
| |
| #if BUILDFLAG(ENABLE_WIDEVINE) |
| #include "third_party/widevine/cdm/widevine_cdm_common.h" // nogncheck |
| #endif |
| |
| namespace cdm { |
| |
| #if BUILDFLAG(ENABLE_WIDEVINE) |
| void AddAndroidWidevineCdm(std::vector<content::CdmInfo>* cdms) { |
| // Widevine is done by MediaDrm, and should be supported on all devices. |
| // Register Widevine without any capabilities so that it will be |
| // checked the first time it is used. |
| cdms->emplace_back(kWidevineKeySystem, |
| content::CdmInfo::Robustness::kSoftwareSecure, |
| std::nullopt, kWidevineCdmType); |
| cdms->emplace_back(kWidevineKeySystem, |
| content::CdmInfo::Robustness::kHardwareSecure, |
| std::nullopt, kWidevineCdmType); |
| } |
| #endif // BUILDFLAG(ENABLE_WIDEVINE) |
| |
| void AddOtherAndroidCdms(std::vector<content::CdmInfo>* cdms) { |
| // CdmInfo needs a CdmType, but on Android it is not used as the key system |
| // is supported by MediaDrm. Using a random value as something needs to be |
| // specified, but must be different than other CdmTypes specified. |
| // (On Android the key system is identified by UUID, and that mapping is |
| // maintained by MediaDrmBridge.) |
| const media::CdmType kAndroidCdmType{0x2e9dabb9c171c28cull, |
| 0xf455252ec70b52adull}; |
| |
| // MediaDrmBridge returns a list of key systems available on the device |
| // that are not Widevine. Register them with no capabilities specified so |
| // that lazy evaluation can figure out what is supported when requested. |
| // We don't know if either software secure or hardware secure support is |
| // available, so register them both. Lazy evaluation will remove them |
| // if they aren't supported. |
| const auto key_system_names = |
| media::MediaDrmBridge::GetPlatformKeySystemNames(); |
| for (const auto& key_system : key_system_names) { |
| DVLOG(3) << __func__ << " key_system:" << key_system; |
| cdms->emplace_back(key_system, |
| content::CdmInfo::Robustness::kSoftwareSecure, |
| std::nullopt, kAndroidCdmType); |
| cdms->emplace_back(key_system, |
| content::CdmInfo::Robustness::kHardwareSecure, |
| std::nullopt, kAndroidCdmType); |
| } |
| } |
| |
| } // namespace cdm |