158 lines
5.7 KiB
HTML
158 lines
5.7 KiB
HTML
<!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>
|