LibWeb: Implement window.stop()

Fixes a handful of timeouts on WPT.
This commit is contained in:
Andreas Kling 2024-12-05 10:56:47 +01:00 committed by Andreas Kling
commit 3f461b96df
Notes: github-actions[bot] 2024-12-05 11:39:56 +00:00
11 changed files with 94 additions and 0 deletions

View file

@ -0,0 +1,8 @@
<!doctype html>
<meta charset=utf-8>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<div id=log></div>
<script src="../../../../html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js"></script>

View file

@ -0,0 +1,31 @@
// document.open() bails out early if there is an active parser with non-zero
// script nesting level or if a load was aborted while there was an active
// parser. window.stop() aborts the current parser, so once it has been called
// while a parser is active, document.open() will no longer do anything to that
// document,
window.handlers = {};
async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
t.add_cleanup(() => frame.remove());
frame.src = "resources/aborted-parser-frame.html";
window.handlers.afterOpen = t.step_func_done(() => {
const openCalled = frame.contentDocument.childNodes.length === 0;
assert_false(openCalled, "child document should not be empty");
assert_equals(frame.contentDocument.querySelector("p").textContent,
"Text", "Should still have our paragraph");
});
}, "document.open() after parser is aborted");
async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
t.add_cleanup(() => frame.remove());
frame.src = "resources/aborted-parser-async-frame.html";
window.handlers.afterOpenAsync = t.step_func_done(() => {
const openCalled = frame.contentDocument.childNodes.length === 0;
assert_false(openCalled, "child document should not be empty");
assert_equals(frame.contentDocument.querySelector("p").textContent,
"Text", "Should still have our paragraph");
});
}, "async document.open() after parser is aborted");

View file

@ -0,0 +1,9 @@
<!doctype html>
<p>Text</p>
<script>
window.stop();
parent.step_timeout(() => {
document.open();
parent.handlers.afterOpenAsync();
}, 10);
</script>

View file

@ -0,0 +1,7 @@
<!doctype html>
<p>Text</p>
<script>
window.stop();
document.open();
parent.handlers.afterOpen();
</script>