summaryrefslogtreecommitdiffstats
path: root/dom/media/test/test_eme_unsetMediaKeys_then_capture.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/test/test_eme_unsetMediaKeys_then_capture.html')
-rw-r--r--dom/media/test/test_eme_unsetMediaKeys_then_capture.html108
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>