summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/head_ongc.js
blob: 85989f1d9d4b283309dbd3695bfa58cf36f48508 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;

Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/jsdebugger.jsm");

const testingFunctions = Cu.getJSTestingFunctions();
const systemPrincipal = Cc["@mozilla.org/systemprincipal;1"].createInstance(Ci.nsIPrincipal);

function addTestingFunctionsToGlobal(global) {
  for (let k in testingFunctions) {
    global[k] = testingFunctions[k];
  }
  global.print = do_print;
  global.newGlobal = newGlobal;
  addDebuggerToGlobal(global);
}

function newGlobal() {
  const global = new Cu.Sandbox(systemPrincipal, { freshZone: true });
  addTestingFunctionsToGlobal(global);
  return global;
}

addTestingFunctionsToGlobal(this);

function executeSoon(f) {
  Services.tm.mainThread.dispatch({ run: f },
                                  Ci.nsIThread.DISPATCH_NORMAL);
}

// The onGarbageCollection tests don't play well gczeal settings and lead to
// intermittents.
if (typeof gczeal == "function") {
  gczeal(0);
}

// Make sure to GC before we start the test, so that no zones are scheduled for
// GC before we start testing onGarbageCollection hooks.
gc();