Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<head>
<title>setHTML() and setHTMLUnsafe() parse noscript with scripting disabled</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
// The fragment parsing algorithm steps set the scripting mode to inert, so
// <noscript> is parsed as raw text regardless of the options passed.
const input = "<noscript><p>x</noscript>y";
function assert_raw_text_noscript(div) {
assert_equals(div.childNodes.length, 2, "two child nodes");
const noscript = div.firstChild;
assert_equals(noscript.localName, "noscript");
assert_equals(noscript.childNodes.length, 1, "noscript has one child");
assert_equals(noscript.firstChild.nodeType, Node.TEXT_NODE);
assert_equals(noscript.firstChild.data, "<p>x");
assert_equals(div.lastChild.nodeType, Node.TEXT_NODE);
assert_equals(div.lastChild.data, "y");
}
for (const [name, options] of [
["no options", undefined],
["empty options", {}],
["sanitizer: undefined", { sanitizer: undefined }],
["empty sanitizer config", { sanitizer: {} }],
]) {
test(t => {
const div = document.createElement("div");
div.setHTMLUnsafe(input, options);
assert_raw_text_noscript(div);
}, `setHTMLUnsafe() parses noscript as raw text (${name})`);
}
test(t => {
const div = document.createElement("div");
div.setHTML(input, { sanitizer: { elements: ["noscript"] } });
assert_raw_text_noscript(div);
}, "setHTML() parses noscript as raw text when noscript is allowed");
test(t => {
const div = document.createElement("div");
div.setHTML(input);
assert_equals(div.childNodes.length, 1);
assert_equals(div.firstChild.nodeType, Node.TEXT_NODE);
assert_equals(div.firstChild.data, "y");
}, "setHTML() removes noscript with its raw text content by default");
</script>
</body>