tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>