Bug 1846848 - part5 : display MFCDM capabilites in about:support. r=fluent-reviewers,gerard-majax,jolin,niklas

This patch implements retrieving the capabilities from MFCDMs. I will
add non-MFCDM support in following patches, eg. Widevine L3, and
ClearKey.

Differential Revision: https://phabricator.services.mozilla.com/D194837
This commit is contained in:
alwu
2023-12-06 18:16:05 +00:00
parent bf02c31c70
commit 0c704e05f4
13 changed files with 311 additions and 44 deletions

View File

@@ -20,6 +20,7 @@
#endif
#ifdef MOZ_WMF_CDM
# include "mozilla/dom/Promise.h"
# include "mozilla/EMEUtils.h"
# include "mozilla/PMFCDM.h"
#endif
@@ -179,11 +180,14 @@ bool UtilityAudioDecoderChild::CreateVideoBridge() {
#endif
#ifdef MOZ_WMF_CDM
void UtilityAudioDecoderChild::GetKeySystemCapabilities() {
void UtilityAudioDecoderChild::GetKeySystemCapabilities(
dom::Promise* aPromise) {
EME_LOG("Ask capabilities for all supported CDMs");
SendGetKeySystemCapabilities()->Then(
NS_GetCurrentThread(), __func__,
[](CopyableTArray<MFCDMCapabilitiesIPDL>&& result) {
[promise = RefPtr<dom::Promise>(aPromise)](
CopyableTArray<MFCDMCapabilitiesIPDL>&& result) {
FallibleTArray<dom::CDMInformation> cdmInfo;
for (const auto& capabilities : result) {
EME_LOG("Received capabilities for %s",
NS_ConvertUTF16toUTF8(capabilities.keySystem()).get());
@@ -199,7 +203,18 @@ void UtilityAudioDecoderChild::GetKeySystemCapabilities() {
EME_LOG(" capabilities: encryptionScheme=%s",
EncryptionSchemeStr(e));
}
auto* info = cdmInfo.AppendElement(fallible);
if (!info) {
promise->MaybeReject(NS_ERROR_OUT_OF_MEMORY);
return;
}
info->mKeySystemName = capabilities.keySystem();
KeySystemConfig config;
MFCDMCapabilitiesIPDLToKeySystemConfig(capabilities, config);
info->mCapabilities = config.GetDebugInfo();
}
promise->MaybeResolve(cdmInfo);
},
[](const mozilla::ipc::ResponseRejectReason& aReason) {
EME_LOG("IPC failure for GetKeySystemCapabilities!");