mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 12:51:09 +02:00
- Add `envType` to BaseContext. - Pass an explicit envType to all `registerSchemaAPI` invocations. - The factories passed to `registerSchemaAPI` will be split up later, so that content scripts (`content_child`) and addon pages can share common implementations. - The factories that implement the addon API will also be split up, to separate code running in the main process (`addon_parent`) from code running in a child process (`addon_child`). - Remove the use of a hardcoded list of `namespaces` from ProxyContext. Now `envType` is used to specify whether an API should be activated. MozReview-Commit-ID: Jiff8HIwG92 --HG-- extra : rebase_source : 946a3c0009a4e3223c2d10044b3099a94c845394
80 lines
2 KiB
JavaScript
80 lines
2 KiB
JavaScript
"use strict";
|
|
|
|
Components.utils.import("resource://gre/modules/ExtensionUtils.jsm");
|
|
var {
|
|
EventManager,
|
|
} = ExtensionUtils;
|
|
|
|
// WeakMap[Extension -> Set(callback)]
|
|
var messageHandlers = new WeakMap();
|
|
|
|
/* eslint-disable mozilla/balanced-listeners */
|
|
extensions.on("startup", (type, extension) => {
|
|
messageHandlers.set(extension, new Set());
|
|
});
|
|
|
|
extensions.on("shutdown", (type, extension) => {
|
|
messageHandlers.delete(extension);
|
|
});
|
|
|
|
extensions.on("test-message", (type, extension, ...args) => {
|
|
let handlers = messageHandlers.get(extension);
|
|
for (let handler of handlers) {
|
|
handler(...args);
|
|
}
|
|
});
|
|
/* eslint-enable mozilla/balanced-listeners */
|
|
|
|
function testApiFactory(context) {
|
|
let {extension} = context;
|
|
return {
|
|
test: {
|
|
sendMessage: function(...args) {
|
|
extension.emit("test-message", ...args);
|
|
},
|
|
|
|
notifyPass: function(msg) {
|
|
extension.emit("test-done", true, msg);
|
|
},
|
|
|
|
notifyFail: function(msg) {
|
|
extension.emit("test-done", false, msg);
|
|
},
|
|
|
|
log: function(msg) {
|
|
extension.emit("test-log", true, msg);
|
|
},
|
|
|
|
fail: function(msg) {
|
|
extension.emit("test-result", false, msg);
|
|
},
|
|
|
|
succeed: function(msg) {
|
|
extension.emit("test-result", true, msg);
|
|
},
|
|
|
|
assertTrue: function(value, msg) {
|
|
extension.emit("test-result", Boolean(value), msg);
|
|
},
|
|
|
|
assertFalse: function(value, msg) {
|
|
extension.emit("test-result", !value, msg);
|
|
},
|
|
|
|
assertEq: function(expected, actual, msg) {
|
|
extension.emit("test-eq", expected === actual, msg, String(expected), String(actual));
|
|
},
|
|
|
|
onMessage: new EventManager(context, "test.onMessage", fire => {
|
|
let handlers = messageHandlers.get(extension);
|
|
handlers.add(fire);
|
|
|
|
return () => {
|
|
handlers.delete(fire);
|
|
};
|
|
}).api(),
|
|
},
|
|
};
|
|
}
|
|
extensions.registerSchemaAPI("test", "addon_parent", testApiFactory);
|
|
extensions.registerSchemaAPI("test", "content_parent", testApiFactory);
|