<!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({video: true});
    }
  );
  </script>
</body>
