tor-browser

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

Debugger-onNativeCall-10.js (1519B)


      1 // Test that the onNativeCall get additional info
      2 // when using inspectNativeCallArguments
      3 
      4 load(libdir + "asserts.js");
      5 
      6 var g = newGlobal({ newCompartment: true });
      7 var dbg = new Debugger();
      8 var gdbg = dbg.addDebuggee(g);
      9 
     10 g.eval(`
     11 var x = [1];
     12 var callArg = () => true;
     13 function f() {
     14  x.push(42, 26);
     15  x.find(callArg);
     16  x.toString.call(2);
     17  new Function("code");
     18 }
     19 `);
     20 
     21 let rv = [];
     22 dbg.onNativeCall = (callee, reason, object, args) => {
     23  rv.push({
     24    name: callee.name, 
     25    cls: object?.class || null,
     26    args: args ? args.unsafeDereference().map(a => a.unsafeDereference ? a.unsafeDereference() : a) : null,
     27  });
     28 };
     29 
     30 g.f();
     31 
     32 // Trace without native arguments
     33 assertEq(dbg.inspectNativeCallArguments, false);
     34 assertEq(rv.length, 5);
     35 assertDeepEq(rv, [
     36 {
     37   name: "push",
     38   cls: null,
     39   args: null,
     40 },
     41 {
     42   name: "find",
     43   cls: null,
     44   args: null,
     45 },
     46 {
     47   name: "call",
     48   cls: null,
     49   args: null,
     50 },
     51 {
     52   name: "toString",
     53   cls: null,
     54   args: null,
     55 },
     56 {
     57   name: "Function",
     58   cls:null,
     59   args:null,
     60 },
     61 ]);
     62 
     63 // Trace with native arguments
     64 rv = [];
     65 dbg.inspectNativeCallArguments = true;
     66 assertEq(dbg.inspectNativeCallArguments, true);
     67 g.f();
     68 assertEq(rv.length, 5);
     69 assertDeepEq(rv, [
     70 {
     71   name: "push",
     72   cls: "Array",
     73   args: [42, 26],
     74 },
     75 {
     76   name: "find",
     77   cls: "Array",
     78   args: [g.callArg],
     79 },
     80 {
     81   name: "call",
     82   cls: "Function",
     83   args: [2],
     84 },
     85 {
     86   name: "toString",
     87   cls: null,
     88   args: [],
     89 },
     90 {
     91   name: "Function",
     92   cls: null,
     93   args:["code"],
     94 },
     95 ]);