blob: 3e2fa325a144f39633159c7a5df8577810da4b1d [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
var captureDevices;
var captureDevice;
var havePermission;
var deviceIds = [];
description("Tests MediaDevices.enumerateDevices()");
window.jsTestIsAsync = true;
shouldBeType("navigator.mediaDevices", "Object");
shouldBeType("navigator.mediaDevices.enumerateDevices", "Function");
debug("");
function enumerate(next)
{
navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
captureDevices = devices;
shouldBeNonZero("captureDevices.length");
debug("");
devices.forEach(function(device) {
captureDevice = device;
shouldBeNonNull("captureDevice.kind");
shouldBeNonNull("captureDevice.deviceId");
shouldBeNonNull("captureDevice.label");
if (havePermission)
shouldNotBeEqualToString("captureDevice.label", "");
else
shouldBeEmptyString("captureDevice.label");
shouldBeNonNull("captureDevice.groupId");
if (deviceIds.length < 2)
deviceIds.push(captureDevice.deviceId);
else
shouldNotBe("deviceIds.indexOf(captureDevice.deviceId)", "-1");
debug("");
});
if (next)
next();
else
finishJSTest();
})
.catch(function(err) {
testFailed(err.name + ": " + err.message);
});
}
function createStream()
{
if (window.testRunner) {
testRunner.setUserMediaPermission(true);
testRunner.setUserMediaPermissionForOrigin(false, document.location.href, "");
}
navigator.mediaDevices
.getUserMedia({audio:{}, video:{}})
.then(function(stream) {
debug(`<br>*** Calling mediaDevices.enumerateDevices without persistent access, with a media stream track<br>`);
havePermission = true;
enumerate(null);
})
.catch(function(err) {
testFailed(`mediaDevices.getUserMedia() failed with ${err.name}: ${err.message}`);
finishJSTest();
});
}
function grantPermission()
{
if (window.testRunner)
testRunner.setUserMediaPermissionForOrigin(true, document.location.href, "");
debug(`<br>*** Calling mediaDevices.enumerateDevices with persistent access, and without a media stream track<br>`);
havePermission = true;
enumerate(createStream);
}
havePermission = false;
debug(`<br>*** Calling mediaDevices.enumerateDevices without persistent access, and without a media stream track<br>`);
enumerate(grantPermission);
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>