CLOSED TREE Backed out changeset 2e602689376d (bug 1270357) Backed out changeset e1979d928c7c (bug 1270357) Backed out changeset e0f9b54febc8 (bug 1270357)
101 lines
2.9 KiB
JavaScript
101 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
|
|
|
Cu.import("resource://gre/modules/ExtensionUtils.jsm");
|
|
var {
|
|
EventManager,
|
|
ignoreEvent,
|
|
} = ExtensionUtils;
|
|
|
|
extensions.registerSchemaAPI("runtime", null, (extension, context) => {
|
|
return {
|
|
runtime: {
|
|
onStartup: new EventManager(context, "runtime.onStartup", fire => {
|
|
extension.onStartup = fire;
|
|
return () => {
|
|
extension.onStartup = null;
|
|
};
|
|
}).api(),
|
|
|
|
onInstalled: ignoreEvent(context, "runtime.onInstalled"),
|
|
|
|
onMessage: context.messenger.onMessage("runtime.onMessage"),
|
|
|
|
onConnect: context.messenger.onConnect("runtime.onConnect"),
|
|
|
|
connect: function(extensionId, connectInfo) {
|
|
let name = connectInfo !== null && connectInfo.name || "";
|
|
let recipient = extensionId !== null ? {extensionId} : {extensionId: extension.id};
|
|
|
|
return context.messenger.connect(Services.cpmm, name, recipient);
|
|
},
|
|
|
|
sendMessage: function(...args) {
|
|
let options; // eslint-disable-line no-unused-vars
|
|
let extensionId, message, responseCallback;
|
|
if (args.length == 1) {
|
|
message = args[0];
|
|
} else if (args.length == 2) {
|
|
[message, responseCallback] = args;
|
|
} else {
|
|
[extensionId, message, options, responseCallback] = args;
|
|
}
|
|
let recipient = {extensionId: extensionId ? extensionId : extension.id};
|
|
|
|
if (!GlobalManager.extensionMap.has(recipient.extensionId)) {
|
|
return context.wrapPromise(Promise.reject({message: "Invalid extension ID"}),
|
|
responseCallback);
|
|
}
|
|
return context.messenger.sendMessage(Services.cpmm, message, recipient, responseCallback);
|
|
},
|
|
|
|
get lastError() {
|
|
return context.lastError;
|
|
},
|
|
|
|
getManifest() {
|
|
return Cu.cloneInto(extension.manifest, context.cloneScope);
|
|
},
|
|
|
|
id: extension.id,
|
|
|
|
getURL: function(url) {
|
|
return extension.baseURI.resolve(url);
|
|
},
|
|
|
|
getPlatformInfo: function() {
|
|
return Promise.resolve(ExtensionUtils.PlatformInfo);
|
|
},
|
|
|
|
openOptionsPage: function() {
|
|
if (!extension.manifest.options_ui) {
|
|
return Promise.reject({message: "No `options_ui` declared"});
|
|
}
|
|
|
|
return openOptionsPage(extension).then(() => {});
|
|
},
|
|
|
|
setUninstallURL: function(url) {
|
|
if (url.length == 0) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
let uri;
|
|
try {
|
|
uri = NetUtil.newURI(url);
|
|
} catch (e) {
|
|
return Promise.reject({message: `Invalid URL: ${JSON.stringify(url)}`});
|
|
}
|
|
|
|
if (uri.scheme != "http" && uri.scheme != "https") {
|
|
return Promise.reject({message: "url must have the scheme http or https"});
|
|
}
|
|
|
|
extension.uninstallURL = url;
|
|
return Promise.resolve();
|
|
},
|
|
},
|
|
};
|
|
});
|