Source code

Revision control

Copy as Markdown

Other Tools

// runTestsFromIframe() is used in the top-level HTML to set cookies and then
// start actual tests in iframe.
function runTestsFromIframe(iframe_url) {
const setSameOriginCookiePromise = fetch(
'/cookies/resources/set-cookie.py?name=same&path=/html/semantics/scripting-1/the-script-element/module/',
{
mode: 'no-cors',
credentials: 'include',
});
const setCrossOriginCookiePromise = fetch(
{
mode: 'no-cors',
credentials: 'include',
});
const windowLoadPromise = new Promise(resolve => {
window.addEventListener('load', () => {
resolve();
});
});
const iframe = document.createElement('iframe');
Promise.all([setSameOriginCookiePromise,
setCrossOriginCookiePromise,
windowLoadPromise]).then(() => {
iframe.src = iframe_url;
document.body.appendChild(iframe);
fetch_tests_from_window(iframe.contentWindow);
});
}
// The functions below are used from tests within the iframe.
let testNumber = 0;
// importFunc and setTimeoutFunc is used to make the active script at the time
// of import() to be the script elements that call `runTest()`,
// NOT this script defining runTest().
function runTest(importFunc, origin, expected, source) {
let url;
let description;
if (origin === 'same') {
url = "./check-cookie.py";
description = "Same-origin dynamic import from " + source;
} else {
description = "Cross-origin dynamic import from " + source;
}
promise_test(() => {
const id = "test" + testNumber;
testNumber += 1;
return importFunc(url + "?id=" + id + "&cookieName=" + origin + "&origin=" + location.origin)
.then(() => {
assert_equals(window[id], expected, "cookie");
});
}, description);
}
function setTimeoutWrapper(setTimeoutFunc) {
return url => {
return new Promise(resolve => {
window.resolve = resolve;
setTimeoutFunc(`import("${url}").then(window.resolve)`);
});
};
}