Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<html>
<head>
<title>External classic scripts with nomodule content attribute must not run</title>
<link rel="author" title="Yusuke Suzuki" href="mailto:utatane.tea@gmail.com">
<link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Load this script synchronously to ensure test cases below can load it in 200ms -->
<script src="resources/set-script-executed.js"></script>
</head>
<body>
<script>
let supportsNoModule = "noModule" in document.getElementsByTagName("script")[0];
waitForLoadEvent = new Promise((resolve) => {
window.onload = resolve;
});
promise_test(() => {
window.executed = false;
let loaded = false;
let errored = false;
let script = document.createElement('script');
script.src = './resources/set-script-executed.js';
script.onload = () => loaded = true;
script.onerror = () => errored = true;
script.noModule = false;
document.body.appendChild(script);
return waitForLoadEvent.then(() => {
assert_true(supportsNoModule);
assert_true(executed);
assert_true(loaded);
assert_false(errored);
});
}, 'An asynchronously loaded classic script with noModule set to false must run');
promise_test(() => {
window.executed = false;
let loaded = false;
let errored = false;
let script = document.createElement('script');
script.src = './resources/set-script-executed.js';
script.onload = () => loaded = true;
script.onerror = () => errored = true;
script.noModule = true;
document.body.appendChild(script);
return waitForLoadEvent.then(() => {
assert_true(supportsNoModule);
assert_false(executed);
assert_false(loaded);
assert_false(errored);
});
}, 'An asynchronously loaded classic script with noModule set to true must not run');
</script>
</body>
</html>