tor-browser

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

proxy-with-defineProperty-handler.js (1848B)


      1 // Copyright (C) 2021 Alexey Shvayka. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-object.freeze
      5 description: >
      6  [[DefineOwnProperty]] is called with partial descriptor with only [[Configurable]] and
      7  [[Writable]] (for data properties only) fields present.
      8 info: |
      9  SetIntegrityLevel ( O, level )
     10 
     11  [...]
     12  5. Let keys be ? O.[[OwnPropertyKeys]]().
     13  [...]
     14  7. Else,
     15    a. Assert: level is frozen.
     16    b. For each element k of keys, do
     17      i. Let currentDesc be ? O.[[GetOwnProperty]](k).
     18      ii. If currentDesc is not undefined, then
     19        1. If IsAccessorDescriptor(currentDesc) is true, then
     20          a. Let desc be the PropertyDescriptor { [[Configurable]]: false }.
     21        2. Else,
     22          a. Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
     23        3. Perform ? DefinePropertyOrThrow(O, k, desc).
     24 features: [Symbol, Proxy, Reflect]
     25 ---*/
     26 
     27 var sym = Symbol();
     28 var seenDescriptors = {};
     29 var proxy = new Proxy({
     30  [sym]: 1,
     31  get foo() {},
     32  set foo(_v) {},
     33 }, {
     34  defineProperty: function(target, key, descriptor) {
     35    seenDescriptors[key] = descriptor;
     36    return Reflect.defineProperty(target, key, descriptor);
     37  },
     38 });
     39 
     40 Object.freeze(proxy);
     41 
     42 assert.sameValue(seenDescriptors[sym].value, undefined, "value");
     43 assert.sameValue(seenDescriptors[sym].writable, false, "writable");
     44 assert.sameValue(seenDescriptors[sym].enumerable, undefined, "enumerable");
     45 assert.sameValue(seenDescriptors[sym].configurable, false, "configurable");
     46 
     47 assert.sameValue(seenDescriptors.foo.get, undefined, "get");
     48 assert.sameValue(seenDescriptors.foo.set, undefined, "set");
     49 assert.sameValue(seenDescriptors.foo.enumerable, undefined, "enumerable");
     50 assert.sameValue(seenDescriptors.foo.configurable, false, "configurable");
     51 
     52 reportCompare(0, 0);