Bug 1380267: Fix shutdown blocker corner cases. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 12 Jul 2017 16:58:15 -0700
changeset 607881 48ea9216e1beefd8c4e9dc68c2fe4ff560bf7403
parent 607880 9c0a02ed5bad838685ee03e245df89b608013fbb
child 637173 fcaf78174d5ec2078dfa026b50b1a9a248de5c92
push id68136
push usermaglione.k@gmail.com
push dateWed, 12 Jul 2017 23:58:34 +0000
reviewersaswan
bugs1380267
milestone56.0a1
Bug 1380267: Fix shutdown blocker corner cases. r?aswan MozReview-Commit-ID: 8Dgvnm96hgT
toolkit/components/extensions/Extension.jsm
toolkit/components/extensions/extension-process-script.js
--- 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");