diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json index f5f9403ec246c..c18887e529378 100644 --- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -368902,6 +368902,12 @@ {} ] ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js": [ + [ + "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.html", + {} + ] + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.js": [ [ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.html", @@ -613663,6 +613669,10 @@ "4efbb863c6372a3ee04d11f38d7ee56a44a2ac7d", "testharness" ], + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js": [ + "34e73146a9d8e4ecab1e74a0079cd721e7306e59", + "testharness" + ], "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/no-new-global.window.js": [ "d4a9296fca66d3017c267a8d8951bef2dcbee238", "testharness" diff --git a/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js new file mode 100644 index 0000000000000..34e73146a9d8e --- /dev/null +++ b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/mutation-observer.window.js @@ -0,0 +1,19 @@ +async_test(t => { + const frame = document.body.appendChild(document.createElement("iframe")); + t.add_cleanup(() => { frame.remove(); }); + const originalHTMLElement = frame.contentDocument.documentElement; + assert_equals(originalHTMLElement.localName, "html"); + const observer = new frame.contentWindow.MutationObserver(t.step_func_done(records => { + // Even though we passed `subtree: true` to observer.observe, due to the + // fact that "replace all" algorithm removes children with the "suppress + // observers flag" set, we still only get the html element as the sole + // removed node. + assert_equals(records.length, 1); + assert_equals(records[0].type, "childList"); + assert_equals(records[0].target, frame.contentDocument); + assert_array_equals(records[0].addedNodes, []); + assert_array_equals(records[0].removedNodes, [originalHTMLElement]); + })); + observer.observe(frame.contentDocument, { childList: true, subtree: true }); + assert_equals(frame.contentDocument.open(), frame.contentDocument); +}, "document.open() should inform mutation observer of node removal");