| // 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( |
| 'http://{{domains[www2]}}:{{ports[http][0]}}/cookies/resources/set-cookie.py?name=cross&path=/html/semantics/scripting-1/the-script-element/module/', |
| { |
| 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 { |
| url = "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py"; |
| 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)`); |
| }); |
| }; |
| } |