Bug 1362378: Restore rather than reload pending background tabs when reloading all tabs. r?dao draft
authorKris Maglione <maglione.k@gmail.com>
Sun, 28 May 2017 15:10:43 -0700
changeset 585774 71f3822474169d737bb33c15b3c764c946cf0ac9
parent 585773 5c78702d43ddccee9527230f59e0e0960b188aef
child 630793 cbe52ad1814e98296f329e4128dc1605abdcb03b
push id61188
push usermaglione.k@gmail.com
push dateSun, 28 May 2017 22:11:50 +0000
reviewersdao
bugs1362378
milestone55.0a1
Bug 1362378: Restore rather than reload pending background tabs when reloading all tabs. r?dao MozReview-Commit-ID: 3UgSSdBHhpK
browser/base/content/tabbrowser.xml
browser/components/sessionstore/SessionStore.jsm
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -3324,38 +3324,44 @@
             }
           ]]>
         </body>
       </method>
 
       <method name="reloadAllTabs">
         <body>
           <![CDATA[
-            let tabs = this.visibleTabs;
-            let l = tabs.length;
-            for (var i = 0; i < l; i++) {
+            for (let tab of this.visibleTabs) {
               try {
-                this.getBrowserForTab(tabs[i]).reload();
+                this.reloadTab(tab, true);
               } catch (e) {
                 // ignore failure to reload so others will be reloaded
+                Cu.reportError(e);
               }
             }
           ]]>
         </body>
       </method>
 
       <method name="reloadTab">
         <parameter name="aTab"/>
+        <parameter name="aKeepTemporaryPermissions"/>
         <body>
           <![CDATA[
-            let browser = this.getBrowserForTab(aTab);
-            // Reset temporary permissions on the current tab. This is done here
-            // because we only want to reset permissions on user reload.
-            SitePermissions.clearTemporaryPermissions(browser);
-            browser.reload();
+            if (!aKeepTemporaryPermissions) {
+              // Reset temporary permissions on the current tab. This is done here
+              // because we only want to reset permissions on user reload.
+              SitePermissions.clearTemporaryPermissions(aTab.linkedBrowser);
+            }
+            if (aTab.hasAttribute("pending")) {
+              this._insertBrowser(aTab);
+              SessionStore.restoreTabContent(aTab);
+            } else {
+              aTab.linkedBrowser.reload();
+            }
           ]]>
         </body>
       </method>
 
       <method name="addProgressListener">
         <parameter name="aListener"/>
         <body>
           <![CDATA[
--- a/browser/components/sessionstore/SessionStore.jsm
+++ b/browser/components/sessionstore/SessionStore.jsm
@@ -356,16 +356,20 @@ this.SessionStore = {
   restoreLastSession: function ss_restoreLastSession() {
     SessionStoreInternal.restoreLastSession();
   },
 
   getCurrentState(aUpdateAll) {
     return SessionStoreInternal.getCurrentState(aUpdateAll);
   },
 
+  restoreTabContent(aTab) {
+    return SessionStoreInternal.restoreTabContent(aTab);
+  },
+
   reviveCrashedTab(aTab) {
     return SessionStoreInternal.reviveCrashedTab(aTab);
   },
 
   reviveAllCrashedTabs() {
     return SessionStoreInternal.reviveAllCrashedTabs();
   },