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
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -3900,22 +3900,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;
}
@@ -4311,16 +4314,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();