tor-browser

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

bug901979-2.js (1149B)


      1 // A proxy on the prototype chain of the global should not observe anything at
      2 // all about lazy resolution of globals.
      3 load(libdir + "immutable-prototype.js");
      4 
      5 var global = this;
      6 var status = "pass";
      7 
      8 // This is a little tricky. There are two proxies.
      9 // 1. handler is a proxy that fails the test if you try to call a method on it.
     10 var metaHandler = {
     11  get: _ => { status = "SMASH"; },
     12  has: _ => { status = "SMASH"; },
     13  invoke: _ => { status = "SMASH"; }
     14 };
     15 var handler = new Proxy({}, metaHandler);
     16 
     17 // 2. Then we create a proxy using 'handler' as its handler. This means the test
     18 //    will fail if *any* method of the handler is called, not just get/has/invoke.
     19 var angryProxy = new Proxy(Object.create(null), handler);
     20 if (globalPrototypeChainIsMutable()) {
     21  this.__proto__ = angryProxy;
     22  Object.prototype.__proto__ = angryProxy;
     23 }
     24 
     25 // Trip the alarm once, to make sure the proxies are working.
     26 this.nonExistingProperty;
     27 if (globalPrototypeChainIsMutable())
     28  assertEq(status, "SMASH");
     29 else
     30  assertEq(status, "pass");
     31 
     32 // OK. Reset the status and run the actual test.
     33 status = "pass";
     34 Map;
     35 ArrayBuffer;
     36 Date;
     37 assertEq(status, "pass");