Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 4 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /html/dom/partial-updates/tentative/template-for-sanitization.html - WPT Dashboard Interop Dashboard
<!doctype html>
<meta charset="utf-8" />
<title>streamHTML methods can apply template with for</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div id="placeholder"><?start name="p">Old content<?end></div>
<script>
promise_test(async (t) => {
const writable = document.body.streamAppendHTMLUnsafe({
runScripts: true,
sanitizer: {
removeElements: ["template"],
},
});
const placeholder = document.querySelector("#placeholder");
const html_before = placeholder.innerHTML;
const writer = writable.getWriter();
await writer.write('<template id=inserted for="p">');
await writer.write("New content");
await writer.write("</template>");
await writer.close();
assert_equals(placeholder.innerHTML, html_before);
assert_equals(document.querySelector("#inserted"), null);
}, "<template for> is sanitized away with removeElements when streaming");
promise_test(async (t) => {
const writable = document.body.streamAppendHTMLUnsafe({
runScripts: true,
sanitizer: {
removeAttributes: ["for"],
},
});
const placeholder = document.querySelector("#placeholder");
const html_before = placeholder.innerHTML;
const writer = writable.getWriter();
await writer.write('<template id=inserted for="p">');
await writer.write("New content");
await writer.write("</template>");
await writer.close();
assert_equals(placeholder.innerHTML, html_before);
assert_not_equals(document.querySelector("#inserted"), null);
}, "<template for> is sanitized away with removeAttributes when streaming");
promise_test(async (t) => {
const placeholder = document.querySelector("#placeholder");
const element = placeholder.cloneNode(true);
const html_before = element.innerHTML;
element.setHTMLUnsafe(
'<?marker name=p><template for="p">New content</template>',
{
sanitizer: { removeElements: ["template"] },
},
);
assert_equals(element.innerHTML, "<?marker name=p?>");
}, "<template for> is sanitized away with removeElements in a fragment");
promise_test(async (t) => {
const placeholder = document.querySelector("#placeholder");
const element = placeholder.cloneNode(true);
const html_before = element.innerHTML;
element.setHTMLUnsafe(
'<?marker name=p><template for="p">New content</template>',
{
sanitizer: { removeAttributes: ["for"] },
},
);
assert_equals(
element.innerHTML,
"<?marker name=p?><template>New content</template>",
);
}, "<template for> attribute is sanitized away with removeAttributes in a fragment");
</script>
</body>