1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
<!DOCTYPE html>
<link rel=author href="mailto:jarhar@chromium.org">
<link rel=help href="https://github.com/whatwg/html/issues/9957">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
class MyElement extends HTMLElement {
constructor() {
super();
this.numConnectedCallback = 0;
this.numDisconnectedCallback = 0;
this.attributeChangedCalls = [];
}
connectedCallback() {
this.numConnectedCallback++;
}
disconnectedCallback() {
this.numDisconnectedCallback++;
}
static observedAttributes = ['foo'];
attributeChangedCallback(name, oldValue, newValue) {
this.attributeChangedCalls.push({name, oldValue, newValue});
}
}
customElements.define('my-element', MyElement);
['Element', 'ShadowRoot'].forEach(containerType => {
test(() => {
let container = null;
if (containerType === 'Element') {
container = document.createElement('div');
document.body.appendChild(container);
} else if (containerType === 'ShadowRoot') {
const host = document.createElement('div');
document.body.appendChild(host);
container = host.attachShadow({mode: 'closed'});
}
container.setHTMLUnsafe('<my-element>');
const myElement1 = container.querySelector('my-element');
assert_equals(myElement1.numConnectedCallback, 1,
'myElement1.numConnectedCallback after first setHTMLUnsafe.');
assert_equals(myElement1.numDisconnectedCallback, 0,
'myElement1.numDisconnectedCallback after first setHTMLUnsafe.');
assert_equals(JSON.stringify(myElement1.attributeChangedCalls),
JSON.stringify([]),
'myElement1.attributeChangedCalls after first setHTMLUnsafe.');
container.setHTMLUnsafe('<my-element foo=bar>');
const myElement2 = container.querySelector('my-element');
assert_equals(myElement1.numConnectedCallback, 1,
'myElement1.numConnectedCallback after second setHTMLUnsafe.');
assert_equals(myElement1.numDisconnectedCallback, 1,
'myElement1.numDisconnectedCallback after second setHTMLUnsafe.');
assert_array_equals(myElement1.attributeChangedCalls, [],
'myElement1.attributeChangedCalls after second setHTMLUnsafe.');
assert_equals(myElement2.numConnectedCallback, 1,
'myElement2.numConnectedCallback after second setHTMLUnsafe.');
assert_equals(myElement2.numDisconnectedCallback, 0,
'myElement2.numDisconnectedCallback after second setHTMLUnsafe.');
assert_equals(JSON.stringify(myElement2.attributeChangedCalls),
JSON.stringify([{name: 'foo', oldValue: null, newValue: 'bar'}]),
'myElement2.attributeChangedCalls after second setHTMLUnsafe.');
}, `${containerType}.setHTMLUnsafe should trigger custom element reactions.`);
});
</script>
|