gecko/browser/base/content/test/tabview/browser_tabview_bug650573.js

101 lines
3.0 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
let stateBackup = ss.getBrowserState();
function test() {
waitForExplicitFinish();
registerCleanupFunction(function () {
ss.setBrowserState(stateBackup);
});
TabView._initFrame(function() {
executeSoon(testRestoreNormal);
});
}
function testRestoreNormal() {
testRestore("normal", function () {
waitForBrowserState(JSON.parse(stateBackup), testRestorePinned);
});
}
function testRestorePinned() {
gBrowser.loadOneTab("about:blank", {inBackground: true});
gBrowser.pinTab(gBrowser.tabs[0]);
testRestore("pinned", function () {
waitForBrowserState(JSON.parse(stateBackup), testRestoreHidden);
});
}
function testRestoreHidden() {
let groupItem = createGroupItemWithBlankTabs(window, 20, 20, 20, 1);
let tabItem = groupItem.getChild(0);
hideGroupItem(groupItem, function () {
testRestore("hidden", function () {
isnot(tabItem.container.style.display, "none", "tabItem is visible");
waitForFocus(finish);
});
});
}
function testRestore(prefix, callback) {
waitForBrowserState(createBrowserState(), function () {
is(gBrowser.tabs.length, 2, prefix + ": two tabs restored");
let cw = TabView.getContentWindow();
is(cw.GroupItems.groupItems.length, 2, prefix + ": we have two groupItems");
let [groupItem1, groupItem2] = cw.GroupItems.groupItems;
is(groupItem1.id, "1st-group-id", prefix + ": groupItem1's ID is valid");
is(groupItem1.getChildren().length, 1, prefix + ": groupItem1 has one child");
is(groupItem2.id, "2nd-group-id", prefix + ": groupItem2's ID is valid");
is(groupItem2.getChildren().length, 1, prefix + ": groupItem2 has one child");
callback();
});
}
function waitForBrowserState(state, callback) {
window.addEventListener("SSWindowStateReady", function onReady() {
window.removeEventListener("SSWindowStateReady", onReady, false);
executeSoon(callback);
}, false);
ss.setBrowserState(JSON.stringify(state));
}
function createBrowserState() {
let bounds = {left: 20, top: 20, width: 20, height: 20};
let tabViewGroups = {nextID: 99, activeGroupId: 1};
let tabViewGroup = {
"1st-group-id": {bounds: bounds, title: "new group 1", id: "1st-group-id"},
"2nd-group-id": {bounds: bounds, title: "new group 2", id: "2nd-group-id"}
};
let tab1Data = {bounds: bounds, url: "about:robots", groupID: "2nd-group-id"};
let tab1 = {
entries: [{url: "about:robots"}],
extData: {"tabview-tab": JSON.stringify(tab1Data)}
};
let tab2Data = {bounds: bounds, url: "about:mozilla", groupID: "1st-group-id"};
let tab2 = {
entries: [{url: "about:mozilla"}],
extData: {"tabview-tab": JSON.stringify(tab2Data)}
};
return {windows: [{
tabs: [tab1, tab2],
selected: 1,
extData: {"tabview-groups": JSON.stringify(tabViewGroups),
"tabview-group": JSON.stringify(tabViewGroup)}
}]};
}