blob: d31fc98553517cb86dd67a704b1abfed1ea00312 [file] [log] [blame]
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="resources/mark-result-red.css" integrity="sha256-deadbeef">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
function waitForLinkElementToLoad(linkElement) {
return new Promise(resolve => {
(function waitAgain() {
if (linkElement.sheet !== null) {
resolve();
} else {
setTimeout(waitAgain, 100);
}
})();
});
}
promise_test(() => {
let link = document.querySelector("link");
let divResult = document.createElement("div");
divResult.id = "result";
document.body.appendChild(divResult);
let divResult2 = document.createElement("div");
divResult2.id = "result2";
document.body.appendChild(divResult2);
return new Promise(resolve => {
window.addEventListener("load", resolve, {once: true});
})
.then(() => {
assert_equals(getComputedStyle(divResult).color.toString(), "rgb(0, 0, 0)", "bad integrity CSS should not be applied");
let linkElement = document.querySelector("link");
linkElement.removeAttribute("integrity");
linkElement.href = "resources/mark-result2-blue.css";
return waitForLinkElementToLoad(linkElement);
})
.then(() => {
assert_equals(getComputedStyle(divResult).color.toString(), "rgb(0, 0, 0)", "bad integrity CSS should not be applied");
assert_equals(getComputedStyle(divResult2).color.toString(), "rgb(0, 0, 255)", "CSS w/o integrity check disabled should load on the link element");
})
.then(() => {
document.body.removeChild(divResult);
document.body.removeChild(divResult2);
});
}, 'Link element should still load another CSS after SRI check failed.');
</script>