summaryrefslogtreecommitdiffstats
path: root/dom/media/test/test_streams_element_capture_twice.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/test/test_streams_element_capture_twice.html')
-rw-r--r--dom/media/test/test_streams_element_capture_twice.html79
1 files changed, 79 insertions, 0 deletions
diff --git a/dom/media/test/test_streams_element_capture_twice.html b/dom/media/test/test_streams_element_capture_twice.html
new file mode 100644
index 0000000000..0e30be1801
--- /dev/null
+++ b/dom/media/test/test_streams_element_capture_twice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test that capturing a media element, then reloading and capturing again, works</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>
+<video id="v"></video>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+SimpleTest.waitForExplicitFinish();
+
+const v = document.getElementById('v');
+
+function dumpEvent(event) {
+ const video = event.target;
+ info(video.name + " GOT EVENT " + event.type +
+ " currentTime=" + video.currentTime +
+ " paused=" + video.paused +
+ " ended=" + video.ended +
+ " readyState=" + video.readyState);
+}
+
+const events = ["timeupdate", "seeking", "seeked", "ended", "playing", "pause"];
+for (let i = 0; i < events.length; ++i) {
+ v.addEventListener(events[i], dumpEvent);
+}
+
+async function startTest(src) {
+ v.preload = "metadata";
+ v.src = src;
+ await new Promise(r => v.onloadedmetadata = r);
+ const s1 = v.mozCaptureStream();
+ const tracks = s1.getTracks();
+ is(tracks.length, 2, "Expected total tracks, s1, capture 1");
+ is(s1.getAudioTracks().length, 1, "Expected audio tracks, s1, capture 1");
+ is(s1.getVideoTracks().length, 1, "Expected video tracks, s1, capture 1");
+ is(s1.getAudioTracks()[0].readyState, "live", "Live audio, s1, capture 1");
+ is(s1.getVideoTracks()[0].readyState, "live", "Live video, s1, capture 1");
+
+ v.src = null;
+ for (let i = 0; i < tracks.length; ++i) {
+ await Promise.race(tracks.map(t => new Promise(r => t.onended = r)));
+ await new Promise(r => s1.onremovetrack = r);
+ }
+ is(s1.getTracks().length, 0, "Expected total tracks, s1, metadata 2");
+
+ v.src = src;
+ await new Promise(r => v.onloadedmetadata = r);
+ is(s1.getTracks().length, 2, "Expected total tracks, s1, metadata 2");
+ is(s1.getAudioTracks().length, 1, "Expected audio tracks, s1, metadata 2");
+ is(s1.getVideoTracks().length, 1, "Expected video tracks, s1, metadata 2");
+ is(s1.getAudioTracks()[0].readyState, "live", "Live audio, s1, metadata 2");
+ is(s1.getVideoTracks()[0].readyState, "live", "Live video, s1, metadata 2");
+
+ const s2 = v.mozCaptureStream();
+ is(s1.getTracks().length, 2, "Expected total tracks remains, s1, capture 2");
+ is(s2.getTracks().length, 2, "Expected total tracks, s2, capture 2");
+ is(s2.getAudioTracks().length, 1, "Expected audio tracks, s2, capture 2");
+ is(s2.getVideoTracks().length, 1, "Expected video tracks, s2, capture 2");
+ is(s2.getAudioTracks()[0].readyState, "live", "Live audio, s2, capture 2");
+ is(s2.getVideoTracks()[0].readyState, "live", "Live video, s2, capture 2");
+}
+
+(async function() {
+ try {
+ await startTest("short-video.ogv");
+ } catch(e) {
+ ok(false, `Caught error: ${e}${e.stack ? '\n' + e.stack : ''}`);
+ } finally {
+ SimpleTest.finish();
+ }
+})();
+</script>
+</pre>
+</body>
+</html>