Skip to content

Commit

Permalink
Modified the representation of an addon process on the chrome side to…
Browse files Browse the repository at this point in the history
… have a similar interface as the chrome process on the addon side--i.e., EventEmitter-esque.

Also removed its eval() function since it was only being used internally by e10s.js.

The addon process is now generally referred to as 'addon' by e10s-adapters now rather than 'process', so boilerplate for e10s adapters is now:

  if (this.chrome) {
    /* We're being evaluated in the addon process.
     * Addon-side code exporting the module interface that
     * proxies to chrome goes here. */
  } else exports.register = function(addon) {
    /* We're being called in the chrome process.
     * Register listeners on the addon process here. */
  }
  • Loading branch information
toolness committed Dec 13, 2010
1 parent 45f7cb2 commit aec3c5f
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 50 deletions.
53 changes: 26 additions & 27 deletions packages/api-utils/lib/e10s.js
Expand Up @@ -43,34 +43,24 @@ let errors = require("errors");
let jetpackService = Cc["@mozilla.org/jetpack/service;1"]
.getService(Ci.nsIJetpackService);

function JetpackProcess() {
var process = jetpackService.createJetpack();

this.registerReceiver = function(name, cb) {
process.registerReceiver(name, errors.catchAndLog(cb));
function AddonProcess(jetpack) {
this.on = function(name, cb) {
jetpack.registerReceiver(name, errors.catchAndLog(cb));
};

this.sendMessage = function() {
return process.sendMessage.apply(this, arguments);
this.send = function() {
return jetpack.sendMessage.apply(this, arguments);
};

this.createHandle = function() {
return process.createHandle();
return jetpack.createHandle();
};

this.destroy = function() {
try {
process.destroy();
jetpack.destroy();
} catch (e if e.result == Cr.NS_ERROR_NOT_INITIALIZED) {}
};

this.eval = function(urlObj) {
var filename = url.toFilename(urlObj);
// The try ... catch is a workaround for bug 589308.
process.evalScript('//@line 1 "' + filename + '"\n' +
"try { " + file.read(filename) + " } catch (e) { " +
"sendMessage('core:exception', e); }");
};
}

function makeScriptFrom(fs, moduleURL) {
Expand All @@ -87,7 +77,8 @@ exports.createProcess = function createProcess(options) {
if (!options)
options = {};

var process = new JetpackProcess();
var jetpack = jetpackService.createJetpack();
var process = new AddonProcess(jetpack);
var registeredModules = {};

var console = options.console || defaultConsole;
Expand All @@ -105,7 +96,7 @@ exports.createProcess = function createProcess(options) {
// communicate with us.

['log', 'debug', 'info', 'warn', 'error'].forEach(function(method) {
process.registerReceiver("console:" + method, function(name, args) {
process.on("console:" + method, function(name, args) {
console[method].apply(console, args);
});
});
Expand All @@ -119,29 +110,29 @@ exports.createProcess = function createProcess(options) {
};
}

process.registerReceiver("quit", function(name, status) {
process.on("quit", function(name, status) {
if (options.quit)
options.quit(status);
});

process.registerReceiver("console:trace", function(name, exception) {
process.on("console:trace", function(name, exception) {
var traceback = require("traceback");
var stack = traceback.fromException(remoteException(exception));
console.log(traceback.format(stack.slice(0, -2)));
});

process.registerReceiver("console:exception", function(name, exception) {
process.on("console:exception", function(name, exception) {
console.exception(remoteException(exception));
});

process.registerReceiver(
process.on(
"core:exception",
function(name, exception) {
console.log("An exception occurred in the child Jetpack process.");
console.exception(remoteException(exception));
});

process.registerReceiver(
process.on(
"require",
function(name, base, path) {
var loader = options.loader || require("parent-loader");
Expand Down Expand Up @@ -215,9 +206,17 @@ exports.createProcess = function createProcess(options) {
}
});

process.eval(require("self").data.url("bootstrap-remote-process.js"));
process.sendMessage("addInjectedSandboxScript",
require("cuddlefish").es5code);
var bootURL = require("self").data.url("bootstrap-remote-process.js");
var bootFilename = url.toFilename(bootURL);
var bootJS = file.read(bootFilename);

// The try ... catch is a workaround for bug 589308.
jetpack.evalScript('//@line 1 "' + bootFilename + '"\n' +
"try { " + bootJS + " } catch (e) { " +
"sendMessage('core:exception', e); }");

process.send("addInjectedSandboxScript",
require("cuddlefish").es5code);

return process;
};
14 changes: 7 additions & 7 deletions packages/api-utils/lib/find-tests-e10s-adapter.js
Expand Up @@ -75,8 +75,8 @@ if (this.chrome) {
chrome.send("testsFound", tests, options.finderHandle);
}
} else {
exports.register = function(process) {
process.registerReceiver("testDone", function(name, remoteTest) {
exports.register = function(addon) {
addon.on("testDone", function(name, remoteTest) {
var runner = remoteTest.testHandle.runner;
runner.passed += remoteTest.passed;
runner.failed += remoteTest.failed;
Expand All @@ -85,21 +85,21 @@ if (this.chrome) {
runner.test.errors = remoteTest.errors;
runner.done();
});
process.registerReceiver("testPass", function(name, remoteTest, msg) {
addon.on("testPass", function(name, remoteTest, msg) {
remoteTest.testHandle.runner.pass(msg);
});
process.registerReceiver("testFail", function(name, remoteTest, msg) {
addon.on("testFail", function(name, remoteTest, msg) {
remoteTest.testHandle.runner.fail(msg);
});
process.registerReceiver("testsFound", function(name, remoteTests,
finderHandle) {
addon.on("testsFound", function(name, remoteTests,
finderHandle) {
var tests = [];
remoteTests.forEach(function(remoteTest) {
tests.push({
testFunction: function(runner) {
remoteTest.testHandle.runner = runner;
runner.waitUntilDone();
process.sendMessage("runTest", remoteTest);
addon.send("runTest", remoteTest);
},
name: remoteTest.name
});
Expand Down
8 changes: 4 additions & 4 deletions packages/api-utils/lib/self-e10s-adapter.js
Expand Up @@ -78,17 +78,17 @@ if (this.chrome) {
throw new Error("No data for package " + pkgName);
}

exports.register = function(process) {
process.registerReceiver("self:id", function(name) {
exports.register = function(addon) {
addon.on("self:id", function(name) {
return id;
});
process.registerReceiver("self:load", function(name, path, stack) {
addon.on("self:load", function(name, path, stack) {
let data_url = getURL(path, stack, 1);
let fn = url.toFilename(data_url);
let data = file.read(fn);
return data;
});
process.registerReceiver("self:url", function(name, path, stack) {
addon.on("self:url", function(name, path, stack) {
return getURL(path, stack, 1);
});
}
Expand Down
8 changes: 4 additions & 4 deletions packages/api-utils/lib/timer-e10s-adapter.js
Expand Up @@ -58,15 +58,15 @@ if (this.chrome) {
cb(); // yay race conditions
});
} else {
exports.register = function(process) {
exports.register = function(addon) {
var timer = require("timer");
process.registerReceiver("setTimeout", function(name, ms) {
addon.on("setTimeout", function(name, ms) {
var id = timer.setTimeout(function() {
process.sendMessage("onTimeout", id);
addon.send("onTimeout", id);
}, ms);
return id;
});
process.registerReceiver("clearTimeout", function(name, id) {
addon.on("clearTimeout", function(name, id) {
timer.clearTimeout(id);
});
};
Expand Down
2 changes: 1 addition & 1 deletion packages/api-utils/lib/unit-test-finder.js
Expand Up @@ -102,7 +102,7 @@ TestFinder.prototype = {
finderHandle.onTestsFound = function(testsFound) {
cb(tests.concat(testsFound));
};
process.sendMessage("startMain", "find-tests", {
process.send("startMain", "find-tests", {
suites: remoteSuites,
finderHandle: finderHandle
});
Expand Down
Expand Up @@ -3,8 +3,8 @@ if (this.chrome) {
return chrome.call("superpower", a, b);
};
} else {
exports.register = function(process) {
process.registerReceiver("superpower", function(name, a, b) {
exports.register = function(addon) {
addon.on("superpower", function(name, a, b) {
return "hello " + a + " " + b;
});
};
Expand Down
Expand Up @@ -5,8 +5,8 @@ if (this.chrome) {
} else {
var superpower = require("e10s-samples/superpower");

exports.register = function(process) {
process.registerReceiver("superpower", function(name, a, b) {
exports.register = function(addon) {
addon.on("superpower", function(name, a, b) {
return superpower.use(a, b);
});
};
Expand Down
6 changes: 3 additions & 3 deletions packages/api-utils/tests/test-e10s.js
Expand Up @@ -59,7 +59,7 @@ function makeConsoleTest(options) {
test.done();
}
});
process.sendMessage("startMain", options.main);
process.send("startMain", options.main);
test.waitUntilDone();
};
}
Expand Down Expand Up @@ -223,12 +223,12 @@ exports.testCommonJSCompliance = function(test) {
};
}

process.sendMessage("addInjectedSandboxScript", {
process.send("addInjectedSandboxScript", {
filename: "<string>",
contents: "(" + uneval(injectSysPrint) + ")(this);"
});

process.sendMessage("startMain", "program");
process.send("startMain", "program");
}

function runNextComplianceTest() {
Expand Down

0 comments on commit aec3c5f

Please sign in to comment.