blob: d5f793f046ac7ab6670950ff318845d58dd09510 [file] [edit]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test passing capture device IDs to getUserMedia</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
promise_test((test) => {
return navigator.mediaDevices.enumerateDevices()
.then((devices) => {
assert_greater_than(devices.length, 0);
let device = devices[0];
assert_true(device instanceof MediaDeviceInfo);
assert_class_string(device, "InputDeviceInfo");
assert_true('deviceId' in device);
assert_true('kind' in device);
assert_true('label' in device);
assert_true('groupId' in device);
assert_true('toJSON' in device);
let serializedResult = device.toJSON();
assert_equals(serializedResult['deviceId'], device.deviceId);
assert_equals(serializedResult['kind'], device.kind);
assert_equals(serializedResult['label'], device.label);
assert_equals(serializedResult['groupId'], device.groupId);
});
}, "Test properties of MediaDeviceInfo");
promise_test(async (test) => {
await navigator.mediaDevices.enumerateDevices();
const devices = await navigator.mediaDevices.enumerateDevices();
assert_equals(devices.length, 2);
assert_equals(devices[0].kind, "audioinput");
assert_equals(devices[1].kind, "videoinput");
}, "Ensure enumerateDevices exposes both microphone and camera");
function getDeviceFromTrack(track, devices)
{
let matchingDevice;
const settings = track.getSettings();
devices.forEach(device => {
if (device.deviceId === settings.deviceId)
matchingDevice = device;
});
return matchingDevice;
}
promise_test(async (test) => {
const stream = await navigator.mediaDevices.getUserMedia({ audio:true, video:true });
test.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const devices = await navigator.mediaDevices.enumerateDevices();
const audioTrack = stream.getAudioTracks()[0];
assert_equals(audioTrack.getSettings().deviceId, audioTrack.getCapabilities().deviceId, "audio deviceId");
assert_equals(audioTrack.getSettings().groupId, audioTrack.getCapabilities().groupId, "audio groupId");
const videoTrack = stream.getVideoTracks()[0];
assert_equals(videoTrack.getSettings().deviceId, videoTrack.getCapabilities().deviceId, "video deviceId");
assert_equals(videoTrack.getSettings().groupId, videoTrack.getCapabilities().groupId, "video groupId");
const audioDevice = getDeviceFromTrack(audioTrack, devices);
assert_true(audioDevice !== undefined, "audio device found");
assert_equals(audioDevice.deviceId, audioTrack.getSettings().deviceId, "audio device info deviceId");
assert_equals(audioDevice.groupId, audioTrack.getSettings().groupId, "audio device info groupId");
const videoDevice = getDeviceFromTrack(videoTrack, devices);
assert_true(videoDevice !== undefined, "video device found");
assert_equals(videoDevice.deviceId, videoTrack.getSettings().deviceId, "video device info deviceId");
assert_equals(videoDevice.groupId, videoTrack.getSettings().groupId, "video device info groupId");
}, "Ensure enumerateDevices and getUserMedia MediaStreamTrack expose the same deviceId and groupIds");
</script>
</head>
<body>
</body>
</html>