| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title> | |
| Test allow attribute with "digital-credentials-get" and | |
| CredentialsContainer's .get() method | |
| </title> | |
| <script src="/common/get-host-info.sub.js"></script> | |
| <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> | |
| const hostInfo = get_host_info(); | |
| const iframeDetails = [ | |
| { | |
| policy: null, | |
| crossOrigin: false, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: null, | |
| crossOrigin: true, | |
| expectIsAllowed: false, | |
| }, | |
| { | |
| policy: "digital-credentials-get", | |
| crossOrigin: false, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: "digital-credentials-get", | |
| crossOrigin: true, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: "digital-credentials-get *", | |
| crossOrigin: false, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: "digital-credentials-get *", | |
| crossOrigin: true, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: "digital-credentials-get 'none'", | |
| crossOrigin: false, | |
| expectIsAllowed: false, | |
| }, | |
| { | |
| policy: "digital-credentials-get 'none'", | |
| crossOrigin: true, | |
| expectIsAllowed: false, | |
| }, | |
| { | |
| policy: "digital-credentials-get 'self'", | |
| crossOrigin: false, | |
| expectIsAllowed: true, | |
| }, | |
| { | |
| policy: "digital-credentials-get 'self'", | |
| crossOrigin: true, | |
| expectIsAllowed: false, | |
| }, | |
| { | |
| policy: `digital-credentials-get ${hostInfo.HTTPS_REMOTE_ORIGIN}`, | |
| crossOrigin: false, | |
| expectIsAllowed: false, | |
| }, | |
| { | |
| policy: `digital-credentials-get ${hostInfo.HTTPS_REMOTE_ORIGIN}`, | |
| crossOrigin: true, | |
| expectIsAllowed: true, | |
| }, | |
| ]; | |
| async function loadIframe({ policy, crossOrigin, expectIsAllowed }) { | |
| const iframe = document.createElement("iframe"); | |
| if (policy !== null) { | |
| iframe.allow = policy; | |
| } | |
| await new Promise((resolve) => { | |
| iframe.onload = resolve; | |
| iframe.src = new URL( | |
| "/digital-credentials/support/iframe.html", | |
| crossOrigin | |
| ? hostInfo.HTTPS_REMOTE_ORIGIN | |
| : location.origin | |
| ).href; | |
| iframe.dataset.expectIsAllowed = expectIsAllowed; | |
| document.body.appendChild(iframe); | |
| }); | |
| iframe.focus(); | |
| return iframe; | |
| } | |
| function runTests() { | |
| for (const details of iframeDetails) { | |
| promise_test(async (test) => { | |
| const iframe = await loadIframe(details); | |
| const { expectIsAllowed } = details; | |
| const action = "get"; | |
| const options = { | |
| digital: { | |
| // Results in TypeError when allowed, NotAllowedError when disallowed | |
| requests: [{ data: {}, protocol: "openid4vp" }], | |
| }, | |
| mediation: "required", | |
| }; | |
| await test_driver.bless("User activation"); | |
| const { data } = await new Promise((resolve) => { | |
| window.addEventListener("message", resolve, { | |
| once: true, | |
| }); | |
| iframe.contentWindow.postMessage( | |
| { action, options, needsActivation: true }, | |
| "*" | |
| ); | |
| }); | |
| const { name, message } = data; | |
| const fullMessage = `${iframe.outerHTML} - ${message}`; | |
| if (expectIsAllowed) { | |
| assert_true( | |
| name == "TypeError" || name == "NotAllowedError", | |
| fullMessage | |
| ); | |
| } else { | |
| assert_equals(name, "NotAllowedError", fullMessage); | |
| } | |
| iframe.remove(); | |
| }, `With Get: Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`); | |
| } | |
| } | |
| </script> | |
| </head> | |
| <body onload="runTests()"></body> | |
| </html> |