tor-browser

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

private-setter-brand-check-super-class.js (1438B)


      1 // Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 description: Subclass can access private methods of a superclass (private setter)
      6 esid: sec-privatefieldget
      7 info: |
      8  SuperCall : super Arguments
      9    ...
     10    10. Perform ? InitializeInstanceElements(result, F).
     11    ...
     12 
     13  InitializeInstanceFieldsElements ( O, constructor )
     14    1. Assert: Type ( O ) is Object.
     15    2. Assert: Assert constructor is an ECMAScript function object.
     16    3. If constructor.[[PrivateBrand]] is not undefined,
     17      a. Perform ? PrivateBrandAdd(O, constructor.[[PrivateBrand]]).
     18    4. Let fieldRecords be the value of constructor's [[Fields]] internal slot.
     19    5. For each item fieldRecord in order from fieldRecords,
     20      a. Perform ? DefineField(O, fieldRecord).
     21    6. Return.
     22 features: [class, class-methods-private]
     23 ---*/
     24 
     25 class S {
     26  set #m(v) { this._v = v }
     27  
     28  superAccess(v) { this.#m = v; }
     29 }
     30 
     31 class C extends S {
     32  set #m(v) { this._u = v; }
     33  
     34  access(v) {
     35    return this.#m = v;
     36  }
     37 }
     38  
     39 let c = new C();
     40 
     41 c.access('test262');
     42 assert.sameValue(c._u, 'test262');
     43 
     44 c.superAccess('super class');
     45 assert.sameValue(c._v, 'super class');
     46 
     47 let s = new S();
     48 s.superAccess('super class')
     49 assert.sameValue(s._v, 'super class');
     50 
     51 assert.throws(TypeError, function() {
     52  c.access.call(s, 'foo');
     53 }, 'invalid access of C private method');
     54 
     55 reportCompare(0, 0);