<!doctype html>
<meta charset=utf-8>
<title>Test permissions query againts feature policy allow attribute</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id="log"></div>

<script>
  "use strict";

  function test_permissions_query(
    feature_description, test, src, expect_state, allow_attribute) {
    let frame = document.createElement('iframe');
    frame.src = src;

    if (typeof allow_attribute !== 'undefined') {
      frame.allow = allow_attribute;
    }

    window.addEventListener('message', test.step_func(function handler(evt) {
      if (evt.source === frame.contentWindow) {
        assert_equals(evt.data.state, expect_state, feature_description);
        document.body.removeChild(frame);
        window.removeEventListener('message', handler);
        test.done();
      }
    }));

    document.body.appendChild(frame);
  }

  const same_origin_src =
    "/permissions/feature-policy-permissions-query.html";
  const cross_origin_src =
    "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src;

   async_test(t => {
    test_permissions_query(
      'navigator.permissions.query("geolocation")',
      t,
      same_origin_src,
      "prompt",
      "geolocation"
    );
  }, 'Permissions.state is "prompt" with allow="geolocation" in same-origin iframes.');

  async_test(t => {
    test_permissions_query(
      'navigator.permissions.query("geolocation")',
      t,
      cross_origin_src,
      "prompt",
      "geolocation"
    );
  }, 'Permissions.state is "prompt" with allow="geolocation" in cross-origin iframes.');

   async_test(t => {
    test_permissions_query(
      'navigator.permissions.query("geolocation")',
      t,
      same_origin_src,
      "prompt"
    );
  }, 'Permission.state is "prompt" in same-origin iframes.');

  async_test(t => {
    test_permissions_query(
      'navigator.permissions.query("geolocation")',
      t,
      cross_origin_src,
      "denied"
    );
  }, 'Permission.state is "denied" in cross-origin iframes.');

</script>
