windowproxy-define-own-property-unforgeable-same-origin.html (2138B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>[[DefineOwnProperty]] on a WindowProxy forwards to OrdinaryDefineOwnProperty for same-origin objects</title> 4 <link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#windowproxy-defineownproperty"> 5 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 9 <script> 10 "use strict"; 11 12 for (const key of ["window", "document", "location", "top"]) { 13 const { get, set } = Object.getOwnPropertyDescriptor(window, key); 14 15 test(() => { 16 Object.defineProperty(window, key, {}); 17 assert_true(Reflect.defineProperty(window, key, { configurable: false }), "[[Configurable]]: false"); 18 Object.defineProperty(window, key, { enumerable: true }); 19 20 assert_true(Reflect.defineProperty(window, key, { get }), "[[Get]]: unchanged"); 21 Object.defineProperty(window, key, { set }); 22 assert_true(Reflect.defineProperty(window, key, { get, set }), "[[Get]]: unchanged, [[Set]]: unchanged"); 23 24 Object.defineProperty(window, key, { get, set, enumerable: true, configurable: false }); 25 }, `[[DefineOwnProperty]] success: "${key}"`); 26 27 test(() => { 28 assert_throws_js(TypeError, () => { 29 Object.defineProperty(window, key, { configurable: true }); 30 }, "[[Configurable]]: true"); 31 32 assert_false(Reflect.defineProperty(window, key, { enumerable: false }), "[[Enumerable]]: false"); 33 34 assert_throws_js(TypeError, () => { 35 Object.defineProperty(window, key, { get() {}, set }); 36 }, "[[Get]]: changed, [[Set]]: unchanged"); 37 38 assert_false(Reflect.defineProperty(window, key, { get, set() {} }), "[[Get]]: unchanged, [[Set]]: changed"); 39 40 assert_throws_js(TypeError, () => { 41 Object.defineProperty(window, key, { writable: false, configurable: true }); 42 }, "[[Writable]]: false, [[Configurable]]: true"); 43 44 assert_false(Reflect.defineProperty(window, key, { value: window[key], enumerable: true }), "[[Value]], [[Enumerable]]: true"); 45 }, `[[DefineOwnProperty]] failure: "${key}"`); 46 } 47 </script>