blob: f24cc209c893ff0e6f69fd19651e0bad66419cd1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Custom Elements: the HTML fragment parsing algorithm must not create a custom element synchronously</title>
<meta name="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
<meta name="assert" content="The HTML fragment parsing algorithm must enqueue a custom element upgrade reaction instead of synchronously invoking its constructor">
<link rel="help" href="https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/custom-elements-helpers.js"></script>
</head>
<body>
<div id="log"></div>
<script>
let iteration = 0;
document_types().forEach(function (entry) {
var documentName = entry.name;
var getDocument = entry.create;
let calls = 0;
promise_test(function () {
class Parenter extends HTMLElement {
connectedCallback() {
const child = this.firstChild;
this.removeChild(child);
this.appendChild(child);
}
}
class Child extends HTMLElement {
connectedCallback() { calls++; }
}
iteration++;
let parenter = 'x-parenter' + iteration;
let child = 'x-child' + iteration;
customElements.define(parenter, Parenter);
customElements.define(child, Child);
return getDocument().then(function (doc) {
document.documentElement.innerHTML = `<${parenter}><${child}></${child}></${parenter}>`;
doc.documentElement.appendChild(document.documentElement.firstChild);
assert_equals(calls, 1);
});
}, `Inserting a custom element into ${documentName} using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor`);
});
</script>
</body>
</html>