tor-browser

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

test_deepFreezeClone.js (1183B)


      1 function checkThrows(f, rgxp) { try { f(); do_check_false(); } catch (e) { Assert.ok(rgxp.test(e)); } }
      2 
      3 var o = { foo: 42, bar : { tick: 'tock' } };
      4 function checkClone(clone, frozen) {
      5  var waived = Cu.waiveXrays(clone);
      6  function touchFoo() { "use strict"; waived.foo = 12; Assert.equal(waived.foo, 12); }
      7  function touchBar() { "use strict"; waived.bar.tick = 'tack'; Assert.equal(waived.bar.tick, 'tack'); }
      8  function addProp() { "use strict"; waived.newProp = 100; Assert.equal(waived.newProp, 100); }
      9  if (!frozen) {
     10    touchFoo();
     11    touchBar();
     12    addProp();
     13  } else {
     14    checkThrows(touchFoo, /read-only/);
     15    checkThrows(touchBar, /read-only/);
     16    checkThrows(addProp, /extensible/);
     17  }
     18 
     19  var desc = Object.getOwnPropertyDescriptor(waived, 'foo');
     20  Assert.equal(desc.writable, !frozen);
     21  Assert.equal(desc.configurable, !frozen);
     22  desc = Object.getOwnPropertyDescriptor(waived.bar, 'tick');
     23  Assert.equal(desc.writable, !frozen);
     24  Assert.equal(desc.configurable, !frozen);
     25 }
     26 
     27 function run_test() {
     28  var sb = new Cu.Sandbox(null);
     29  checkClone(Cu.waiveXrays(Cu.cloneInto(o, sb)), false);
     30  checkClone(Cu.cloneInto(o, sb, { deepFreeze: true }), true);
     31 }