Document-importNode-cross-document.window.js (5516B)
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)");