test(t => { const frame = document.body.appendChild(document.createElement("iframe")); t.add_cleanup(() => frame.contentDocument.close()); assert_equals(frame.contentDocument.compatMode, "BackCompat"); frame.contentDocument.open(); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); frame.contentDocument.close(); assert_equals(frame.contentDocument.compatMode, "BackCompat"); }, "document.open() sets document to no-quirks mode (write no doctype)"); test(t => { const frame = document.body.appendChild(document.createElement("iframe")); t.add_cleanup(() => frame.contentDocument.close()); assert_equals(frame.contentDocument.compatMode, "BackCompat"); frame.contentDocument.open(); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); frame.contentDocument.write(""); assert_equals(frame.contentDocument.compatMode, "BackCompat"); frame.contentDocument.close(); assert_equals(frame.contentDocument.compatMode, "BackCompat"); }, "document.open() sets document to no-quirks mode (write old doctype)"); test(t => { const frame = document.body.appendChild(document.createElement("iframe")); t.add_cleanup(() => frame.contentDocument.close()); assert_equals(frame.contentDocument.compatMode, "BackCompat"); frame.contentDocument.open(); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); frame.contentDocument.write(""); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); frame.contentDocument.close(); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); }, "document.open() sets document to no-quirks mode (write new doctype)"); // This tests the document.open() call in fact sets the document to no-quirks // mode, not limited-quirks mode. It is derived from // quirks/blocks-ignore-line-height.html in WPT, as there is no direct way to // distinguish between a no-quirks document and a limited-quirks document. It // assumes that the user agent passes the linked test, which at the time of // writing is all major web browsers. test(t => { const frame = document.body.appendChild(document.createElement("iframe")); t.add_cleanup(() => frame.contentDocument.close()); assert_equals(frame.contentDocument.compatMode, "BackCompat"); frame.contentDocument.open(); assert_equals(frame.contentDocument.compatMode, "CSS1Compat"); // Create the DOM tree manually rather than going through document.write() to // bypass the parser, which resets the document mode. const html = frame.contentDocument.appendChild(frame.contentDocument.createElement("html")); const body = html.appendChild(frame.contentDocument.createElement("body")); assert_equals(frame.contentDocument.body, body); body.innerHTML = `