Bug 1336763 - If browser.permitUnload times out in CanCloseWindow, make sure to check the rest of the browsers belonging to other processes before returning a result. r?dao draft
authorMike Conley <mconley@mozilla.com>
Wed, 19 Apr 2017 14:29:42 -0400
changeset 570384 830afcae08b9cc5efc7364b073664e716ea342b0
parent 570383 9d72e1703e33bdafaa4f3c81d1cd65cef3c71ee8
child 570385 7e5b695fbd4578d3a74888ac121c63d8841cf58b
push id56469
push usermconley@mozilla.com
push dateFri, 28 Apr 2017 19:52:42 +0000
reviewersdao
bugs1336763
milestone55.0a1
Bug 1336763 - If browser.permitUnload times out in CanCloseWindow, make sure to check the rest of the browsers belonging to other processes before returning a result. r?dao MozReview-Commit-ID: D59PVfsbDV0
browser/base/content/browser.js
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6419,21 +6419,32 @@ var IndexedDBPromptHelper = {
 
 function CanCloseWindow() {
   // Avoid redundant calls to canClose from showing multiple
   // PermitUnload dialogs.
   if (Services.startup.shuttingDown || window.skipNextCanClose) {
     return true;
   }
 
+  let timedOutProcesses = new WeakSet();
+
   for (let browser of gBrowser.browsers) {
+    let pmm = browser.messageManager.processMessageManager;
+
+    if (timedOutProcesses.has(pmm)) {
+      continue;
+    }
+
     let {permitUnload, timedOut} = browser.permitUnload();
+
     if (timedOut) {
-      return true;
-    }
+      timedOutProcesses.add(pmm);
+      continue;
+    }
+
     if (!permitUnload) {
       return false;
     }
   }
   return true;
 }
 
 function WindowIsClosing() {