Bug 1342927 - Async tab switcher updateDisplay() should only make the requested tab blank if it's in the loading state. r=billm
authorMike Conley <mconley@mozilla.com>
Sun, 05 Mar 2017 13:27:35 -0500
changeset 494390 155331c457fd98222c374336dbe817b0249a537c
parent 494389 1fb3d0b0ec354fca233efff48e72c34e1849fe98
child 494391 828486abb626e719d99ecca788ed426e72cf1748
push id48023
push userjwwang@mozilla.com
push dateTue, 07 Mar 2017 02:32:15 +0000
reviewersbillm
bugs1342927
milestone54.0a1
Bug 1342927 - Async tab switcher updateDisplay() should only make the requested tab blank if it's in the loading state. r=billm MozReview-Commit-ID: Al6HwjxlETy
browser/base/content/tabbrowser.xml
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -3899,22 +3899,25 @@
                 cancelable: true
               });
               this.tabbrowser.dispatchEvent(event);
             },
 
             // This function is called after all the main state changes to
             // make sure we display the right tab.
             updateDisplay() {
-              let shouldBeBlank = this.pendingTabChild.has(
-                this.requestedTab.linkedBrowser);
+              let requestedTabState = this.getTabState(this.requestedTab);
+
+              let shouldBeBlank =
+                this.pendingTabChild.has(this.requestedTab.linkedBrowser) &&
+                requestedTabState == this.STATE_LOADING;
 
               // Figure out which tab we actually want visible right now.
               let showTab = null;
-              if (this.getTabState(this.requestedTab) != this.STATE_LOADED &&
+              if (requestedTabState != this.STATE_LOADED &&
                   this.lastVisibleTab && this.loadTimer && !shouldBeBlank) {
                 // If we can't show the requestedTab, and lastVisibleTab is
                 // available, show it.
                 showTab = this.lastVisibleTab;
               } else {
                 // Show the requested tab. If it's not available, we'll show the spinner or a blank tab.
                 showTab = this.requestedTab;
               }
@@ -4310,16 +4313,18 @@
               this.setTabState(tab, this.STATE_LOADING);
             },
 
             // The tab for this browser isn't currently set
             // up in the content process, so we have no chance
             // of painting it right away. We'll paint a blank
             // tab instead.
             onTabChildNotReady(browser) {
+              this.assert(browser.isRemoteBrowser);
+
               let tab = this.tabbrowser.getTabForBrowser(browser);
 
               this.assert(this.getTabState(tab) == this.STATE_LOADING);
 
               this.logState(`onTabChildNotReady(${tab._tPos})`);
               this.pendingTabChild.add(browser);
               this.maybeFinishTabSwitch();