| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <body> | |
| <script> | |
| "use strict"; | |
| test(() => { | |
| class SomeElement1 extends HTMLElement {} | |
| customElements.define("some-element-1", SomeElement1); | |
| const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); | |
| Object.defineProperty(window, "customElements", { value: {}, configurable: true }); | |
| const element = document.createElement("some-element-1"); | |
| assert_true(element instanceof SomeElement1); | |
| Object.defineProperty(window, "customElements", savedCustomElements); | |
| }, "Custom elements can still be created after `window.customElements` is overwritten."); | |
| test(() => { | |
| class SomeElement2 extends HTMLElement {} | |
| customElements.define("some-element-2", SomeElement2); | |
| const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); | |
| Object.defineProperty(window, "customElements", { value: {}, configurable: true }); | |
| const element = new SomeElement2(); | |
| assert_true(element instanceof SomeElement2); | |
| Object.defineProperty(window, "customElements", savedCustomElements); | |
| }, "Custom elements can still be constructed after `window.customElements` is overwritten."); | |
| test(() => { | |
| class SomeElement3 extends HTMLElement {} | |
| customElements.define("some-element-3", SomeElement3); | |
| const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); | |
| delete window.customElements; | |
| const element = document.createElement("some-element-3"); | |
| assert_true(element instanceof SomeElement3); | |
| Object.defineProperty(window, "customElements", savedCustomElements); | |
| }, "Custom elements can still be created after `window.customElements` is deleted."); | |
| test(() => { | |
| class SomeElement4 extends HTMLElement {} | |
| customElements.define("some-element-4", SomeElement4); | |
| const savedCustomElements = Object.getOwnPropertyDescriptor(window, "customElements"); | |
| delete window.customElements; | |
| const element = new SomeElement4(); | |
| assert_true(element instanceof SomeElement4); | |
| Object.defineProperty(window, "customElements", savedCustomElements); | |
| }, "Custom elements can still be constructed after `window.customElements` is deleted."); | |
| </script> |