| <script> |
| function callGetUserMedia(haveAccess) { |
| return navigator.mediaDevices.getUserMedia({ audio: true, video: false }) |
| .then(() => { |
| if (!haveAccess) { |
| throw "getUserMedia() succeeded when the page doesn't have " + |
| "micriphone 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 == "audioinput") { |
| found = true; |
| if (d.deviceId == "" && haveAccess) { |
| throw "deviceId must not be empty when mic permission is granted."; |
| } else if (d.deviceId != "" && !haveAccess) { |
| throw "deviceId must be non-empty only when mic permission is granted."; |
| } |
| if (d.label != "" && !haveAccess) { |
| throw "device label must be empty unless mic permission is granted."; |
| } |
| // TODO(crbug.com/1065436): Verify that d.label is set when microphone |
| // permission is granted. |
| } |
| } |
| if (!found) { |
| throw "enumerateDevices() didn't return any audioinput devices."; |
| } |
| }); |
| } |
| |
| // NoPermission is passed in the URL when the page doesn't have microphone |
| // access. |
| var haveAccess = (window.location.href.indexOf("NoPermission") < 0); |
| |
| callGetUserMedia(haveAccess) |
| .then(() => { return callEnumerateDevices(haveAccess); }) |
| .then(() => { document.title = "ended"; }) |
| </script> |