Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Exercises ChromeUtils.getWMFContentDecryptionModuleInformation(), which
* dispatches through UtilityMediaServiceChild::GetKeySystemCapabilities and
* populates dom::CDMInformation entries.
*
* MFCDMParent::GetAllKeySystemsCapabilities enumerates a compile-time-fixed
* table of key systems, each tagged SecureLevel::Software or
* SecureLevel::Hardware. That tag becomes capabilities.isHardwareDecryption()
* over IPDL. This test mirrors that table and asserts every reported CDM's
* isHardwareDecryption matches its static tag, so the assertion holds across
* hosts that expose different subsets of key systems (CI without hardware
* DRM, developer hosts with hardware-backed PlayReady, hardware-only
* configurations).
*/
// Mirror of dom/media/ipc/MFCDMParent.cpp GetAllKeySystemsCapabilities key
// system table. Keep in sync with the SecureLevel tags assigned there.
const kExpectedIsHardwareDecryption = new Map([
["com.microsoft.playready.recommendation", false],
["com.microsoft.playready.recommendation.3000", true],
["com.microsoft.playready.recommendation.3000.clearlead", true],
]);
add_task(async function setupTestingPref() {
await SpecialPowers.pushPrefEnv({
set: [
["media.wmf.media-engine.enabled", 1],
["media.eme.playready.enabled", true],
],
});
});
add_task(async function test_cdm_isHardwareDecryption_initialized() {
// The CDM info chrome API doesn't need a content page, but doing the
// assertions inside an explicit about:blank tab gives the initial
// about:newtab inner window a clean lifecycle (opened, used, removed)
// before the leak checker runs. Without this, about:newtab can
// intermittently survive past shutdown.
await BrowserTestUtils.withNewTab("about:blank", async () => {
const cdms = await ChromeUtils.getWMFContentDecryptionModuleInformation();
for (const cdm of cdms) {
Assert.ok(
kExpectedIsHardwareDecryption.has(cdm.keySystemName),
`${cdm.keySystemName}: known WMF key system (update test mirror if intentional)`
);
is(
cdm.isHardwareDecryption,
kExpectedIsHardwareDecryption.get(cdm.keySystemName),
`${cdm.keySystemName}: isHardwareDecryption matches MFCDMParent SecureLevel tag`
);
}
});
});