diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /dom/media/test/test_eme_unsetMediaKeys_then_capture.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/test/test_eme_unsetMediaKeys_then_capture.html')
-rw-r--r-- | dom/media/test/test_eme_unsetMediaKeys_then_capture.html | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/dom/media/test/test_eme_unsetMediaKeys_then_capture.html b/dom/media/test/test_eme_unsetMediaKeys_then_capture.html new file mode 100644 index 0000000000..c3691fe71c --- /dev/null +++ b/dom/media/test/test_eme_unsetMediaKeys_then_capture.html @@ -0,0 +1,113 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test Encrypted Media Extensions</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> + <script type="text/javascript" src="https://example.com:443/tests/dom/media/test/eme.js"></script> +</head> +<body> +<pre id="test"> +<script class="testbody" type="text/javascript"> +/* import-globals-from eme.js */ +var manager = new MediaTestManager; + +// Test that if we can capture a video frame while playing clear content after +// removing the MediaKeys object which was used for a previous encrypted content +// playback on the same video element +function startTest(test, token) +{ + manager.started(token); + var sessions = []; + function onSessionCreated(session) { + sessions.push(session); + } + + function closeSessions() { + let p = new EMEPromise; + Promise.all(sessions.map(s => s.close())) + .then(p.resolve, p.reject); + return p.promise; + } + + let v = document.createElement("video"); + document.body.appendChild(v); + + let finish = new EMEPromise; + + function onVideoEnded(ev) { + ok(true, TimeStamp(token) + " (ENCRYPTED) content playback ended."); + + function playClearVideo() { + var p1 = once(v, 'loadeddata', (e) => { + ok(true, TimeStamp(token) + " Receiving event 'loadeddata' for (CLEAR) content."); + let canvasElem = document.createElement('canvas'); + document.body.appendChild(canvasElem); + let ctx2d = canvasElem.getContext('2d'); + + var gotTypeError = false; + try { + ctx2d.drawImage(v, 0, 0); + } catch (ex) { + if (ex instanceof TypeError) { + gotTypeError = true; + } + } + ok(!gotTypeError, TimeStamp(token) + " Canvas2D context drawImage succeed.") + }); + v.src = 'bipbop_225w_175kbps.mp4'; + v.play(); + Promise.all([p1]).then(() => { + manager.finished(token); + }, () => { + ok(false, TimeStamp(token) + " Something wrong."); + manager.finished(token); + }); + } + + closeSessions() + .then(() => { + v.setMediaKeys(null) + .then(() => { + ok(true, TimeStamp(token) + " Setting MediaKeys to null."); + playClearVideo(); + }, () => { + ok(false, TimeStamp(token) + " Setting MediaKeys to null."); + });; + }); + } + + once(v, "ended", onVideoEnded); + + // Create a MediaKeys object and set to HTMLMediaElement then start the playback. + Promise.all([ + LoadInitData(v, test, token), + CreateAndSetMediaKeys(v, test, token), + LoadTest(test, v, token)]) + .then(values => { + let initData = values[0]; + v.play(); + initData.map(ev => { + let session = v.mediaKeys.createSession(); + onSessionCreated(session); + MakeRequest(test, token, ev, session); + }); + }) + .then(() => { + return finish.promise; + }) + .catch(reason => ok(false, reason)) +} + +function beginTest() { + manager.runTests(gEMETests, startTest); +} + +SimpleTest.waitForExplicitFinish(); +SetupEMEPref(beginTest); + +</script> +</pre> +</body> +</html> |