<!DOCTYPE html>
<meta charset="utf-8" />
<title>Digital Credentials Test: non-fully active document</title>
<link
  rel="help"
  href="https://github.com/w3c/webappsec-credential-management"
/>
<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>
<body>
  <iframe></iframe>
</body>
<script>
  promise_setup(async () => {
    const iframe = document.querySelector("iframe");
    await new Promise((resolve) => {
      iframe.addEventListener("load", resolve, { once: true });
      iframe.src = "about:blank";
      document.body.appendChild(iframe);
    });
  });

  promise_test(async (t) => {
    const iframe = document.querySelector("iframe");

    // The signal check happens after the fully active check.
    // This allows us to confirm the the right error is thrown
    // and in the right order.
    const controller = new iframe.contentWindow.AbortController();
    const signal = controller.signal;
    controller.abort();

    // Steal all the needed references.
    const navigator = iframe.contentWindow.navigator;
    const DOMExceptionCtor = iframe.contentWindow.DOMException;

    // No longer fully active.
    iframe.remove();

    // Try to get credentials while not fully active...
    await promise_rejects_dom(
      t,
      "InvalidStateError",
      DOMExceptionCtor,
      navigator.credentials.get({ signal }),
      "Expected InvalidStateError for get() on non-fully-active document"
    );

    // Try to create credentials while not fully active...
    await promise_rejects_dom(
      t,
      "InvalidStateError",
      DOMExceptionCtor,
      navigator.credentials.create({ signal }),
      "Expected InvalidStateError for create() on non-fully-active document"
    );

    // Try to prevent silent access while not fully active...
    await promise_rejects_dom(
      t,
      "InvalidStateError",
      DOMExceptionCtor,
      navigator.credentials.preventSilentAccess(),
      "Expected InvalidStateError for preventSilentAccess() on non-fully-active document"
    );
  }, "non-fully active document behavior for CredentialsContainer");
</script>
