summaryrefslogtreecommitdiffstats
path: root/dom/media/test/test_mediarecorder_multipletracks.html
blob: 40fbfb92ce4213bd4d7679e56fdc66149743ff95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE HTML>
<html>
<head>
  <title>Test that MediaRecorder fires an error event when started with >1 track of a kind</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script src="/tests/dom/media/webrtc/tests/mochitests/head.js"></script>
</head>
<body>
<script class="testbody">
"use strict";

(async () => {
  SimpleTest.waitForExplicitFinish();
  SimpleTest.requestFlakyTimeout("Failure timeouts");

  try {
    const stream = new MediaStream;
    const recorder = new MediaRecorder(stream);

    {
      info("Testing with two audio tracks");
      const ac = new AudioContext;
      const track = ac.createMediaStreamDestination().stream.getTracks()[0];
      stream.addTrack(track);
      stream.addTrack(track.clone());
      mustThrowWith("Starting with multiple audio tracks",
                    "NotSupportedError",
                    () => recorder.start());
      await Promise.all([
        haveNoEvent(recorder, "start"),
        haveNoEvent(recorder, "error"),
        haveNoEvent(recorder, "stop"),
      ]);
      for (let t of stream.getTracks()) {
        stream.removeTrack(t);
        t.stop();
      }
    }

    {
      info("Testing with two video tracks");
      const canvas = document.createElement("canvas");
      canvas.getContext("2d");
      const track = canvas.captureStream().getTracks()[0];
      stream.addTrack(track);
      stream.addTrack(track.clone());
      mustThrowWith("Starting with multiple video tracks",
                    "NotSupportedError",
                    () => recorder.start());
      await Promise.all([
        haveNoEvent(recorder, "start"),
        haveNoEvent(recorder, "error"),
        haveNoEvent(recorder, "stop"),
      ]);
      for (let t of stream.getTracks()) {
        stream.removeTrack(t);
        t.stop();
      }
    }
  } catch(e) {
    ok(false, `${e}\n${e.stack}`);
  } finally {
    SimpleTest.finish();
  }
})();
</script>
</body>
</html>