<!DOCTYPE html>
<meta charset="utf-8" />
<body>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <script src="/feature-policy/resources/featurepolicy.js"></script>
  <script>
    const same_origin_src =
      "/feature-policy/resources/feature-policy-geolocation.html";
    const cross_origin_src =
      "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src;

    promise_test(async (t) => {

      await test_driver.set_permission(
        { name: "geolocation" },
        "granted",
        false
      );

      const result = await new Promise((resolve, reject) => {
        navigator.geolocation.getCurrentPosition(resolve, reject);
      });

      assert_true(
        result instanceof GeolocationPosition,
        "Expected a GeolocationPosition"
      );
    }, "Feature-Policy header geolocation: * allows the top-level document.");

    async_test((t) => {
      test_feature_availability(
        "geolocation",
        t,
        same_origin_src,
        expect_feature_available_default
      );
    }, "Feature-Policy header geolocation: * allows same-origin iframes.");

    async_test((t) => {
      test_feature_availability(
        "geolocation",
        t,
        cross_origin_src,
        expect_feature_available_default
      );
    }, "Feature-Policy header geolocation: * allows cross-origin iframes.");
  </script>
</body>
