1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49

fuchsia_web / webengine / test / data / camera.html [blame]

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