<!doctype html>
<html>
<head>
<title>MediaRecorder Disabled Tracks</title>
<link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src='../mediacapture-streams/permission-helper.js'></script>
</head>
<script>
// This test verifies that MediaStream with disabled tracks can be correctly
// recorded. See crbug.com/878255 for more context.
[ ["video-only", {video: true, audio: false}],
["audio-only", {video: false, audio: true}],
["audio-video", {video: true, audio: true}]]
.forEach( function(args) {
async_test(function(test) {
let recorder;
const recorderOnDataAvailable = test.step_func(function(event) {
if (recorder.state != "recording")
return;
recorder.onstop = recorderOnStopExpected;
recorder.stop();
});
const recorderOnStopExpected = test.step_func_done();
const recorderOnStopUnexpected = test.unreached_func('Recording stopped.');
const recorderOnError = test.unreached_func('Recording error.');
const gotStream = test.step_func(function(stream) {
for (track of stream.getTracks())
track.enabled = false;
recorder = new MediaRecorder(stream);
assert_equals(recorder.state, "inactive");
recorder.ondataavailable = recorderOnDataAvailable;
recorder.onstop = recorderOnStopUnexpected;
recorder.onerror = recorderOnError;
recorder.start();
assert_equals(recorder.state, "recording");
recorder.requestData();
});
const onError = test.unreached_func('Error creating MediaStream.');
setMediaPermission().then(() => navigator.mediaDevices.getUserMedia(args[1])).then(gotStream, onError);
}, args[0]);
});
</script>