overwritten-customElements-global.html (2286B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 6 <body> 7 <script> 8 "use strict"; 9 10 test(() => { 11 class SomeElement1 extends HTMLElement {} 12 customElements.define("some-element-1", SomeElement1); 13 14 const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); 15 Object.defineProperty(window, "customElements", { value: {}, configurable: true }); 16 17 const element = document.createElement("some-element-1"); 18 assert_true(element instanceof SomeElement1); 19 20 Object.defineProperty(window, "customElements", savedCustomElements); 21 }, "Custom elements can still be created after `window.customElements` is overwritten."); 22 23 test(() => { 24 class SomeElement2 extends HTMLElement {} 25 customElements.define("some-element-2", SomeElement2); 26 27 const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); 28 Object.defineProperty(window, "customElements", { value: {}, configurable: true }); 29 30 const element = new SomeElement2(); 31 assert_true(element instanceof SomeElement2); 32 33 Object.defineProperty(window, "customElements", savedCustomElements); 34 }, "Custom elements can still be constructed after `window.customElements` is overwritten."); 35 36 test(() => { 37 class SomeElement3 extends HTMLElement {} 38 customElements.define("some-element-3", SomeElement3); 39 40 const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); 41 delete window.customElements; 42 43 const element = document.createElement("some-element-3"); 44 assert_true(element instanceof SomeElement3); 45 46 Object.defineProperty(window, "customElements", savedCustomElements); 47 }, "Custom elements can still be created after `window.customElements` is deleted."); 48 49 test(() => { 50 class SomeElement4 extends HTMLElement {} 51 customElements.define("some-element-4", SomeElement4); 52 53 const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); 54 delete window.customElements; 55 56 const element = new SomeElement4(); 57 assert_true(element instanceof SomeElement4); 58 59 Object.defineProperty(window, "customElements", savedCustomElements); 60 }, "Custom elements can still be constructed after `window.customElements` is deleted."); 61 </script>