<!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="/permissions-policy/resources/permissions-policy.js"></script>
  <script>
    const same_origin_src =
      "/permissions-policy/resources/permissions-policy-geolocation.html";
    const cross_origin_src =
      "https://{{hosts[alt][]}}:{{ports[https][0]}}" + same_origin_src;

    promise_setup(async () => {
      await test_driver.set_permission({ name: "geolocation" }, "granted");
    });

    promise_test(async (test) => {
      const position = await new Promise((resolve, reject) => {
        navigator.geolocation.getCurrentPosition(resolve, reject);
      });

      assert_true(
        position instanceof GeolocationPosition,
        "Expected a GeolocationPosition"
      );
    }, "Permissions-Policy header geolocation=* allows the top-level document.");

    promise_test(async (test) => {
      await test_feature_availability({
        feature_description: "Geolocation API",
        test,
        src: same_origin_src,
        expect_feature_available: expect_feature_available_default,
        is_promise_test: true,
      });
    }, "Permissions-Policy header geolocation=* allows same-origin iframes.");

    promise_test(async (test) => {
      await test_feature_availability({
        feature_description: "Geolocation API",
        test,
        src: cross_origin_src,
        expect_feature_available: expect_feature_available_default,
        feature_name: "geolocation",
        is_promise_test: true,
      });
    }, "Permissions-Policy header geolocation=* allows cross-origin iframes.");
  </script>
</body>
