js/src/devtools/rootAnalysis/utility.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: Javascript; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     3 "use strict";
     5 function assert(x, msg)
     6 {
     7     if (x)
     8         return;
     9     debugger;
    10     if (msg)
    11         throw "assertion failed: " + msg + "\n" + (Error().stack);
    12     else
    13         throw "assertion failed: " + (Error().stack);
    14 }
    16 function defined(x) {
    17     return x !== undefined;
    18 }
    20 function xprint(x, padding)
    21 {
    22     if (!padding)
    23         padding = "";
    24     if (x instanceof Array) {
    25         print(padding + "[");
    26         for (var elem of x)
    27             xprint(elem, padding + " ");
    28         print(padding + "]");
    29     } else if (x instanceof Object) {
    30         print(padding + "{");
    31         for (var prop in x) {
    32             print(padding + " " + prop + ":");
    33             xprint(x[prop], padding + "  ");
    34         }
    35         print(padding + "}");
    36     } else {
    37         print(padding + x);
    38     }
    39 }
    41 function sameBlockId(id0, id1)
    42 {
    43     if (id0.Kind != id1.Kind)
    44         return false;
    45     if (!sameVariable(id0.Variable, id1.Variable))
    46         return false;
    47     if (id0.Kind == "Loop" && id0.Loop != id1.Loop)
    48         return false;
    49     return true;
    50 }
    52 function sameVariable(var0, var1)
    53 {
    54     assert("Name" in var0 || var0.Kind == "This" || var0.Kind == "Return");
    55     assert("Name" in var1 || var1.Kind == "This" || var1.Kind == "Return");
    56     if ("Name" in var0)
    57         return "Name" in var1 && var0.Name[0] == var1.Name[0];
    58     return var0.Kind == var1.Kind;
    59 }
    61 function blockIdentifier(body)
    62 {
    63     if (body.BlockId.Kind == "Loop")
    64         return body.BlockId.Loop;
    65     assert(body.BlockId.Kind == "Function", "body.Kind should be Function, not " + body.BlockId.Kind);
    66     return body.BlockId.Variable.Name[0];
    67 }
    69 function collectBodyEdges(body)
    70 {
    71     body.predecessors = [];
    72     body.successors = [];
    73     if (!("PEdge" in body))
    74         return;
    76     for (var edge of body.PEdge) {
    77         var [ source, target ] = edge.Index;
    78         if (!(target in body.predecessors))
    79             body.predecessors[target] = [];
    80         body.predecessors[target].push(edge);
    81         if (!(source in body.successors))
    82             body.successors[source] = [];
    83         body.successors[source].push(edge);
    84     }
    85 }
    87 function getPredecessors(body)
    88 {
    89     try {
    90         if (!('predecessors' in body))
    91             collectBodyEdges(body);
    92     } catch (e) {
    93         debugger;
    94         printErr("body is " + body);
    95     }
    96     return body.predecessors;
    97 }
    99 function getSuccessors(body)
   100 {
   101     if (!('successors' in body))
   102         collectBodyEdges(body);
   103     return body.successors;
   104 }
   106 // Split apart a function from sixgill into its mangled and unmangled name. If
   107 // no mangled name was given, use the unmangled name as its mangled name
   108 function splitFunction(func)
   109 {
   110     var split = func.indexOf("|");
   111     if (split == -1)
   112         return [ func, func ];
   113     return [ func.substr(0, split), func.substr(split+1) ];
   114 }
   116 function mangled(fullname)
   117 {
   118     var split = fullname.indexOf("|");
   119     if (split == -1)
   120         return fullname;
   121     return fullname.substr(0, split);
   122 }
   124 function readable(fullname)
   125 {
   126     var split = fullname.indexOf("|");
   127     if (split == -1)
   128         return fullname;
   129     return fullname.substr(split+1);
   130 }
   132 function xdbLibrary()
   133 {
   134     var lib = ctypes.open(environment['XDB']);
   135     return {
   136         open: lib.declare("xdb_open", ctypes.default_abi, ctypes.void_t, ctypes.char.ptr),
   137         min_data_stream: lib.declare("xdb_min_data_stream", ctypes.default_abi, ctypes.int),
   138         max_data_stream: lib.declare("xdb_max_data_stream", ctypes.default_abi, ctypes.int),
   139         read_key: lib.declare("xdb_read_key", ctypes.default_abi, ctypes.char.ptr, ctypes.int),
   140         read_entry: lib.declare("xdb_read_entry", ctypes.default_abi, ctypes.char.ptr, ctypes.char.ptr),
   141         free_string: lib.declare("xdb_free", ctypes.default_abi, ctypes.void_t, ctypes.char.ptr)
   142     };
   143 }

mercurial