Add reason
parameter for plugin bootstrap methods
As documented on https://wiki.mozilla.org/Extension_Manager:Bootstrapped_Extensions And fix method names for `install()` and `uninstall()`
This commit is contained in:
parent
51f9150410
commit
53a09bb912
1 changed files with 24 additions and 19 deletions
|
@ -28,32 +28,34 @@ Zotero.Plugins = new function () {
|
||||||
var { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
|
var { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
|
||||||
var scopes = new Map();
|
var scopes = new Map();
|
||||||
|
|
||||||
|
const REASONS = {
|
||||||
|
APP_STARTUP: 1,
|
||||||
|
APP_SHUTDOWN: 2,
|
||||||
|
ADDON_ENABLE: 3,
|
||||||
|
ADDON_DISABLE: 4,
|
||||||
|
ADDON_INSTALL: 5,
|
||||||
|
ADDON_UNINSTALL: 6,
|
||||||
|
ADDON_UPGRADE: 7, // TODO
|
||||||
|
ADDON_DOWNGRADE: 8 // TODO
|
||||||
|
};
|
||||||
|
|
||||||
this.init = async function () {
|
this.init = async function () {
|
||||||
this._addonObserver.init();
|
this._addonObserver.init();
|
||||||
|
|
||||||
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
||||||
for (let addon of addons) {
|
for (let addon of addons) {
|
||||||
await _callMethod(addon, 'startup');
|
await _callMethod(addon, 'startup', REASONS.APP_STARTUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
Zotero.addShutdownListener(async () => {
|
Zotero.addShutdownListener(async () => {
|
||||||
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
||||||
for (let addon of addons) {
|
for (let addon of addons) {
|
||||||
await _callMethod(addon, 'shutdown');
|
await _callMethod(addon, 'shutdown', REASONS.APP_SHUTDOWN);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.shutDown = async function () {
|
|
||||||
var { addons } = await AddonManager.getActiveAddons(["extension"]);
|
|
||||||
for (let addon of addons) {
|
|
||||||
await _callMethod(addon, 'shutdown');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapted from loadBootstrapScope() in Firefox 60 ESR
|
* Adapted from loadBootstrapScope() in Firefox 60 ESR
|
||||||
*
|
*
|
||||||
|
@ -82,7 +84,10 @@ Zotero.Plugins = new function () {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Object.assign(scope, { Services, Worker, Zotero });
|
for (let name in REASONS) {
|
||||||
|
scope[name] = REASONS[name];
|
||||||
|
}
|
||||||
|
Object.assign(scope, { Services, Worker, ChromeWorker, Zotero });
|
||||||
scopes.set(addon.id, scope);
|
scopes.set(addon.id, scope);
|
||||||
|
|
||||||
var uri = addon.getResourceURI().spec + 'bootstrap.js';
|
var uri = addon.getResourceURI().spec + 'bootstrap.js';
|
||||||
|
@ -95,7 +100,7 @@ Zotero.Plugins = new function () {
|
||||||
*
|
*
|
||||||
* https://searchfox.org/mozilla-esr60/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm#4343
|
* https://searchfox.org/mozilla-esr60/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm#4343
|
||||||
*/
|
*/
|
||||||
async function _callMethod(addon, method) {
|
async function _callMethod(addon, method, reason) {
|
||||||
try {
|
try {
|
||||||
let id = addon.id;
|
let id = addon.id;
|
||||||
Zotero.debug(`Calling bootstrap method '${method}' for plugin ${id} version ${addon.version}`);
|
Zotero.debug(`Calling bootstrap method '${method}' for plugin ${id} version ${addon.version}`);
|
||||||
|
@ -120,9 +125,8 @@ Zotero.Plugins = new function () {
|
||||||
let params = {
|
let params = {
|
||||||
id: addon.id,
|
id: addon.id,
|
||||||
version: addon.version,
|
version: addon.version,
|
||||||
resourceURI: addon.getResourceURI().spec,
|
rootURI: addon.getResourceURI().spec
|
||||||
};
|
};
|
||||||
let reason = '';
|
|
||||||
let result;
|
let result;
|
||||||
try {
|
try {
|
||||||
result = func.call(scope, params, reason);
|
result = func.call(scope, params, reason);
|
||||||
|
@ -174,7 +178,8 @@ Zotero.Plugins = new function () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Zotero.debug("Installed plugin " + addon.id);
|
Zotero.debug("Installed plugin " + addon.id);
|
||||||
await _callMethod(addon, 'installed');
|
await _callMethod(addon, 'install');
|
||||||
|
await _callMethod(addon, 'startup', REASONS.ADDON_INSTALL);
|
||||||
},
|
},
|
||||||
|
|
||||||
async onEnabling(addon) {
|
async onEnabling(addon) {
|
||||||
|
@ -182,7 +187,7 @@ Zotero.Plugins = new function () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Zotero.debug("Enabling plugin " + addon.id);
|
Zotero.debug("Enabling plugin " + addon.id);
|
||||||
await _callMethod(addon, 'startup');
|
await _callMethod(addon, 'startup', REASONS.ADDON_ENABLE);
|
||||||
},
|
},
|
||||||
|
|
||||||
async onDisabled(addon) {
|
async onDisabled(addon) {
|
||||||
|
@ -190,7 +195,7 @@ Zotero.Plugins = new function () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Zotero.debug("Disabling plugin " + addon.id);
|
Zotero.debug("Disabling plugin " + addon.id);
|
||||||
await _callMethod(addon, 'shutdown');
|
await _callMethod(addon, 'shutdown', REASONS.ADDON_DISABLE);
|
||||||
},
|
},
|
||||||
|
|
||||||
async onUninstalling(addon) {
|
async onUninstalling(addon) {
|
||||||
|
@ -199,8 +204,8 @@ Zotero.Plugins = new function () {
|
||||||
|
|
||||||
async onUninstalled(addon) {
|
async onUninstalled(addon) {
|
||||||
Zotero.debug("Uninstalled plugin " + addon.id);
|
Zotero.debug("Uninstalled plugin " + addon.id);
|
||||||
await _callMethod(addon, 'shutdown');
|
await _callMethod(addon, 'shutdown', REASONS.ADDON_UNINSTALL);
|
||||||
await _callMethod(addon, 'uninstalled');
|
await _callMethod(addon, 'uninstall');
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue