Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BreakoutBox] Update tests for MediaStreamTrackProcessor #29278

Merged
merged 1 commit into from Jun 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,43 +1,50 @@
<!doctype html>
<html>

<head>
<title>MediaStreamTrackProcessor</title>
<link rel="help" href="https://w3c.github.io/mediacapture-insertable-streams">
</head>

<body>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that processing captured audio MediaStreamTracks works as expected.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that MediaStreamTrackProcessor works as expected on audio MediaStreamTracks.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const reader = processor.readable.getReader();
const readResult = await reader.read();
assert_false(readResult.done)
assert_true(readResult.value instanceof AudioData);
readResult.value.close();
track.stop();
return reader.closed;
}, "Tests that the reader of an audio MediaStreamTrackProcessor produces AudioData objects and is closed on track stop");

promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
assert_equals(stream.getAudioTracks().length, 1);
const audioTrack = stream.getAudioTracks()[0];

return new Promise((resolve, reject) => {
const writableStream = new WritableStream({
write(audioData) {
assert_true(audioData instanceof AudioData);
assert_not_equals(audioData.timestamp, null);
resolve();
},
close() {
assert_unreached("Closed");
},
abort(err) {
assert_unreached("Sink error:" + err);
}
});
const audioTrackProcessor = new MediaStreamTrackProcessor(audioTrack);
audioTrackProcessor.readable.pipeTo(writableStream);
});
}, "Tests that creating an Audio MediaStreamTrackProcessor works as expected");
</script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const worker = new Worker('MediaStreamTrackProcessor-worker.js');
const promise = new Promise(resolve => {
worker.onmessage = t.step_func(msg => {
if (msg.data instanceof AudioData) {
msg.data.close();
track.stop();
} else if (msg.data == 'closed') {
resolve();
} else {
assert_unreached();
}
})
});
worker.postMessage({readable: processor.readable},
[processor.readable]);
return promise;
}, "Tests that the reader of an audio MediaStreamTrackProcessor produces AudioData objects and is closed on track stop while running on a worker");
</script>
</body>

</html>
@@ -0,0 +1,50 @@
<!doctype html>
<html>
<head>
<title>MediaStreamTrackProcessor</title>
<link rel="help" href="https://w3c.github.io/mediacapture-insertable-streams">
</head>
<body>
<p class="instructions">When prompted, use the accept button to give permission to use your audio and video devices.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that MediaStreamTrackProcessor works as expected on video MediaStreamTracks.</p>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const reader = processor.readable.getReader();
const readResult = await reader.read();
assert_false(readResult.done)
assert_true(readResult.value instanceof VideoFrame);
readResult.value.close();
track.stop();
return reader.closed;
}, "Tests that the reader of a video MediaStreamTrackProcessor produces video frames and is closed on track stop");

promise_test(async t => {
const stream = await navigator.mediaDevices.getUserMedia({video: true});
const track = stream.getTracks()[0];
const processor = new MediaStreamTrackProcessor({track: track});
const worker = new Worker('MediaStreamTrackProcessor-worker.js');
const promise = new Promise(resolve => {
worker.onmessage = t.step_func(msg => {
if (msg.data instanceof VideoFrame) {
msg.data.close();
track.stop();
} else if (msg.data == 'closed') {
resolve();
} else {
assert_unreached();
}
})
});
worker.postMessage({readable: processor.readable},
[processor.readable]);
return promise;
}, "Tests that the reader of a video MediaStreamTrackProcessor produces VideoFrame objects and is closed on track stop while running on a worker");
</script>
</body>
</html>
@@ -0,0 +1,17 @@
onmessage = async msg => {
const reader = msg.data.readable.getReader();
let readResult = await reader.read();
postMessage(readResult.value);
readResult.value.close();
// Continue reading until the stream is done due to a track.stop()
while (true) {
readResult = await reader.read();
if (readResult.done) {
break;
} else {
readResult.value.close();
}
}
await reader.closed;
postMessage('closed');
}