diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/media/test/test_eme_unsetMediaKeys_then_capture.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
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 | 108 |
1 files changed, 108 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..3ecdc79dbf --- /dev/null +++ b/dom/media/test/test_eme_unsetMediaKeys_then_capture.html @@ -0,0 +1,108 @@ +<!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)) +} + +SimpleTest.waitForExplicitFinish(); +manager.runTests(gEMETests, startTest); +</script> +</pre> +</body> +</html> |