Bug 1325158: Part 4 - Fix cases where extension startup listener is not removed. r=aswan

MozReview-Commit-ID: FIhGYSDoOhW

--HG--
extra : rebase_source : baa8c9f409da54c06cea5fac4dfa6462e2a06697
This commit is contained in:
Kris Maglione 2016-12-24 18:48:56 -08:00
parent 9822075cb5
commit b4d3f79ec3

View File

@ -544,17 +544,13 @@ SpecialPowersObserverAPI.prototype = {
}
case "SPStartupExtension": {
let {ExtensionData, Management} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
let {ExtensionData} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
let id = aMessage.data.id;
let extension = this._extensions.get(id);
let startupListener = (msg, ext) => {
if (ext == extension) {
this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionSetId", args: [extension.id]});
Management.off("startup", startupListener);
}
};
Management.on("startup", startupListener);
extension.on("startup", () => {
this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionSetId", args: [extension.id]});
});
// Make sure the extension passes the packaging checks when
// they're run on a bare archive rather than a running instance,
@ -579,7 +575,6 @@ SpecialPowersObserverAPI.prototype = {
this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionStarted", args: []});
}).catch(e => {
dump(`Extension startup failed: ${e}\n${e.stack}`);
Management.off("startup", startupListener);
this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionFailed", args: []});
});
return undefined;