Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 2 subtest issues.
- This WPT test may be referenced by the following Test IDs:
            - /digital-credentials/non-fully-active.https.html - WPT Dashboard Interop Dashboard
 
<!DOCTYPE html>
<meta charset="utf-8" />
<title>Digital Credentials Test: non-fully active document</title>
<link
  rel="help"
/>
<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></body>
<script type="module">
  import { makeGetOptions } from "./support/helper.js";
  async function createIframe() {
    const iframe = document.createElement("iframe");
    await new Promise((resolve) => {
      iframe.addEventListener("load", resolve, { once: true });
      iframe.src = "about:blank";
      document.body.appendChild(iframe);
    });
    return iframe;
  }
  promise_test(async (t) => {
    const iframe = await createIframe();
    // The signal check happens after the fully active check.
    // This allows us to confirm 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 { credentials } = 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,
      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,
      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,
      credentials.preventSilentAccess(),
      "Expected InvalidStateError for preventSilentAccess() on non-fully-active document"
    );
  }, "non-fully active document behavior for CredentialsContainer");
  promise_test(async (t) => {
    let iframe = await createIframe();
    const DOMExceptionCtor = iframe.contentWindow.DOMException;
    let stolenNavigator = iframe.contentWindow.navigator;
    const request = makeGetOptions("openid4vp");
    await test_driver.bless("User activation", null, iframe.contentWindow);
    await iframe.focus();
    const p = promise_rejects_dom(
      t,
      "AbortError",
      DOMExceptionCtor,
      iframe.contentWindow.navigator.credentials.get(request),
      "Expect promise to reject if the document becomes non-fully active"
    );
    iframe.remove();
    await p;
  }, "Promise rejects with DOMException when the document becomes non-fully active");
</script>