tor-browser

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

envChain_object-executeInGlobal.js (1414B)


      1 // Verify the environment chain for Debugger.Object described in
      2 // js/src/vm/EnvironmentObject.h.
      3 
      4 const g = newGlobal({newCompartment: true});
      5 const dbg = new Debugger();
      6 const gw = dbg.addDebuggee(g);
      7 
      8 const envs = JSON.parse(gw.executeInGlobal(`
      9 var qualified = 10;
     10 unqualified = 20;
     11 let lexical = 30;
     12 this.prop = 40;
     13 
     14 const envs = [];
     15 let env = getInnerMostEnvironmentObject();
     16 while (env) {
     17  envs.push({
     18    type: getEnvironmentObjectType(env) || "*global*",
     19    qualified: !!Object.getOwnPropertyDescriptor(env, "qualified"),
     20    unqualified: !!Object.getOwnPropertyDescriptor(env, "unqualified"),
     21    lexical: !!Object.getOwnPropertyDescriptor(env, "lexical"),
     22    prop: !!Object.getOwnPropertyDescriptor(env, "prop"),
     23  });
     24 
     25  env = getEnclosingEnvironmentObject(env);
     26 }
     27 JSON.stringify(envs);
     28 `).return);
     29 
     30 assertEq(envs.length, 2);
     31 
     32 let i = 0, env;
     33 
     34 env = envs[i]; i++;
     35 assertEq(env.type, "GlobalLexicalEnvironmentObject");
     36 assertEq(env.qualified, false);
     37 assertEq(env.unqualified, false);
     38 assertEq(env.lexical, true, "lexical must live in the GlobalLexicalEnvironmentObject");
     39 assertEq(env.prop, false);
     40 
     41 env = envs[i]; i++;
     42 assertEq(env.type, "*global*");
     43 assertEq(env.qualified, true, "qualified var must live in the global");
     44 assertEq(env.unqualified, true, "unqualified name must live in the global");
     45 assertEq(env.lexical, false);
     46 assertEq(env.prop, true, "this property must live in the global");