Bug 643392 - A 'ghost tab' appears inside a Tab Group; f=raymond, r=dao+ehsan

This commit is contained in:
Tim Taubert 2011-05-17 23:31:41 +02:00
parent 04b7da7644
commit 7a34db6a24
4 changed files with 91 additions and 1 deletions

View File

@ -57,7 +57,10 @@ let AllTabs = {
get tabs() {
// Get tabs from each browser window and flatten them into one array
return Array.concat.apply(null, browserWindows.map(function(browserWindow) {
return Array.slice(browserWindow.gBrowser.tabs);
let removingTabs = browserWindow.gBrowser._removingTabs;
return Array.filter(browserWindow.gBrowser.tabs, function (tab) {
return removingTabs.indexOf(tab) == -1;
});
}));
},

View File

@ -131,6 +131,7 @@ _BROWSER_FILES = \
browser_tabview_bug640765.js \
browser_tabview_bug641802.js \
browser_tabview_bug642793.js \
browser_tabview_bug643392.js \
browser_tabview_bug644097.js \
browser_tabview_bug645653.js \
browser_tabview_bug648882.js \

View File

@ -0,0 +1,56 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
const ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
let state = {
windows: [{
tabs: [{
entries: [{ url: "about:home" }],
hidden: true,
extData: {"tabview-tab": '{"url":"about:home","groupID":1,"bounds":{"left":20,"top":20,"width":20,"height":20}}'}
},{
entries: [{ url: "about:home" }],
hidden: false,
extData: {"tabview-tab": '{"url":"about:home","groupID":2,"bounds":{"left":20,"top":20,"width":20,"height":20}}'},
}],
selected: 2,
extData: {
"tabview-groups": '{"nextID":3,"activeGroupId":2}',
"tabview-group":
'{"1":{"bounds":{"left":15,"top":5,"width":280,"height":232},"id":1},' +
'"2":{"bounds":{"left":309,"top":5,"width":267,"height":226},"id":2}}'
}
}]
};
function test() {
waitForExplicitFinish();
newWindowWithState(state, function (win) {
registerCleanupFunction(function () win.close());
is(win.gBrowser.tabs.length, 2, "two tabs");
let opts = {animate: true, byMouse: true};
win.gBrowser.removeTab(win.gBrowser.visibleTabs[0], opts);
let checkTabCount = function () {
if (win.gBrowser.tabs.length > 1) {
executeSoon(checkTabCount);
return;
}
is(win.gBrowser.tabs.length, 1, "one tab");
showTabView(function () {
let cw = win.TabView.getContentWindow();
is(cw.TabItems.items.length, 1, "one tabItem");
waitForFocus(finish);
}, win);
};
checkTabCount();
});
}

View File

@ -261,3 +261,33 @@ function unhideGroupItem(groupItem, callback) {
});
groupItem._unhide();
}
// ----------
function whenWindowLoaded(win, callback) {
win.addEventListener("load", function onLoad() {
win.removeEventListener("load", onLoad, false);
executeSoon(callback);
}, false);
}
// ----------
function whenWindowStateReady(win, callback) {
win.addEventListener("SSWindowStateReady", function onReady() {
win.removeEventListener("SSWindowStateReady", onReady, false);
executeSoon(callback);
}, false);
}
// ----------
function newWindowWithState(state, callback) {
let opts = "chrome,all,dialog=no,height=800,width=800";
let win = window.openDialog(getBrowserURL(), "_blank", opts);
whenWindowLoaded(win, function () {
ss.setWindowState(win, JSON.stringify(state), true);
});
whenWindowStateReady(win, function () {
afterAllTabsLoaded(function () callback(win), win);
});
}