Bug 1380267: Fix shutdown blocker corner cases. r?aswan
MozReview-Commit-ID: 8Dgvnm96hgT
--- a/toolkit/components/extensions/Extension.jsm
+++ b/toolkit/components/extensions/Extension.jsm
@@ -1196,16 +1196,20 @@ this.Extension = class extends Extension
async shutdown(reason) {
let promise = this._shutdown(reason);
AsyncShutdown.profileChangeTeardown.addBlocker(
`Extension Shutdown: ${this.id} (${this.manifest && this.name})`,
promise.catch(() => {}));
+ if (shutdownPromises.has(this.id)) {
+ await shutdownPromises.get(this.id);
+ }
+
let cleanup = () => {
shutdownPromises.delete(this.id);
};
shutdownPromises.set(this.id, promise.then(cleanup, cleanup));
return Promise.resolve(promise);
}
--- a/toolkit/components/extensions/extension-process-script.js
+++ b/toolkit/components/extensions/extension-process-script.js
@@ -338,22 +338,24 @@ ExtensionManager = {
Services.cpmm.sendAsyncMessage("Extension:StartupComplete");
break;
}
case "Extension:Shutdown": {
let policy = WebExtensionPolicy.getByID(data.id);
- if (extensions.has(policy)) {
- extensions.get(policy).shutdown();
- }
+ if (policy) {
+ if (extensions.has(policy)) {
+ extensions.get(policy).shutdown();
+ }
- if (isContentProcess) {
- policy.active = false;
+ if (isContentProcess) {
+ policy.active = false;
+ }
}
Services.cpmm.sendAsyncMessage("Extension:ShutdownComplete");
break;
}
case "Extension:FlushJarCache": {
ExtensionUtils.flushJarCache(data.path);
Services.cpmm.sendAsyncMessage("Extension:FlushJarCacheComplete");