blob: 342c87a1eb1bf08b0f6d85bc2882d537c306380b [file] [log] [blame]
<!DOCTYPE html>
<title>Invisible-static level</title>
<body>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<div>
<div id="normal"></div>
<div id="basicInvisible" invisible></div>
<div id="staticInvisible" invisible="static"></div>
</div>
<script>
'use strict';
let upgraded = false;
let connected = false;
class TestElement extends HTMLElement {
constructor() {
super();
upgraded = true;
}
connectedCallback() {
connected = true;
}
}
customElements.define("test-element", TestElement);
const testElementString = "<test-element></test-element>";
const testElementUpgradedString = "<test-element>upgraded</test-element>";
function setUp() {
normal.innerHTML = basicInvisible.innerHTML = staticInvisible.innerHTML = "";
basicInvisible.invisible = "invisible";
staticInvisible.invisible = "static";
connected = upgraded = false;
}
test(() => {
setUp();
normal.innerHTML = testElementString;
assert_true(upgraded);
assert_true(connected);
setUp();
basicInvisible.innerHTML = testElementString;
assert_true(upgraded);
assert_true(connected);
setUp();
staticInvisible.innerHTML = testElementString;
assert_false(upgraded);
assert_false(connected);
}, "Custom elements inside invisible-static subtree is not upgraded.");
test(() => {
setUp();
staticInvisible.removeAttribute("invisible");
staticInvisible.innerHTML = testElementString;
assert_true(upgraded);
assert_true(connected);
}, "Previously-static subtree should not block custom element upgrade");
test(() => {
setUp();
staticInvisible.innerHTML = testElementString;
staticInvisible.invisible = "invisible";
assert_true(upgraded);
assert_true(connected);
}, "Making an element not invisible='static' upgrades the custom elements inside");
test(() => {
setUp();
staticInvisible.innerHTML = testElementString;
assert_false(upgraded);
assert_false(connected);
customElements.upgrade(staticInvisible);
assert_true(upgraded);
assert_true(connected);
}, "Upgrade by customElements.upgrade is not deferred");
test(() => {
setUp();
staticInvisible.innerHTML = "<another-element></another-element>";
let anotherUpgraded = false;
let anotherConnected = false;
customElements.define("another-element", class extends HTMLElement {
constructor() {
super();
anotherUpgraded = true;
}
connectedCallback() {
anotherConnected = true;
}
});
assert_false(anotherUpgraded);
assert_false(anotherConnected);
staticInvisible.invisible = "invisible";
assert_true(anotherUpgraded);
assert_true(anotherConnected);
}, "Upgrade after defined is deferred");
setUp();
</script>
<test-element id="parserEl" invisible="static"></test-element>
<script>
test(() => {
assert_true(upgraded);
assert_true(connected);
}, "Invisible static custom element is upgraded if constructed through HTML parser.");
setUp();
</script>
<div>
<test-element></test-element>
</div>
<script>
test(() => {
assert_true(upgraded);
assert_true(connected);
}, "Custom element under invisible static element made through HTML parser is upgraded.");
</script>
</body>