diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/media/test/test_eme_mfcdm_generate_request.html | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/test/test_eme_mfcdm_generate_request.html')
-rw-r--r-- | dom/media/test/test_eme_mfcdm_generate_request.html | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/dom/media/test/test_eme_mfcdm_generate_request.html b/dom/media/test/test_eme_mfcdm_generate_request.html new file mode 100644 index 0000000000..57be325e36 --- /dev/null +++ b/dom/media/test/test_eme_mfcdm_generate_request.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Media Engine only test : test EME API for supported key systems</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> + <script type="text/javascript" src="manifest.js"></script> +</head> +<body> +<script class="testbody" type="text/javascript"> + +/** + * This test is aiming to test whether we can use EME API to generate a request + * for all supported key systems. However, we use our mock CDM (MF ClearKey) for + * external key systems like Widevine and PlayReady in order to avoid any + * possible interfering, such as returning incorrect support types (bug 1851914) + * and we can also test hardward DRM key system without being limited by + * machine capability. + * + * As this test doesn't involve any communication with the license server, that + * is why we can use our mock CDM (no decryption needed). + */ + +add_task(async function setupTestingPrefs() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["media.wmf.media-engine.enabled", 2], + ["media.eme.playready.enabled", true], + ["media.eme.widevine.experiment.enabled", true], + // This is used to trigger Widevine CDM installation check + ["media.gmp-widevinecdm-l1.enabled", true], + ["media.eme.wmf.clearkey.enabled", true], + // Use the mock clearkey CDM to create cdm for all other key systems. + ["media.eme.wmf.use-mock-cdm-for-external-cdms", true], + // Our mock CDM doesn't implement 'IsTypeSupportedEx()', only 'IsTypeSupported()' + ["media.eme.playready.istypesupportedex", false], + ], + }); +}); + +const kKeySystems = [ + "com.microsoft.playready.recommendation", + "com.microsoft.playready.recommendation.3000", + "com.microsoft.playready.recommendation.3000.clearlead", + "com.widevine.alpha.experiment", + "com.widevine.alpha.experiment2", + "org.w3.clearkey", +]; + +add_task(async function testKeySystemRequestForMFCDMs() { + for (let keySystem of kKeySystems) { + await testKeySystemRequest(keySystem); + info(`done testing ${keySystem}!`); + } +}); + +async function testKeySystemRequest(keySystem) { + const fakeKID = '{"kids":["a1234567890"]}'; + // Mock CDM only supports temporary type. + const sessionType = 'temporary'; + const configs = [{ + initDataTypes: ['keyids'], + videoCapabilities: [{ contentType: `video/mp4;codecs="avc1.640028"` }], + sessionTypes : [sessionType], + }]; + info(`requestMediaKeySystemAccess for ${keySystem}`); + let access = await navigator.requestMediaKeySystemAccess(keySystem, configs) + .catch(e => ok(false, `failed to create key system access`)); + + info('creating media key'); + let mediaKeys = await access.createMediaKeys() + .catch(e => ok(false, `failed to create media key`));; + + info(`creating a temporary media key session`); + let session = mediaKeys.createSession(sessionType); + let messagePromise = new Promise(r => { + session.addEventListener('message', event => { + is(event.messageType, 'license-request', + 'MediaKeyMessage type should be license-request'); + ok(true, `created request and received message event`); + session.close().then(() => { r(); }); + }); + }); + await session.generateRequest( + 'keyids', + new TextEncoder().encode(fakeKID)) + .catch(e => ok(false, `failed to generate request`)); + await messagePromise; +} + +</script> +</body> +</html> |