diff options
Diffstat (limited to 'testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/custom-element.window.js')
-rw-r--r-- | testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/custom-element.window.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/custom-element.window.js b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/custom-element.window.js new file mode 100644 index 0000000000..1ad06b3d37 --- /dev/null +++ b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/custom-element.window.js @@ -0,0 +1,39 @@ +// The document open steps have: +// +// 2. If document's throw-on-dynamic-markup-insertion counter is greater than +// 0, then throw an "InvalidStateError" DOMException. +// +// The throw-on-dynamic-markup-insertion counter is only incremented when the +// parser creates a custom element, not when createElement is called. Test for +// this. +// +// See: https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document-open-steps + +const noError = Symbol("no error"); +let err = noError; + +class CustomElement extends HTMLElement { + constructor() { + super(); + try { + assert_equals(document.open(), document); + } catch (e) { + err = e; + } + } +} +customElements.define("custom-element", CustomElement); + +test(t => { + err = noError; + document.createElement("custom-element"); + assert_equals(err, noError); +}, "document.open() works in custom element constructor for createElement()"); + +test(t => { + err = noError; + document.write("<custom-element></custom-element>"); + assert_throws_dom("InvalidStateError", () => { + throw err; + }); +}, "document.open() is forbidden in custom element constructor when creating element from parser"); |