<!DOCTYPE html>
<body>
  <script src=/resources/testharness.js></script>
  <script src=/resources/testharnessreport.js></script>
  <script src=/common/get-host-info.sub.js></script>
  <script src=/feature-policy/resources/featurepolicy.js></script>
  <script>
  'use strict';

  // The promise_factory must return a promise that runs the feature and
  // resolves if feature usage is successful, otherwise rejects. Using
  // getUserMedia is successful if at least one mic/camera is returned when
  // mic/camera has been explicitly allowed by feature policy.
  function promise_factory(allowed_features) {
    return new Promise((resolve, reject) => {
      navigator.mediaDevices.getUserMedia({video: true, audio: true}).then(
          function(stream) {
            // If microphone is allowed, there should be at least one microphone
            // in the result. If camera is allowed, there should be at least one
            // camera in the result.
            if ((allowed_features.includes('microphone') &&
                 stream.getAudioTracks().length == 0) ||
                (allowed_features.includes('camera') &&
                 stream.getVideoTracks().length == 0)) {
                reject('Feature policy allowed feature but devices not ' +
                    'present.');
            } else {
              // Otherwise the result is expected.
              resolve();
            }
          },
          function(error) { reject(error); });
    });
  };

  var cross_domain = get_host_info().HTTPS_REMOTE_ORIGIN;
  run_all_fp_tests_allow_self(
      cross_domain,
      'microphone',
      'NotAllowedError',
      function() {
        return promise_factory('microphone');
      });

  run_all_fp_tests_allow_self(
      cross_domain,
      'camera',
      'NotAllowedError',
      function() {
        return promise_factory('camera');
      });

  run_all_fp_tests_allow_self(
    cross_domain,
    'camera; microphone',
    'NotAllowedError',
    function() {
      return promise_factory('camera; microphone');
    });
  </script>
</body>

