Automatic update from web-platform-tests Separate between HTML streaming and <template for> patching HTML streaming, as well as the new positional methods, receive a "NewHTMLSettingMethods" runtime flag, and move to domparsing/tentative, to separate them from the somewhat orthogonal <template for> patching. Bug: 491743369 Change-Id: Ic411e1af7c5644be3062564683d039d6847427b5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7657845 Reviewed-by: Philip Jägenstedt <foolip@chromium.org> Commit-Queue: Noam Rosenthal <nrosenthal@google.com> Cr-Commit-Position: refs/heads/main@{#1598305} -- wpt-commits: f132f6179b468268083f40463abc93b3242b989e wpt-pr: 58450
52 lines
2.3 KiB
HTML
52 lines
2.3 KiB
HTML
<!doctype html>
|
|
<meta charset="utf-8" />
|
|
<title>streamAppendHTMLUnsafe scripts with "defer" execute at end</title>
|
|
<link rel="help" href="https://github.com/WICG/declarative-partial-updates" />
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<div id="placeholder"></div>
|
|
<script>
|
|
for (const method of ["streamAppendHTMLUnsafe", "streamHTMLUnsafe"]) {
|
|
promise_test(async (t) => {
|
|
window.events = [];
|
|
const placeholder = document.getElementById("placeholder");
|
|
const writable = placeholder[method]({ runScripts: true });
|
|
const writer = writable.getWriter();
|
|
window.defer_resolver = Promise.withResolvers();
|
|
window.async_resolver = Promise.withResolvers();
|
|
window.module_resolver = Promise.withResolvers();
|
|
function write_script(script, {defer, async, type} = {}) {
|
|
const script_element = document.createElement("script");
|
|
if (type)
|
|
script_element.type = type;
|
|
if (defer)
|
|
script_element.defer = true;
|
|
if (async)
|
|
script_element.async = true;
|
|
script_element.src = `data:text/javascript,${script};{let cache_buster=${Math.random()}}`;
|
|
return writer.write(script_element.outerHTML);
|
|
}
|
|
await write_script("window.events.push('defer'); window.defer_resolver.resolve();", {defer: true});
|
|
assert_array_equals(window.events, []);
|
|
await write_script("window.events.push('immediate');");
|
|
assert_array_equals(window.events, ["immediate"]);
|
|
await write_script("window.events.push('module');window.module_resolver.resolve();", {type: "module"});
|
|
assert_array_equals(window.events, ["immediate"]);
|
|
await write_script("window.events.push('async'); window.async_resolver.resolve();", {async: true});
|
|
await window.async_resolver.promise;
|
|
assert_array_equals(window.events, ["immediate", "async"]);
|
|
await write_script("window.events.push('immediate-2');");
|
|
assert_array_equals(window.events, ["immediate", "async", "immediate-2"]);
|
|
await writer.close();
|
|
await Promise.all([window.defer_resolver.promise, window.module_resolver.promise]);
|
|
assert_array_equals(window.events, [
|
|
"immediate",
|
|
"async",
|
|
"immediate-2",
|
|
"defer",
|
|
"module"
|
|
]);
|
|
}, `element.${method} with defer/async scripts`);
|
|
}
|
|
</script>
|