tor-browser

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

envChain_object-executeInGlobalWithBindings-empty.js (1602B)


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