Some document.write() WPTs made the assumption that a setTimeout() in the parent window will run after the load event in the child frame, and there's no such guarantee per spec. The focus fixup rule test similarly relied on the rendering not being suppressed by the time the test run. Do that by awaiting an animation frame, not just a timeout. Differential Revision: https://phabricator.services.mozilla.com/D301259
29 lines
1012 B
HTML
29 lines
1012 B
HTML
<!doctype html>
|
|
<title>async document.write in a module</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<div id="log"></div>
|
|
<script>
|
|
async_test(t => {
|
|
// Expose {test} in the iframe for using the step_timeout helper.
|
|
document.test = t;
|
|
const iframe = document.createElement("iframe");
|
|
|
|
iframe.onerror = t.unreached_func("Error loading iframe");
|
|
|
|
iframe.onload = t.step_func(() => {
|
|
assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
|
|
// Don't call the event handler another time after document.write.
|
|
iframe.onload = null;
|
|
});
|
|
document.addEventListener("documentWriteDone", t.step_func_done(() => {
|
|
// If the timer fires before load, ignore the load listener.
|
|
iframe.onload = null;
|
|
assert_equals(iframe.contentDocument.body.textContent, "document.write body contents\n");
|
|
}));
|
|
|
|
iframe.src = "module-delayed-iframe.html";
|
|
document.body.appendChild(iframe);
|
|
});
|
|
</script>
|