| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test allow attribute with "digital-credentials-create" and |
| CredentialsContainer's .create() 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-create", |
| crossOrigin: false, |
| expectIsAllowed: true, |
| }, |
| { |
| policy: "digital-credentials-create", |
| crossOrigin: true, |
| expectIsAllowed: true, |
| }, |
| { |
| policy: "digital-credentials-create *", |
| crossOrigin: false, |
| expectIsAllowed: true, |
| }, |
| { |
| policy: "digital-credentials-create *", |
| crossOrigin: true, |
| expectIsAllowed: true, |
| }, |
| { |
| policy: "digital-credentials-create 'none'", |
| crossOrigin: false, |
| expectIsAllowed: false, |
| }, |
| { |
| policy: "digital-credentials-create 'none'", |
| crossOrigin: true, |
| expectIsAllowed: false, |
| }, |
| { |
| policy: "digital-credentials-create 'self'", |
| crossOrigin: false, |
| expectIsAllowed: true, |
| }, |
| { |
| policy: "digital-credentials-create 'self'", |
| crossOrigin: true, |
| expectIsAllowed: false, |
| }, |
| { |
| policy: `digital-credentials-create ${hostInfo.HTTPS_REMOTE_ORIGIN}`, |
| crossOrigin: false, |
| expectIsAllowed: false, |
| }, |
| { |
| policy: `digital-credentials-create ${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 = "create"; |
| const options = { |
| digital: { |
| // Results in TypeError when allowed, NotAllowedError when disallowed |
| requests: [], |
| }, |
| mediation: "required", |
| }; |
| 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 Create: Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`); |
| } |
| } |
| </script> |
| </head> |
| <body onload="runTests()"></body> |
| </html> |