<!DOCTYPE html>
<title>Test Payment Handler API</title>
<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="/common/utils.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
<script src="resources/utils.js"></script>

<body>
<script>
promise_test(async () => {
  const frame = attachFencedFrameContext();
  const error_name = await frame.execute(async () => {
    navigator.serviceWorker.register(
      "empty-worker.js", { scope: location.href });
    const registration = await navigator.serviceWorker.ready;
    try {
      registration.paymentManager;
    } catch (e) {
      return e.name;
    }
  });
  assert_equals(error_name, "NotAllowedError",
                "paymentManager is not allowed in fenced frames");
}, 'paymentManager should fail inside a fenced frame');

promise_test(async () => {
  const frame = attachFencedFrameContext();
  const error_name = await frame.execute(async () => {
    const getController = () => {
      if (navigator.serviceWorker.controller) {
        return navigator.serviceWorker.controller;
      }
      return new Promise(resolve => {
        navigator.serviceWorker.addEventListener('controllerchange', () => {
          resolve(navigator.serviceWorker.controller);
        });
      });
    };

    navigator.serviceWorker.register(
      "payment-handler-sw.js", { scope: location.href });
    const ctrl = await getController();

    return new Promise(resolve => {
      ctrl.postMessage("test");
      navigator.serviceWorker.onmessage = e => {
        const error = e.data;
        resolve(error.name);
      };
    });
  });
  assert_equals(error_name, "NotAllowedError",
                "paymentManager is not allowed from the service worker " +
                "in fenced frames");
}, 'paymentManager should fail from the service worker inside a fenced frame');
</script>
</body>
