diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources')
25 files changed, 286 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/404-but-js.asis b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/404-but-js.asis new file mode 100644 index 0000000000..0fe1379e56 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/404-but-js.asis @@ -0,0 +1,4 @@ +HTTP/1.1 404 Not Found +Content-Type: text/javascript + +window.ran404 = true; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/500-but-js.asis b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/500-but-js.asis new file mode 100644 index 0000000000..c81202f7ef --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/500-but-js.asis @@ -0,0 +1,4 @@ +HTTP/1.1 500 Not Found +Content-Type: text/javascript + +window.ran500 = true; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py new file mode 100644 index 0000000000..90551e92c3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py @@ -0,0 +1,20 @@ +def main(request, response): + headers = [ + (b"Content-Type", b"text/javascript"), + (b"Access-Control-Allow-Origin", request.GET.first(b"origin")), + (b"Access-Control-Allow-Credentials", b"true") + ] + identifier = request.GET.first(b"id") + cookie_name = request.GET.first(b"cookieName") + cookie = request.cookies.first(cookie_name, None) + if identifier is None or cookie_name is None: + return headers, b"" + + if cookie is None: + result = b"not found" + elif cookie.value == b"1": + result = b"found" + else: + result = b"different value: " + cookie.value + + return headers, b"window." + identifier + b" = '" + result + b"';" diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html new file mode 100644 index 0000000000..dbc14dffec --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="utf-8"> + +<script type="module" + src="check-cookie.py?id=sameOriginNone&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}"> +</script> +<script type="module" + src="check-cookie.py?id=sameOriginAnonymous&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}" + crossOrigin="anonymous"> +</script> +<script type="module" + src="check-cookie.py?id=sameOriginUseCredentials&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}" + crossOrigin="use-credentials"> +</script> +<script type="module" + src="http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginNone&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}"> +</script> +<script type="module" + src="http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginAnonymous&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}" + crossOrigin="anonymous"> +</script> +<script type="module" + src="http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginUseCredentials&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}" + crossOrigin="use-credentials"> +</script> + +<script type="module"> +import "./check-cookie.py?id=sameOriginNoneDescendant&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}"; +</script> +<script type="module" crossOrigin="anonymous"> +import "./check-cookie.py?id=sameOriginAnonymousDescendant&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}"; +</script> +<script type="module" crossOrigin="use-credentials"> +import "./check-cookie.py?id=sameOriginUseCredentialsDescendant&cookieName=same&origin=http://{{host}}:{{ports[http][0]}}"; +</script> +<script type="module"> +import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginNoneDescendant&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}"; +</script> +<script type="module" crossOrigin="anonymous"> +import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginAnonymousDescendant&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}"; +</script> +<script type="module" crossOrigin="use-credentials"> +import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginUseCredentialsDescendant&cookieName=cross&origin=http://{{host}}:{{ports[http][0]}}"; +</script> + +<script type="text/javascript"> +window.addEventListener('load', event => { + window.parent.postMessage({}, '*'); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py new file mode 100644 index 0000000000..52dbfba445 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py @@ -0,0 +1,7 @@ +import time + +def main(request, response): + delay = float(request.GET.first(b"ms", 500)) + time.sleep(delay / 1E3) + + return [(b"Content-type", b"text/javascript")], u"export let delayedLoaded = true;" diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-helper.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-helper.sub.js new file mode 100644 index 0000000000..7d9b024e75 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-helper.sub.js @@ -0,0 +1,67 @@ +// 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)`); + }); + }; +} diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html new file mode 100644 index 0000000000..88204ef00b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="dynamic-import-credentials-helper.sub.js"></script> + +<!-- +The active script at the time of import() is the script elements below, and +thus the credentials mode of the fetch options of the script elements below +are used for dynamic import requests. +--> + +<script> +runTest(url => import(url), + "same", "found", "classic script (crossOrigin not specified)"); +runTest(url => import(url), + "cross", "not found", "classic script (crossOrigin not specified)"); +</script> + +<script crossOrigin="anonymous"> +runTest(url => import(url), "same", "found", + "classic script (crossOrigin=anonymous)"); +runTest(url => import(url), "cross", "not found", + "classic script (crossOrigin=anonymous)"); +</script> + +<script crossOrigin="use-credentials"> +runTest(url => import(url), + "same", "found", "classic script (crossOrigin=use-credentials)"); +runTest(url => import(url), + "cross", "found", "classic script (crossOrigin=use-credentials)"); +</script> + +<script type="module"> +runTest(url => import(url), + "same", "found", "module script (crossOrigin not specified)"); +runTest(url => import(url), + "cross", "not found", "module script (crossOrigin not specified)"); +</script> + +<script type="module" crossOrigin="anonymous"> +runTest(url => import(url), "same", "found", + "module script (crossOrigin=anonymous)"); +runTest(url => import(url), "cross", "not found", + "module script (crossOrigin=anonymous)"); +</script> + +<script type="module" crossOrigin="use-credentials"> +runTest(url => import(url), + "same", "found", "module script (crossOrigin=use-credentials)"); +runTest(url => import(url), + "cross", "found", "module script (crossOrigin=use-credentials)"); +</script> diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-setTimeout-iframe.sub.html b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-setTimeout-iframe.sub.html new file mode 100644 index 0000000000..ffba141527 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-setTimeout-iframe.sub.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="dynamic-import-credentials-helper.sub.js"></script> + +<!-- +The active script at the time of import() is the classic script created by +https://html.spec.whatwg.org/multipage/C/#timer-initialisation-steps +and the active script at the time of setTimeout() is the script elements below, +thus the credentials mode of the fetch options of the script elements below +are used for dynamic import requests. + +setTimeout() calls below can't be wrapped (e.g. by step_timeout()) +because wrapping setTimeout() would set active scripts differently. +--> + +<script> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from classic script (crossOrigin not specified)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "not found", "setTimeout(string) from classic script (crossOrigin not specified)"); +</script> + +<script crossOrigin="anonymous"> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from classic script (crossOrigin=anonymous)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "not found", "setTimeout(string) from classic script (crossOrigin=anonymous)"); +</script> + +<script crossOrigin="use-credentials"> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from classic script (crossOrigin=use-credentials)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "found", "setTimeout(string) from classic script (crossOrigin=use-credentials)"); +</script> + +<script type="module"> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from module script (crossOrigin not specified)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "not found", "setTimeout(string) from module script (crossOrigin not specified)"); +</script> + +<script type="module" crossOrigin="anonymous"> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from module script (crossOrigin=anonymous)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "not found", "setTimeout(string) from module script (crossOrigin=anonymous)"); +</script> + +<script type="module" crossOrigin="use-credentials"> +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "same", "found", "setTimeout(string) from module script (crossOrigin=use-credentials)"); +runTest(setTimeoutWrapper(x => setTimeout(x, 0)), + "cross", "found", "setTimeout(string) from module script (crossOrigin=use-credentials)"); +</script> diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js new file mode 100644 index 0000000000..3a76cf71f6 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/fast-module.js @@ -0,0 +1 @@ +loaded.push("fast"); diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js new file mode 100644 index 0000000000..6fc4ad395c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js @@ -0,0 +1 @@ +import "../../serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript%3Bcharset=windows-1250&dummy=6"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8.js new file mode 100644 index 0000000000..3ae805d78d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8.js @@ -0,0 +1 @@ +import "../../serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript&dummy=5"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js new file mode 100644 index 0000000000..2d6fd96712 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js @@ -0,0 +1 @@ +export { referrer } from 'http://{{host}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name={{GET[name]}}'; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js.headers b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js.headers new file mode 100644 index 0000000000..cb762eff80 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker-insecure.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js new file mode 100644 index 0000000000..2c7dce9dff --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js @@ -0,0 +1,2 @@ +import { referrer as referrerImport } from './referrer-checker.py?name={{GET[name]}}'; +export const referrer = referrerImport; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers new file mode 100644 index 0000000000..cb762eff80 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-referrer-checker.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js new file mode 100644 index 0000000000..45a2520b68 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-remote-origin-referrer-checker.sub.js @@ -0,0 +1,2 @@ +import { referrer as referrerImport } from 'http://{{domains[www1]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name={{GET[name]}}'; +export const referrer = referrerImport; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js new file mode 100644 index 0000000000..5a53bcd4d5 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js @@ -0,0 +1,2 @@ +import { referrer as referrerImport } from 'http://{{host}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py?name={{GET[name]}}'; +export const referrer = referrerImport; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js.headers b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js.headers new file mode 100644 index 0000000000..cb762eff80 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-same-origin-referrer-checker-from-remote-origin.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js new file mode 100644 index 0000000000..c2ccab7c62 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js @@ -0,0 +1 @@ +import "../../serve-with-content-type.py?fn=external-script-utf8.js&ct=text/javascript%3Bcharset=windows-1250&dummy=6"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8.js new file mode 100644 index 0000000000..5708a26e07 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/import-utf8.js @@ -0,0 +1 @@ +import "../../serve-with-content-type.py?fn=external-script-utf8.js&ct=text/javascript&dummy=5"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-404-but-js.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-404-but-js.js new file mode 100644 index 0000000000..d62e4f05be --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-404-but-js.js @@ -0,0 +1 @@ +import "./404-but-js.asis"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-500-but-js.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-500-but-js.js new file mode 100644 index 0000000000..d62e4f05be --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-500-but-js.js @@ -0,0 +1 @@ +import "./404-but-js.asis"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-b-cross-origin.sub.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-b-cross-origin.sub.js new file mode 100644 index 0000000000..6db57b5017 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/imports-b-cross-origin.sub.js @@ -0,0 +1 @@ +import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/imports-b.js"; diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py new file mode 100644 index 0000000000..413f48d381 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/referrer-checker.py @@ -0,0 +1,6 @@ +def main(request, response): + referrer = request.headers.get(b"referer", b"") + response_headers = [(b"Content-Type", b"text/javascript"), + (b"Access-Control-Allow-Origin", b"*")] + return (200, response_headers, + b"export const referrer = '" + referrer + b"';") diff --git a/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js new file mode 100644 index 0000000000..4623ef7360 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-script-element/module/resources/slow-module.js @@ -0,0 +1,3 @@ +// This module is imported with pipe=trickle(d2) to make it load more slowly +// than fast-module.js +loaded.push("slow"); |