Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 2 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /import-maps/nonimport-integrity.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
let log = [];
</script>
<script type="importmap">
{
"integrity": {
"./resources/log.js?pipe=sub&name=ModuleNoIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModuleIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModuleEmptyIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModuleBadIntegrityAttribute": "sha384-COhDkp+ybIZ9wz9hUaSJ5NzKcn8wOMZMpsACZfTeEdBRtNcX5yWJnFn+lIK77Tay",
"./resources/log.js?pipe=sub&name=ModulePreloadNoIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModulePreloadIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModulePreloadEmptyIntegrity": "sha384-foobar",
"./resources/log.js?pipe=sub&name=ModulePreloadBadIntegrityAttribute": "sha384-026dlUs9+KSmPb0Uc7oUPOlWBO67o7vSFdfLJZWEVTvKCly5NXO8+CsOXl54ZBqJ",
"./resources/log.js?pipe=sub&name=NonModule": "sha384-foobar",
"/images/green.png": "sha384-foobar"
}
}
</script>
<script type="module">
const test_not_loaded = async (elem) => {
const promise = new Promise((resolve, reject) => {
elem.onload = () => {
reject(new Error("It shouldn't have loaded"));
};
elem.onerror = resolve;
});
document.head.appendChild(elem);
const event = await promise;
assert_equals(event.type, "error");
};
promise_test(async t => {
log = [];
const script = document.createElement("script");
script.type = "module";
script.src = "./resources/log.js?pipe=sub&name=ModuleNoIntegrity";
await test_not_loaded(script);
}, "Script was not loaded as its integrity check was not ignored");
promise_test(async () => {
log = [];
const script = document.createElement("script");
script.type = "module";
script.integrity = "sha384-QtZrhNFOSmHASHnBdmGg+zrVz5hjukCBakaqwT2pcG7w+QTa/niK16csP6kXAeXI";
script.src = "./resources/log.js?pipe=sub&name=ModuleIntegrity";
const promise = new Promise((resolve, reject) => {
script.onload = resolve;
script.onerror = reject;
});
document.head.appendChild(script);
await promise;
assert_equals(log.length, 1);
assert_equals(log[0], "log:ModuleIntegrity");
}, "Script was loaded as its correct integrity attribute was not ignored");
promise_test(async () => {
log = [];
const script = document.createElement("script");
script.type = "module";
script.integrity = "";
script.src = "./resources/log.js?pipe=sub&name=ModuleEmptyIntegrity";
const promise = new Promise((resolve, reject) => {
script.onload = resolve;
script.onerror = reject;
});
document.head.appendChild(script);
await promise;
assert_equals(log.length, 1);
assert_equals(log[0], "log:ModuleEmptyIntegrity");
}, "Script was loaded as its empty integrity attribute was not ignored");
promise_test(async t => {
log = [];
const script = document.createElement("script");
script.type = "module";
script.integrity = "sha384-foobar";
script.src = "./resources/log.js?pipe=sub&name=ModuleBadIntegrityAttribute";
await test_not_loaded(script);
}, "Script was not loaded as its bad integrity attribute was not overridden");
promise_test(async t => {
const link = document.createElement("link");
link.rel = "modulepreload";
link.href = "./resources/log.js?pipe=sub&name=ModulePreloadNoIntegrity";
const promise = new Promise((resolve, reject) => {
link.onload = resolve;
link.onerror = () => { reject(Error()); };
});
document.head.appendChild(link);
await promise_rejects_js(t, Error, promise);
}, "Modulepreload was not loaded as its integrity check was not ignored");
promise_test(async () => {
const link = document.createElement("link");
link.rel = "modulepreload";
link.integrity = "sha384-iDG3WysExtjWvD9QwQrC7nGXRvO0jM+r7Z2cOLMDO2geMlEtmN9j9xfqHfzT45+9";
link.href = "./resources/log.js?pipe=sub&name=ModulePreloadIntegrity";
const promise = new Promise((resolve, reject) => {
link.onload = resolve;
link.onerror = reject;
});
document.head.appendChild(link);
await promise;
}, "Modulepreload was loaded as its correct integrity attribute was not ignored");
promise_test(async () => {
const link = document.createElement("link");
link.rel = "modulepreload";
link.integrity = "";
link.href = "./resources/log.js?pipe=sub&name=ModulePreloadEmptyIntegrity";
const promise = new Promise((resolve, reject) => {
link.onload = resolve;
link.onerror = reject;
});
document.head.appendChild(link);
await promise;
}, "Modulepreload was loaded as its empty integrity attribute was not ignored");
promise_test(async t => {
const link = document.createElement("link");
link.rel = "modulepreload";
link.integrity = "sha384-foobar";
link.href = "./resources/log.js?pipe=sub&name=ModulePreloadBadIntegrityAttribute";
await test_not_loaded(link);
}, "Modulepreload was not loaded as its bad integrity attribute was not ignored");
promise_test(async () => {
log = [];
const script = document.createElement("script");
script.src = "./resources/log.js?pipe=sub&name=NonModule";
const promise = new Promise((resolve, reject) => {
script.onload = resolve;
script.onerror = reject;
});
document.head.appendChild(script);
await promise;
assert_equals(log.length, 1);
assert_equals(log[0], "log:NonModule");
}, "Classic script was loaded as its integrity check was ignored");
promise_test(async () => {
const img = document.createElement("img");
const promise = new Promise((resolve, reject) => {
img.onload = resolve;
img.onerror = reject;
});
img.src = "/images/green.png";
document.head.appendChild(img);
await promise;
}, "Image was loaded as its integrity check was ignored");
</script>
</head>