| // 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'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption 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 }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption 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 }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption 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'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption with global registry into a 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', { customElementRegistry: customElements }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption with explicit global registry into a scoped 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 }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption with scoped registry into a 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: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| // In certain implementations touching element.customElementRegistry can poison the results so we |
| // don't do that here. |
| assert_equals(elementShadow.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption including shadow root 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: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption including shadow root with explicit 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 scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root 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: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption including shadow root with global registry into a 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: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, contentDocument.customElementRegistry); |
| }, "Adoption including shadow root with explicit global registry into a 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 scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root with scoped registry into a scoped registry"); |
| |
| |
| // Target document has a null registry |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with global registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div', { customElementRegistry: customElements }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption 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 }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption with scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with global registry into a scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div', { customElementRegistry: customElements }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with explicit global registry into a scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const scoped = new CustomElementRegistry(); |
| const element = document.createElement('div', { customElementRegistry: scoped }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption with scoped registry into a scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| // In certain implementations touching element.customElementRegistry can poison the results so we |
| // don't do that here. |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with global registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with explicit global registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root with scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with global registry into a scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with explicit global registry into a scoped registry (null registry target)"); |
| |
| test(t => { |
| const contentDocument = document.implementation.createHTMLDocument(); |
| const element = document.createElement('div'); |
| const scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root with scoped registry into a scoped registry (null registry target)"); |
| |
| |
| // Target document has a scoped registry |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| const element = document.createElement('div'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with global registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div', { customElementRegistry: customElements }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with explicit global registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const scoped = new CustomElementRegistry(); |
| const element = document.createElement('div', { customElementRegistry: scoped }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption with scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div'); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with global registry into a scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div', { customElementRegistry: customElements }); |
| assert_equals(element.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, null); |
| }, "Adoption with explicit global registry into a scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const scoped = new CustomElementRegistry(); |
| const element = document.createElement('div', { customElementRegistry: scoped }); |
| assert_equals(element.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(element.customElementRegistry, scoped); |
| }, "Adoption with scoped registry into a scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| // In certain implementations touching element.customElementRegistry can poison the results so we |
| // don't do that here. |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with global registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with explicit global registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div'); |
| const scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| contentDocument.body.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root with scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed" }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with global registry into a scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| const element = document.createElement('div'); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: customElements }); |
| assert_equals(elementShadow.customElementRegistry, customElements); |
| |
| const scoped = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, null); |
| }, "Adoption including shadow root with explicit global registry into a scoped registry (scoped registry target)"); |
| |
| test(t => { |
| const documentRegistry = new CustomElementRegistry(); |
| const contentDocument = document.implementation.createHTMLDocument(); |
| documentRegistry.initialize(contentDocument); |
| assert_equals(contentDocument.customElementRegistry, documentRegistry); |
| const element = document.createElement('div'); |
| const scoped = new CustomElementRegistry(); |
| const elementShadow = element.attachShadow({ mode: "closed", customElementRegistry: scoped }); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| |
| const scoped2 = new CustomElementRegistry(); |
| const scopedElement = contentDocument.createElement('div', { customElementRegistry: scoped2 }); |
| contentDocument.body.appendChild(scopedElement); |
| assert_equals(scopedElement.customElementRegistry, scoped2); |
| scopedElement.appendChild(element); |
| assert_equals(elementShadow.customElementRegistry, scoped); |
| }, "Adoption including shadow root with scoped registry into a scoped registry (scoped registry target)"); |