// Target document has a global registry test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const element = document.createElement("div"); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, contentDocument.defaultView.customElements); }, "Cloning with global registry"); test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const element = document.createElement("div", { customElementRegistry: customElements }); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, contentDocument.defaultView.customElements); }, "Cloning with explicit global registry"); test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const scoped = new CustomElementRegistry(); const element = document.createElement("div", { customElementRegistry: scoped }); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, scoped); }, "Cloning with scoped registry"); test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, contentDocument.defaultView.customElements); }, "Cloning including shadow tree with global registry"); test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: customElements }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, contentDocument.defaultView.customElements); }, "Cloning including shadow tree with explicit global registry"); test(t => { const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument; t.add_cleanup(() => contentDocument.defaultView.frameElement.remove()); const scoped = new CustomElementRegistry(); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: scoped }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, scoped); }, "Cloning including shadow tree with scoped registry"); // Target document has a null registry test(t => { const contentDocument = document.implementation.createHTMLDocument(); const element = document.createElement("div"); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, null); }, "Cloning with global registry (null registry target)"); test(t => { const contentDocument = document.implementation.createHTMLDocument(); const element = document.createElement("div", { customElementRegistry: customElements }); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, null); }, "Cloning with explicit global registry (null registry target)"); test(t => { const contentDocument = document.implementation.createHTMLDocument(); const scoped = new CustomElementRegistry(); const element = document.createElement("div", { customElementRegistry: scoped }); const clone = contentDocument.importNode(element); assert_equals(clone.customElementRegistry, scoped); }, "Cloning with scoped registry (null registry target)"); test(t => { const contentDocument = document.implementation.createHTMLDocument(); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, null); }, "Cloning including shadow tree with global registry (null registry target)"); test(t => { const contentDocument = document.implementation.createHTMLDocument(); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: customElements }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, null); }, "Cloning including shadow tree with explicit global registry (null registry target)"); test(t => { const contentDocument = document.implementation.createHTMLDocument(); const scoped = new CustomElementRegistry(); const element = document.createElement("div"); const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: scoped }); const clone = contentDocument.importNode(element); assert_equals(clone.shadowRoot.customElementRegistry, scoped); }, "Cloning including shadow tree with scoped registry (null registry target)");