| <!DOCTYPE html> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| function create_iframe_test(origin, expectation) { | |
| return function (t) { | |
| assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); | |
| window.addEventListener("load", _ => { | |
| var iframe = document.createElement("iframe"); | |
| iframe.src = origin + "/credential-management/support/federatedcredential-get.html"; | |
| window.addEventListener("message", t.step_func(e => { | |
| if (e.source == iframe.contentWindow) { | |
| assert_equals(e.data.status, expectation); | |
| if (expectation == "rejected") { | |
| assert_equals(e.data.exception, "NotAllowedError"); | |
| } else { | |
| assert_equals(e.data.exception, null); | |
| } | |
| t.done(); | |
| } | |
| })); | |
| document.body.appendChild(iframe); | |
| }); | |
| }; | |
| } | |
| function create_nested_iframe_test(outerOrigin, innerOrigin, expectation) { | |
| return function (t) { | |
| assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); | |
| window.addEventListener("load", _ => { | |
| var iframe = document.createElement("iframe"); | |
| iframe.src = outerOrigin + "/credential-management/support/echoing-nester.html?origin=" + innerOrigin + "&file=federatedcredential-get.html"; | |
| window.addEventListener("message", t.step_func(e => { | |
| if (e.source == iframe.contentWindow) { | |
| assert_equals(e.data.status, expectation); | |
| if (expectation == "rejected") { | |
| assert_equals(e.data.exception, "NotAllowedError"); | |
| } else { | |
| assert_equals(e.data.exception, null); | |
| } | |
| t.done(); | |
| } | |
| })); | |
| document.body.appendChild(iframe); | |
| }); | |
| }; | |
| } | |
| const SAME_ORIGIN = window.origin; | |
| const CROSS_ORIGIN = "https://{{domains[élève]}}:{{ports[https][0]}}"; | |
| async_test( | |
| create_iframe_test(SAME_ORIGIN, "resolved"), | |
| "Same-origin IFrame does not throw."); | |
| async_test( | |
| create_iframe_test(CROSS_ORIGIN, "rejected"), | |
| "Cross-origin IFrame throws 'NotAllowedError'."); | |
| async_test( | |
| create_nested_iframe_test(SAME_ORIGIN, SAME_ORIGIN, "resolved"), | |
| "Same-origin IFrame in same-origin IFrame does not throw."); | |
| async_test( | |
| create_nested_iframe_test(SAME_ORIGIN, CROSS_ORIGIN, "rejected"), | |
| "Same-origin IFrame in same-origin IFrame throws 'NotAllowedError'."); | |
| async_test( | |
| create_nested_iframe_test(CROSS_ORIGIN, SAME_ORIGIN, "rejected"), | |
| "Cross-origin IFrame in same-origin IFrame throws 'NotAllowedError'."); | |
| async_test( | |
| create_nested_iframe_test(CROSS_ORIGIN, CROSS_ORIGIN, "rejected"), | |
| "Cross-origin IFrame in same-cross-origin throws 'NotAllowedError'."); | |
| </script> |