Automatic update from web-platform-tests Ensure CE constructor has correct access to custom element registry We set the custom element registry in the later stage of creating an element, but turned out that would lead to Element::customElementRegistry accessing the wrong registry if it was called in CE constructor. This patch moves the registry setting a bit earlier. Bug: 40826514 Change-Id: Ia36a3cce331eb4349529422c9d1618e211e0ddcf Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7573055 Reviewed-by: Mason Freed <masonf@chromium.org> Commit-Queue: Jayson Chen <jaysonchen@microsoft.com> Cr-Commit-Position: refs/heads/main@{#1587436} -- wpt-commits: 4f93fabcf4eeb7f55bff64143937be50e322fcbd wpt-pr: 57840
105 lines
5.0 KiB
HTML
105 lines
5.0 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
|
|
<link rel="help" href="https://github.com/whatwg/html/issues/10854">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="host-window"><template shadowrootmode="open" shadowrootclonable="true"><a-b></a-b></template></div>
|
|
<div id="host-null"><template shadowrootmode="open" shadowrootclonable="true" shadowrootcustomelementregistry=""><a-b></a-b></template></div>
|
|
<script>
|
|
|
|
test(() => {
|
|
assert_equals(document.createElement('div').customElementRegistry, window.customElements);
|
|
}, 'customElementRegistry on a newly constrcuted element should return window.customElements by default');
|
|
|
|
test(() => {
|
|
const sr = document.getElementById('host-window').shadowRoot;
|
|
const ab = sr.querySelector('a-b');
|
|
assert_equals(sr.customElementRegistry, window.customElements);
|
|
assert_equals(ab.customElementRegistry, window.customElements);
|
|
}, 'customElementRegistry on an element inside a declarative shadow DOM should return window.customElements by default');
|
|
|
|
test(() => {
|
|
const sr = document.getElementById('host-null').shadowRoot;
|
|
const ab = sr.querySelector('a-b');
|
|
assert_equals(sr.customElementRegistry, null);
|
|
assert_equals(ab.customElementRegistry, null);
|
|
}, 'customElementRegistry on an element inside a declarative shadow DOM with shadowrootcustomelementregistry should return null');
|
|
|
|
test(() => {
|
|
const clone = document.getElementById('host-null').cloneNode(true);
|
|
const sr = clone.shadowRoot;
|
|
const ab = sr.querySelector('a-b');
|
|
assert_equals(sr.customElementRegistry, null);
|
|
assert_equals(ab.customElementRegistry, null);
|
|
}, 'customElementRegistry on a clone of a declarative shadow tree with shadowrootcustomelementregistry should return null');
|
|
|
|
test((t) => {
|
|
const clone = document.getElementById('host-null').cloneNode(true);
|
|
const ab = clone.shadowRoot.querySelector('a-b');
|
|
document.body.appendChild(ab);
|
|
assert_equals(ab.customElementRegistry, null);
|
|
|
|
const frame = document.createElement('iframe');
|
|
t.add_cleanup(() => frame.remove());
|
|
document.body.appendChild(frame);
|
|
frame.contentDocument.body.append(ab);
|
|
assert_equals(ab.customElementRegistry, frame.contentWindow.customElements);
|
|
|
|
}, 'customElementRegistry on a clone of a declarative shadow tree with shadowrootcustomelementregistry should return the global registry after getting inserted into a document');
|
|
|
|
test(() => {
|
|
const sr = document.getElementById('host-null').shadowRoot;
|
|
const ab = sr.querySelector('a-b');
|
|
const registry = new CustomElementRegistry;
|
|
registry.initialize(sr);
|
|
assert_equals(sr.customElementRegistry, registry);
|
|
assert_equals(ab.customElementRegistry, registry);
|
|
}, 'customElementRegistry on an element inside a declarative shadow DOM with shadowrootcustomelementregistry should return the scoped registry after calling initialize');
|
|
|
|
test(() => {
|
|
const registry = new CustomElementRegistry;
|
|
element = document.createElement('div', {customElementRegistry: registry});
|
|
assert_equals(element.customElementRegistry, registry);
|
|
}, 'customElementRegistry on a builtin element created by calling createElement on CustomElementRegistry should return the registry');
|
|
|
|
test(() => {
|
|
const registry = new CustomElementRegistry;
|
|
element = document.createElement('non-existent', {customElementRegistry: registry});
|
|
assert_equals(element.customElementRegistry, registry);
|
|
}, 'customElementRegistry on an upgarde candidate created by calling createElement on CustomElementRegistry should return the registry');
|
|
|
|
test(() => {
|
|
const registry = new CustomElementRegistry;
|
|
element = document.createElement('nonexistent', {customElementRegistry: registry});
|
|
assert_equals(element.customElementRegistry, registry);
|
|
}, 'customElementRegistry on an unknown element created by calling createElement on CustomElementRegistry should return the registry');
|
|
|
|
test(() => {
|
|
const registry = new CustomElementRegistry;
|
|
registry.define('custom-element', class extends HTMLElement { })
|
|
element = document.createElement('custom-element', {customElementRegistry: registry});
|
|
assert_equals(element.customElementRegistry, registry);
|
|
}, 'customElementRegistry on a defined custom element created by calling createElement on CustomElementRegistry should return the registry');
|
|
|
|
test(() => {
|
|
const registry = new CustomElementRegistry;
|
|
let registryInConstructor = null;
|
|
registry.define('check-registry-in-constructor', class extends HTMLElement {
|
|
constructor() {
|
|
super();
|
|
registryInConstructor = this.customElementRegistry;
|
|
}
|
|
});
|
|
const element = document.createElement('check-registry-in-constructor', {customElementRegistry: registry});
|
|
assert_equals(registryInConstructor, registry);
|
|
assert_equals(element.customElementRegistry, registry);
|
|
}, 'customElementRegistry inside a custom element constructor should return the correct registry');
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|