<!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>
    "use strict";

    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 posError = await new Promise((resolve, reject) => {
        navigator.geolocation.getCurrentPosition(reject, resolve);
      });

      assert_true(
        posError instanceof GeolocationPositionError,
        "Expected instance of GeolocationPositionError"
      );

      assert_equals(
        posError.code,
        GeolocationPositionError.prototype.PERMISSION_DENIED,
        "Expected PERMISSION_DENIED"
      );

      const watchError = await new Promise((resolve, reject) => {
        navigator.geolocation.watchPosition(reject, resolve);
      });
      assert_true(
        watchError instanceof GeolocationPositionError,
        "Expected instance of GeolocationPositionError"
      );
      assert_equals(
        watchError.code,
        GeolocationPositionError.prototype.PERMISSION_DENIED,
        "Expected PERMISSION_DENIED"
      );
    }, "Feature-Policy header geolocation : 'none' disallows the top-level document.");

    async_test((t) => {
      test_feature_availability(
        "geolocation",
        t,
        same_origin_src,
        expect_feature_unavailable_default
      );
    }, "Feature-Policy header geolocation : 'none' disallows same-origin iframes.");

    async_test((t) => {
      test_feature_availability(
        "geolocation",
        t,
        cross_origin_src,
        expect_feature_unavailable_default
      );
    }, "Feature-Policy header geolocation 'none' disallows cross-origin iframes.");
  </script>
</body>
