| <!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> |