summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html')
-rw-r--r--testing/web-platform/tests/mediacapture-record/MediaRecorder-peerconnection.https.html133
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>