Unreviewed, rolling out r238844, r238846, and r238874.
[WebKit-https.git] / LayoutTests / http / wpt / mediarecorder / MediaRecorder-mock-dataavailable.html
1 <!doctype html>
2 <html>
3 <head>
4     <title>MediaRecorder Dataavailable</title>
5     <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder">
6     <script src="/resources/testharness.js"></script>
7     <script src="/resources/testharnessreport.js"></script>
8 </head>
9 <body>
10 <canvas id="canvas" width="200" height="200">
11 </canvas>
12 <script>
13     var context;
14
15     function createVideoStream() {
16         const canvas = document.getElementById("canvas");
17         context = canvas.getContext('2d');
18         return canvas.captureStream();
19     }
20
21     function drawSomethingOnCanvas() {
22         context.fillStyle = "red";
23         context.fillRect(0, 0, 10, 10);
24     }
25
26     async_test(t => {
27         const video = createVideoStream();
28         const recorder = new MediaRecorder(video);
29         const reader = new FileReader();
30
31         recorder.ondataavailable = t.step_func(blobEvent => {
32             reader.readAsText(blobEvent.data);
33             reader.onloadend = t.step_func(() => {
34                 assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder successfully captured video buffers');
35                 assert_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
36                 t.done();
37             });
38         });
39         recorder.start();
40         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
41         drawSomethingOnCanvas();
42         setTimeout(() => {
43             recorder.stop();
44         }, 2000);
45     }, 'MediaRecorder will fire a dataavailable event which only contains video buffers for a video-only stream when stop() is called');
46
47     async_test(t => {
48         const ac = new AudioContext();
49         const osc = ac.createOscillator();
50         const dest = ac.createMediaStreamDestination();
51         const audio = dest.stream;
52         osc.connect(dest);
53         const recorder = new MediaRecorder(audio);
54         const reader = new FileReader();
55
56         recorder.ondataavailable = t.step_func(blobEvent => {
57             reader.readAsText(blobEvent.data);
58             reader.onloadend = t.step_func(() => {
59                 assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
60                 assert_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
61                 t.done();
62             });
63         });
64         recorder.start();
65         osc.start();
66         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
67         setTimeout(() => {
68             recorder.stop();
69             osc.stop();
70         }, 2000);
71     }, 'MediaRecorder will fire a dataavailable event which only contains audio buffers for a audio-only stream when stop() is called');
72
73     async_test(t => {
74         const ac = new AudioContext();
75         const osc = ac.createOscillator();
76         const dest = ac.createMediaStreamDestination();
77         const audio = dest.stream;
78         osc.connect(dest);
79
80         const video = createVideoStream();
81         assert_equals(video.getAudioTracks().length, 0, "video mediastream starts with no audio track");
82         assert_equals(audio.getAudioTracks().length, 1, "audio mediastream starts with one audio track");
83         video.addTrack(audio.getAudioTracks()[0]);
84         assert_equals(video.getAudioTracks().length, 1, "video mediastream starts with one audio track");
85         const recorder = new MediaRecorder(video);
86         const reader = new FileReader();
87
88         recorder.ondataavailable = t.step_func(blobEvent => {
89             reader.readAsText(blobEvent.data);
90             reader.onloadend = t.step_func(() => {
91                 assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
92                 assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
93                 t.done();
94             });
95         });
96         recorder.start();
97         osc.start();
98         drawSomethingOnCanvas();
99         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
100         setTimeout(() => {
101             recorder.stop();
102             osc.stop();
103         }, 2000);
104     }, 'MediaRecorder will fire a dataavailable event which only contains both video and audio buffers when stop() is called');
105
106 </script>
107 </body>
108 </html>