43ee488752a4bb46e36464b4b048c4b64f3e9766
[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     if (window.internals)
16         internals.setCustomPrivateRecorderCreator();
17
18     function createVideoStream() {
19         const canvas = document.getElementById("canvas");
20         context = canvas.getContext('2d');
21         return canvas.captureStream();
22     }
23
24     function drawSomethingOnCanvas() {
25         context.fillStyle = "red";
26         context.fillRect(0, 0, 10, 10);
27     }
28
29     async_test(t => {
30         const video = createVideoStream();
31         const recorder = new MediaRecorder(video);
32         const reader = new FileReader();
33
34         recorder.ondataavailable = t.step_func(blobEvent => {
35             reader.readAsText(blobEvent.data);
36             reader.onloadend = t.step_func(() => {
37                 assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder successfully captured video buffers');
38                 assert_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
39                 t.done();
40             });
41         });
42         recorder.start();
43         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
44         drawSomethingOnCanvas();
45         setTimeout(() => {
46             recorder.stop();
47         }, 1000);
48     }, 'MediaRecorder will fire a dataavailable event which only contains video buffers for a video-only stream when stop() is called');
49
50     async_test(t => {
51         const ac = new AudioContext();
52         const osc = ac.createOscillator();
53         const dest = ac.createMediaStreamDestination();
54         const audio = dest.stream;
55         osc.connect(dest);
56         const recorder = new MediaRecorder(audio);
57         const reader = new FileReader();
58
59         recorder.ondataavailable = t.step_func(blobEvent => {
60             reader.readAsText(blobEvent.data);
61             reader.onloadend = t.step_func(() => {
62                 assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
63                 assert_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
64                 t.done();
65             });
66         });
67         recorder.start();
68         osc.start();
69         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
70         setTimeout(() => {
71             recorder.stop();
72             osc.stop();
73         }, 1000);
74     }, 'MediaRecorder will fire a dataavailable event which only contains audio buffers for a audio-only stream when stop() is called');
75
76     async_test(t => {
77         const ac = new AudioContext();
78         const osc = ac.createOscillator();
79         const dest = ac.createMediaStreamDestination();
80         const audio = dest.stream;
81         osc.connect(dest);
82
83         const video = createVideoStream();
84         assert_equals(video.getAudioTracks().length, 0, "video mediastream starts with no audio track");
85         assert_equals(audio.getAudioTracks().length, 1, "audio mediastream starts with one audio track");
86         video.addTrack(audio.getAudioTracks()[0]);
87         assert_equals(video.getAudioTracks().length, 1, "video mediastream starts with one audio track");
88         const recorder = new MediaRecorder(video);
89         const reader = new FileReader();
90
91         recorder.ondataavailable = t.step_func(blobEvent => {
92             reader.readAsText(blobEvent.data);
93             reader.onloadend = t.step_func(() => {
94                 assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
95                 assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
96                 t.done();
97             });
98         });
99         recorder.start();
100         osc.start();
101         drawSomethingOnCanvas();
102         assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
103         setTimeout(() => {
104             recorder.stop();
105             osc.stop();
106         }, 1000);
107     }, 'MediaRecorder will fire a dataavailable event which only contains both video and audio buffers when stop() is called');
108
109 </script>
110 </body>
111 </html>