diff options
Diffstat (limited to '')
-rw-r--r-- | testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html | 133 |
1 files changed, 78 insertions, 55 deletions
diff --git a/testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html b/testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html index 3fbc1f0f2d..daae044fa8 100644 --- a/testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html +++ b/testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html @@ -4,6 +4,20 @@ <head> <title>MediaRecorder peer connection</title> + <meta name=variant content="?kinds=video&mimeType=''"> + <meta name=variant content="?kinds=audio&mimeType=''"> + <meta name=variant content="?kinds=video,audio&mimeType=''"> + <meta name=variant content="?kinds=audio&mimeType=audio/webm;codecs=opus"> + <meta name=variant content="?kinds=video&mimeType=video/webm;codecs=vp8"> + <meta name=variant content="?kinds=video,audio&mimeType=video/webm;codecs=vp8,opus"> + <meta name=variant content="?kinds=video&mimeType=video/webm;codecs=vp9"> + <meta name=variant content="?kinds=video,audio&mimeType=video/webm;codecs=vp9,opus"> + <meta name=variant content="?kinds=video,audio&mimeType=video/mp4;codecs=avc1,mp4a.40.2"> + <meta name=variant content="?kinds=video&mimeType=video/mp4;codecs=vp9"> + <meta name=variant content="?kinds=audio&mimeType=audio/mp4;codecs=opus"> + <meta name=variant content="?kinds=video,audio&mimeType=video/mp4;codecs=vp9,opus"> + <meta name=variant content="?kinds=video,audio&mimeType=video/mp4"> + <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#dom-mediarecorder-mimeType"> <script src="/resources/testharness.js"></script> @@ -15,74 +29,83 @@ </head> <body> - <video id="remote" autoplay width="240"></video> - <script> +<video id="remote" autoplay width="240"></video> + +<script> + const params = new URLSearchParams(window.location.search); + const mimeType = params.get('mimeType'); + const kinds = params.get('kinds'); + const tag = `kinds "${kinds} "mimeType "${mimeType}"`; + let stream; + let pc; -promise_setup(async () => { - const t = {add_cleanup: add_completion_callback}; - const [, pc, stream] = await startConnection(t, true, true); - const [audio] = stream.getAudioTracks(); - const [video] = stream.getVideoTracks(); + promise_setup(async () => { + const t = {add_cleanup: add_completion_callback}; + const [, connection_pc, connection_stream] = await startConnection(t, true, true); + pc = connection_pc; + + let video = null; + if (kinds.indexOf('video') != -1) { + video = connection_stream.getVideoTracks()[0]; + } - // Needed for the tests to get exercised in Chrome (bug) - document.getElementById('remote').srcObject = stream; + let audio = null; + if (kinds.indexOf('audio') != -1) { + audio = connection_stream.getAudioTracks()[0]; + } - for (const {kinds, mimeType} of [ - { kinds: { video }, mimeType: "" }, - { kinds: { audio }, mimeType: "" }, - { kinds: { video, audio }, mimeType: "" }, - { kinds: { audio }, mimeType: "audio/webm;codecs=opus" }, - { kinds: { video }, mimeType: "video/webm;codecs=vp8" }, - { kinds: { video, audio }, mimeType: "video/webm;codecs=vp8,opus" }, - { kinds: { video }, mimeType: "video/webm;codecs=vp9" }, - { kinds: { video, audio }, mimeType: "video/webm;codecs=vp9,opus" }, - { kinds: { audio }, mimeType: "audio/mp4;codecs=mp4a.40.2" }, - { kinds: { video, audio }, mimeType: "video/mp4;codecs=avc1,mp4a.40.2" } - ]) { - const tag = `${JSON.stringify(kinds)} mimeType "${mimeType}"`; - const stream = new MediaStream([kinds.audio, kinds.video].filter(n => n)); + // Needed for the tests to get exercised in Chrome (bug) + document.getElementById('remote').srcObject = connection_stream; + stream = new MediaStream([audio, video].filter(n => n)); + }); + promise_test(async t => { // Spec doesn't mandate codecs, so if not supported, test failure instead. if (mimeType && !MediaRecorder.isTypeSupported(mimeType)) { promise_test(async t => { assert_throws_dom('NotSupportedError', () => new MediaRecorder(stream, { mimeType })); - }, `MediaRecorder constructor throws on no support, ${tag}`); - continue; + }, `MediaRecorder constructor throws on no support 1, ${tag}`); + return; } - promise_test(async t => { - const recorder = new MediaRecorder(stream, { mimeType }); - recorder.start(200); - await new Promise(r => recorder.onstart = r); - let combinedSize = 0; - // Wait for a small amount of data to appear. Kept small for mobile tests - while (combinedSize < 2000) { - const {data} = await new Promise(r => recorder.ondataavailable = r); - combinedSize += data.size; - } - recorder.stop(); - }, `PeerConnection MediaRecorder receives data after onstart, ${tag}`); + const recorder = new MediaRecorder(stream, { mimeType }); + recorder.start(200); + await new Promise(r => recorder.onstart = r); + let combinedSize = 0; + // Wait for a small amount of data to appear. Kept small for mobile tests + while (combinedSize < 2000) { + const {data} = await new Promise(r => recorder.ondataavailable = r); + combinedSize += data.size; + } + recorder.stop(); + }, `PeerConnection MediaRecorder receives data after onstart, ${tag}`); - promise_test(async t => { - const clone = stream.clone(); - const recorder = new MediaRecorder(clone, { mimeType }); - recorder.start(); - await new Promise(r => recorder.onstart = r); - await waitForReceivedFramesOrPackets(t, pc, kinds.audio, kinds.video, 10); - for (const track of clone.getTracks()) { - track.stop(); - } - // As the tracks ended, expect data from the recorder. - await Promise.all([ - new Promise(r => recorder.onstop = r), - new Promise(r => recorder.ondataavailable = r) - ]); - }, `PeerConnection MediaRecorder gets ondata on stopping tracks, ${tag}`); - } -}); + promise_test(async t => { + // Spec doesn't mandate codecs, so if not supported, test failure instead. + if (mimeType && !MediaRecorder.isTypeSupported(mimeType)) { + promise_test(async t => { + assert_throws_dom('NotSupportedError', + () => new MediaRecorder(stream, { mimeType })); + }, `MediaRecorder constructor throws on no support 2, ${tag}`); + return; + } + + const clone = stream.clone(); + const recorder = new MediaRecorder(clone, { mimeType }); + recorder.start(); + await new Promise(r => recorder.onstart = r); + await waitForReceivedFramesOrPackets(t, pc, kinds.audio, kinds.video, 10); + for (const track of clone.getTracks()) { + track.stop(); + } + // As the tracks ended, expect data from the recorder. + await Promise.all([ + new Promise(r => recorder.onstop = r), + new Promise(r => recorder.ondataavailable = r) + ]); + }, `PeerConnection MediaRecorder gets ondata on stopping tracks, ${tag}`); </script> </body> - </html> |