Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<?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>