// This tests the behavior of dynamic markup insertion APIs with a document's // readiness. async_test(t => { const frame = document.body.appendChild(document.createElement("iframe")); t.add_cleanup(() => { frame.remove(); }); frame.src = "/common/blank.html"; frame.onload = t.step_func_done(() => { const states = []; frame.contentDocument.onreadystatechange = t.step_func(() => { states.push(frame.contentDocument.readyState); }); assert_equals(frame.contentDocument.readyState, "complete"); assert_array_equals(states, []); // When open() is called, it first removes the event listeners and handlers // from all nodes in the DOM tree. Then, after a new parser is created and // initialized, it changes the current document readiness to "loading". // However, because all event listeners are removed, we cannot observe the // readystatechange event fired for "loading" inside open(). frame.contentDocument.open(); assert_equals(frame.contentDocument.readyState, "loading"); assert_array_equals(states, []); }); }, "document.open() and readiness");