Skip to content

Commit 5c14f3d

Browse files
annevkfoolip
authored andcommitted
DOM: Scoped Custom Element Registry update
Align with the changes in whatwg/dom#1392 and whatwg/html#11472, add many more tests, and correct several tests.
1 parent c29b035 commit 5c14f3d

File tree

8 files changed

+651
-10
lines changed

8 files changed

+651
-10
lines changed

custom-elements/reactions/Document.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
const newDoc = contentDocument.implementation.createHTMLDocument();
2424
newDoc.importNode(instance);
2525

26-
assert_array_equals(element.takeLog().types(), ['constructed']);
27-
}, 'importNode on Document must construct a new custom element when importing a custom element into a window-less document');
26+
assert_array_equals(element.takeLog().types(), []);
27+
}, 'importNode on Document must not construct a new custom element when importing a custom element into a window-less document');
2828

2929
test_with_window(function (contentWindow, contentDocument) {
3030
const element = define_custom_element_in_window(contentWindow, 'custom-element', []);

custom-elements/registries/CustomElementRegistry-upgrade.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
<template shadowrootmode="closed" shadowrootclonable="true" shadowrootcustomelementregistry>
1212
<a-b>
1313
<template shadowrootmode="closed" shadowrootclonable="true" shadowrootcustomelementregistry>
14-
<c-d/>
14+
<c-d>
1515
<template shadowrootmode="closed" shadowrootclonable="true">
1616
<a-b></a-b>
1717
</template>
18-
<c-d>
18+
</c-d>
1919
</template>
2020
</a-b>
2121
</template>
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// Target document has a global registry
2+
3+
test(t => {
4+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
5+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
6+
7+
const element = document.createElement("div");
8+
const clone = contentDocument.importNode(element);
9+
assert_equals(clone.customElementRegistry, contentDocument.defaultView.customElements);
10+
}, "Cloning with global registry");
11+
12+
test(t => {
13+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
14+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
15+
16+
const element = document.createElement("div", { customElementRegistry: customElements });
17+
const clone = contentDocument.importNode(element);
18+
assert_equals(clone.customElementRegistry, contentDocument.defaultView.customElements);
19+
}, "Cloning with explicit global registry");
20+
21+
test(t => {
22+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
23+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
24+
25+
const scoped = new CustomElementRegistry();
26+
const element = document.createElement("div", { customElementRegistry: scoped });
27+
const clone = contentDocument.importNode(element);
28+
assert_equals(clone.customElementRegistry, scoped);
29+
}, "Cloning with scoped registry");
30+
31+
test(t => {
32+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
33+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
34+
35+
const element = document.createElement("div");
36+
const elementShadow = element.attachShadow({ mode: "open", clonable: true });
37+
const clone = contentDocument.importNode(element);
38+
assert_equals(clone.shadowRoot.customElementRegistry, contentDocument.defaultView.customElements);
39+
}, "Cloning including shadow tree with global registry");
40+
41+
test(t => {
42+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
43+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
44+
45+
const element = document.createElement("div");
46+
const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: customElements });
47+
const clone = contentDocument.importNode(element);
48+
assert_equals(clone.shadowRoot.customElementRegistry, contentDocument.defaultView.customElements);
49+
}, "Cloning including shadow tree with explicit global registry");
50+
51+
test(t => {
52+
const contentDocument = document.body.appendChild(document.createElement('iframe')).contentDocument;
53+
t.add_cleanup(() => contentDocument.defaultView.frameElement.remove());
54+
55+
const scoped = new CustomElementRegistry();
56+
const element = document.createElement("div");
57+
const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: scoped });
58+
const clone = contentDocument.importNode(element);
59+
assert_equals(clone.shadowRoot.customElementRegistry, scoped);
60+
}, "Cloning including shadow tree with scoped registry");
61+
62+
63+
// Target document has a null registry
64+
65+
test(t => {
66+
const contentDocument = document.implementation.createHTMLDocument();
67+
68+
const element = document.createElement("div");
69+
const clone = contentDocument.importNode(element);
70+
assert_equals(clone.customElementRegistry, null);
71+
}, "Cloning with global registry (null registry target)");
72+
73+
test(t => {
74+
const contentDocument = document.implementation.createHTMLDocument();
75+
76+
const element = document.createElement("div", { customElementRegistry: customElements });
77+
const clone = contentDocument.importNode(element);
78+
assert_equals(clone.customElementRegistry, null);
79+
}, "Cloning with explicit global registry (null registry target)");
80+
81+
test(t => {
82+
const contentDocument = document.implementation.createHTMLDocument();
83+
84+
const scoped = new CustomElementRegistry();
85+
const element = document.createElement("div", { customElementRegistry: scoped });
86+
const clone = contentDocument.importNode(element);
87+
assert_equals(clone.customElementRegistry, scoped);
88+
}, "Cloning with scoped registry (null registry target)");
89+
90+
test(t => {
91+
const contentDocument = document.implementation.createHTMLDocument();
92+
93+
const element = document.createElement("div");
94+
const elementShadow = element.attachShadow({ mode: "open", clonable: true });
95+
const clone = contentDocument.importNode(element);
96+
assert_equals(clone.shadowRoot.customElementRegistry, null);
97+
}, "Cloning including shadow tree with global registry (null registry target)");
98+
99+
test(t => {
100+
const contentDocument = document.implementation.createHTMLDocument();
101+
102+
const element = document.createElement("div");
103+
const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: customElements });
104+
const clone = contentDocument.importNode(element);
105+
assert_equals(clone.shadowRoot.customElementRegistry, null);
106+
}, "Cloning including shadow tree with explicit global registry (null registry target)");
107+
108+
test(t => {
109+
const contentDocument = document.implementation.createHTMLDocument();
110+
111+
const scoped = new CustomElementRegistry();
112+
const element = document.createElement("div");
113+
const elementShadow = element.attachShadow({ mode: "open", clonable: true, customElementRegistry: scoped });
114+
const clone = contentDocument.importNode(element);
115+
assert_equals(clone.shadowRoot.customElementRegistry, scoped);
116+
}, "Cloning including shadow tree with scoped registry (null registry target)");

0 commit comments

Comments
 (0)