| <?xml version="1.0" encoding="utf-8"?> | |
| <html xmlns="http://www.w3.org/1999/xhtml" xmlns:bar="bar"> | |
| <head> | |
| <title>Test for Shadow DOM innerHTML setter in XML</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| <![CDATA[ | |
| // We define our custom elements lazily so we don't mess | |
| // with the DOM during parsing. | |
| customElements.define("custom-el-1", | |
| class extends HTMLElement { | |
| constructor() { | |
| super(); | |
| this.attachShadow({ mode: "open" }); | |
| try { this.shadowRoot.innerHTML = "<span/>"; } catch (e) {} | |
| } | |
| }); | |
| function defineElements() { | |
| // We define our custom elements whose behavior involves | |
| // ancestors of our parent lazily, because otherwise the | |
| // constructor runs before the element is in the DOM and has | |
| // the ancestors set up. | |
| customElements.define("custom-el-2", | |
| class extends HTMLElement { | |
| constructor() { | |
| super(); | |
| this.attachShadow({ mode: "open" }); | |
| try { this.shadowRoot.innerHTML = "<span/>"; } catch (e) {} | |
| } | |
| }); | |
| customElements.define("custom-el-with-prefix", | |
| class extends HTMLElement { | |
| constructor() { | |
| super(); | |
| this.attachShadow({ mode: "open" }); | |
| try { | |
| this.shadowRoot.innerHTML = "<bar:span/>"; | |
| } catch (e) { | |
| // Test will fail due to us not having the kid | |
| } | |
| } | |
| }); | |
| } | |
| ]]> | |
| </script> | |
| </head> | |
| <body> | |
| <custom-el-1 id="htmlDefault"/> | |
| <span xmlns="foo" xmlns:html="http://www.w3.org/1999/xhtml"> | |
| <html:custom-el-2 id="fooDefault"/> | |
| </span> | |
| <custom-el-with-prefix id="prefixTest"/> | |
| <script> | |
| <![CDATA[ | |
| const htmlNS = "http://www.w3.org/1999/xhtml"; | |
| test(() => { | |
| var el = document.getElementById("htmlDefault"); | |
| var kid = el.shadowRoot.firstChild; | |
| assert_equals(kid.namespaceURI, htmlNS, | |
| "Kid's namespace should be our default"); | |
| }, "InnerHTML behavior on custom element in default XHTML namespace"); | |
| test(defineElements, "Setting up the custom elements"); | |
| test(() => { | |
| var el = document.getElementById("fooDefault"); | |
| var kid = el.shadowRoot.firstChild; | |
| assert_equals(kid.namespaceURI, "foo", | |
| "Kid's namespace should be our default"); | |
| }, "InnerHTML behavior on custom element in default 'foo' namespace"); | |
| test(() => { | |
| var el = document.getElementById("prefixTest"); | |
| var kid = el.shadowRoot.firstChild; | |
| assert_equals(kid.namespaceURI, "bar", | |
| "Kid's namespace should be based on ancestor prefix"); | |
| }, "InnerHTML behavior with prefixes on custom element"); | |
| ]]> | |
| </script> | |
| </body> | |
| </html> |