mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 701377 - setTabState() always unhides the tab; r=zpao
This commit is contained in:
parent
7ae3f10617
commit
18a864805f
@ -2735,6 +2735,8 @@ SessionStoreService.prototype = {
|
||||
if (aOverwriteTabs && tabbrowser.selectedTab._tPos >= newTabCount)
|
||||
tabbrowser.moveTabTo(tabbrowser.selectedTab, newTabCount - 1);
|
||||
|
||||
let numVisibleTabs = 0;
|
||||
|
||||
for (var t = 0; t < newTabCount; t++) {
|
||||
tabs.push(t < openTabCount ?
|
||||
tabbrowser.tabs[t] :
|
||||
@ -2747,10 +2749,19 @@ SessionStoreService.prototype = {
|
||||
if (winData.tabs[t].pinned)
|
||||
tabbrowser.pinTab(tabs[t]);
|
||||
|
||||
if (winData.tabs[t].hidden)
|
||||
if (winData.tabs[t].hidden) {
|
||||
tabbrowser.hideTab(tabs[t]);
|
||||
else
|
||||
}
|
||||
else {
|
||||
tabbrowser.showTab(tabs[t]);
|
||||
numVisibleTabs++;
|
||||
}
|
||||
}
|
||||
|
||||
// if all tabs to be restored are hidden, make the first one visible
|
||||
if (!numVisibleTabs && winData.tabs.length) {
|
||||
winData.tabs[0].hidden = false;
|
||||
tabbrowser.showTab(tabs[0]);
|
||||
}
|
||||
|
||||
// If overwriting tabs, we want to reset each tab's "restoring" state. Since
|
||||
@ -2880,10 +2891,7 @@ SessionStoreService.prototype = {
|
||||
|
||||
let unhiddenTabs = aTabData.filter(function (aData) !aData.hidden).length;
|
||||
|
||||
// if all tabs to be restored are hidden, make the first one visible
|
||||
if (unhiddenTabs == 0) {
|
||||
aTabData[0].hidden = false;
|
||||
} else if (aTabs.length > 1) {
|
||||
if (unhiddenTabs && aTabs.length > 1) {
|
||||
// Load hidden tabs last, by pushing them to the end of the list
|
||||
for (let t = 0, tabsToReorder = aTabs.length - unhiddenTabs; tabsToReorder > 0; ) {
|
||||
if (aTabData[t].hidden) {
|
||||
|
@ -159,6 +159,7 @@ _BROWSER_TEST_FILES = \
|
||||
browser_687710.js \
|
||||
browser_687710_2.js \
|
||||
browser_694378.js \
|
||||
browser_701377.js \
|
||||
browser_705597.js \
|
||||
browser_707862.js \
|
||||
browser_739805.js \
|
||||
|
49
browser/components/sessionstore/test/browser_701377.js
Normal file
49
browser/components/sessionstore/test/browser_701377.js
Normal file
@ -0,0 +1,49 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
let state = {windows:[{tabs:[
|
||||
{entries:[{url:"http://example.com#1"}]},
|
||||
{entries:[{url:"http://example.com#2"}], hidden: true}
|
||||
]}]};
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
newWindowWithState(state, function (aWindow) {
|
||||
let tab = aWindow.gBrowser.tabs[1];
|
||||
ok(tab.hidden, "the second tab is hidden");
|
||||
|
||||
let tabShown = false;
|
||||
let tabShowCallback = function () tabShown = true;
|
||||
tab.addEventListener("TabShow", tabShowCallback, false);
|
||||
|
||||
let tabState = ss.getTabState(tab);
|
||||
ss.setTabState(tab, tabState);
|
||||
|
||||
tab.removeEventListener("TabShow", tabShowCallback, false);
|
||||
ok(tab.hidden && !tabShown, "tab remains hidden");
|
||||
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
// ----------
|
||||
function whenWindowLoaded(aWindow, aCallback) {
|
||||
aWindow.addEventListener("load", function onLoad() {
|
||||
aWindow.removeEventListener("load", onLoad, false);
|
||||
executeSoon(aCallback);
|
||||
}, false);
|
||||
}
|
||||
|
||||
// ----------
|
||||
function newWindowWithState(aState, aCallback) {
|
||||
let opts = "chrome,all,dialog=no,height=800,width=800";
|
||||
let win = window.openDialog(getBrowserURL(), "_blank", opts);
|
||||
|
||||
registerCleanupFunction(function () win.close());
|
||||
|
||||
whenWindowLoaded(win, function () {
|
||||
ss.setWindowState(win, JSON.stringify(aState), true);
|
||||
executeSoon(function () aCallback(win));
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user