| <script> | |
| function callGetUserMedia(haveAccess) { | |
| return navigator.mediaDevices.getUserMedia({ audio: false, video: true }) | |
| .then(() => { | |
| if (!haveAccess) { | |
| throw "getUserMedia() succeeded when the page doesn't have " + | |
| "camera access"; | |
| } | |
| }) | |
| .catch((e) => { | |
| if (!haveAccess && e.name == "NotFoundError") | |
| return; | |
| throw e; | |
| }); | |
| } | |
| function callEnumerateDevices(haveAccess) { | |
| return navigator.mediaDevices.enumerateDevices().then((devices)=>{ | |
| var found = false; | |
| for (d of devices) { | |
| if (d.kind == "videoinput") { | |
| console.log("FOUND CAMERA ", d.deviceId, d.label) | |
| found = true; | |
| if (d.deviceId == "" && haveAccess) { | |
| throw "deviceId must not be empty when camera permission is granted."; | |
| } else if (d.deviceId != "" && !haveAccess) { | |
| throw "deviceId must be non-empty only when camera permission is granted."; | |
| } | |
| if (d.label != "" && !haveAccess) { | |
| throw "device label must be empty unless camera permission is granted."; | |
| } | |
| // TODO(crbug.com/40124154): Verify that d.label is set when camera | |
| // permission is granted. | |
| } | |
| } | |
| if (!found) { | |
| throw "enumerateDevices() didn't return any videoinput devices."; | |
| } | |
| }); | |
| } | |
| // NoPermission is passed in the URL when the page doesn't have camera | |
| // access. | |
| var haveAccess = (window.location.href.indexOf("NoPermission") < 0); | |
| callGetUserMedia(haveAccess) | |
| .then(() => { return callEnumerateDevices(haveAccess); }) | |
| .then(() => { document.title = "ended"; }) | |
| </script> |