<!DOCTYPE html>
<meta charset=utf-8>
<body>
  <script src="/resources/testharness.js"
          type="text/javascript{{GET[in-iframe]}}"></script>
  <script src="/resources/testharnessreport.js"
          type="text/javascript{{GET[in-iframe]}}"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <script src="/common/get-host-info.sub.js"></script>
  <script src="/permissions-policy/resources/permissions-policy.js"></script>
  <script>
  'use strict';

  async function getDisplayMedia(constraints) {
    await test_driver.bless('transient activation for getDisplayMedia()');
    return navigator.mediaDevices.getDisplayMedia(constraints);
  }

  async function testGDM({audio, video}) {
    let stream;
    try {
      stream = await getDisplayMedia({audio, video});
      if (stream.getVideoTracks().length == 0) {
        throw Error(`requested video track must be present with ` +
                    `audio ${audio} and video ${video}, or fail`);
      }
    } finally {
      if (stream) {
        stream.getTracks().forEach(track => track.stop());
      }
    }
  }

  if (page_loaded_in_iframe()) {
    test_driver.set_test_context(window.parent);
  }
  const cross_domain = get_host_info().HTTPS_REMOTE_ORIGIN;
  run_all_fp_tests_allow_self(
    cross_domain,
    'display-capture',
    'NotAllowedError',
    async () => {
      await testGDM({audio: true});
    }
  );
  </script>
</body>
