tor-browser

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

replaceable-setter-throws-if-defineownproperty-fails.html (1650B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>[Replaceable] setter throws TypeError if [[DefineOwnProperty]] fails</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <link rel="author" title="Alexey Shvayka" href="shvaikalesh@gmail.com">
      7 <link rel="help" href="https://webidl.spec.whatwg.org/#Replaceable">
      8 
      9 <body>
     10 <script>
     11 for (const key of ["self", "parent", "origin", "innerWidth"]) {
     12    test(() => {
     13        Object.defineProperty(window, key, { configurable: false });
     14        assert_throws_js(TypeError, () => { window[key] = 1; });
     15 
     16        const desc = Object.getOwnPropertyDescriptor(window, key);
     17        assert_false("value" in desc);
     18        assert_equals(typeof desc.get, "function");
     19        assert_equals(typeof desc.set, "function");
     20        assert_true(desc.enumerable);
     21        assert_false(desc.configurable);
     22    }, `window.${key} setter throws TypeError if called on non-configurable accessor property`);
     23 }
     24 
     25 for (const key of ["screen", "length", "event", "outerHeight"]) {
     26    test(() => {
     27        const { set } = Object.getOwnPropertyDescriptor(window, key);
     28        Object.defineProperty(window, key, { value: 1, writable: false, configurable: false });
     29        assert_throws_js(TypeError, () => { set.call(window, 2); });
     30 
     31        const desc = Object.getOwnPropertyDescriptor(window, key);
     32        assert_equals(desc.value, 1);
     33        assert_false(desc.writable);
     34        assert_true(desc.enumerable);
     35        assert_false(desc.configurable);
     36    }, `window.${key} setter throws TypeError if called on non-configurable non-writable data property`);
     37 }
     38 </script>