| <!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 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"); | |
| </script> |