Bug 1349501 - Let _beginRemoveTab skip the whole permitUnload block for tabs that don't have content attached draft
authorDão Gottwald <dao@mozilla.com>
Wed, 22 Mar 2017 11:09:04 +0100
changeset 502778 a6db6b44b575ebbcd650a19b2086384895862a62
parent 501879 5fe5dcf1c10a4523ba3f0a20295551462c2dae11
child 550261 47062cd85bc56a6f84ee610d4357cd4ade904413
push id50397
push userdgottwald@mozilla.com
push dateWed, 22 Mar 2017 10:11:51 +0000
bugs1349501
milestone55.0a1
Bug 1349501 - Let _beginRemoveTab skip the whole permitUnload block for tabs that don't have content attached MozReview-Commit-ID: GQvX8pUxDen
browser/base/content/tabbrowser.xml
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -2625,23 +2625,25 @@
         <body>
           <![CDATA[
             if (aTab.closing ||
                 this._windowIsClosing)
               return false;
 
             var browser = this.getBrowserForTab(aTab);
 
-            if (!aTab._pendingPermitUnload && !aAdoptedByTab && !aSkipPermitUnload) {
+            if (!aTab._pendingPermitUnload &&
+                !aSkipPermitUnload &&
+                aTab.linkedPanel &&
+                !aAdoptedByTab) {
               // We need to block while calling permitUnload() because it
               // processes the event queue and may lead to another removeTab()
               // call before permitUnload() returns.
               aTab._pendingPermitUnload = true;
-              let {permitUnload, timedOut} = aTab.linkedPanel ?
-                  browser.permitUnload() : {permitUnload: true, timedOut: false};
+              let {permitUnload, timedOut} = browser.permitUnload();
               delete aTab._pendingPermitUnload;
               // If we were closed during onbeforeunload, we return false now
               // so we don't (try to) close the same tab again. Of course, we
               // also stop if the unload was cancelled by the user:
               if (aTab.closing || (!timedOut && !permitUnload)) {
                 // NB: deliberately keep the _closedDuringPermitUnload set to
                 // true so we keep exiting early in case of multiple calls.
                 return false;