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

161 lines
5.1 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
let prefsBranch;
let currentActiveGroupItemId;
function test() {
waitForExplicitFinish();
// disable the first run pref
prefsBranch = Services.prefs.getBranch("browser.panorama.");
prefsBranch.setBoolPref("experienced_first_run", false);
let win =
window.openDialog(getBrowserURL(), "_blank", "all,dialog=no", "about:blank");
let onLoad = function() {
win.removeEventListener("load", onLoad, false);
let theObserver = function(subject, topic, data) {
Services.obs.removeObserver(
theObserver, "browser-delayed-startup-finished");
test1(win);
}
Services.obs.addObserver(
theObserver, "browser-delayed-startup-finished", false);
};
win.addEventListener("load", onLoad, false);
}
// check whether tha menu is hidden when the "experienced_first_run" pref is
// false
function test1(win) {
is(win.gBrowser.tabs.length - win.gBrowser.visibleTabs.length, 0,
"There are no hidden tabs")
let originalTab = win.gBrowser.visibleTabs[0];
openTabContextPopup(win, originalTab);
ok(win.document.getElementById("context_tabViewMenu").hidden,
"The menu should be hidden");
closeTabContextPopup(win);
executeSoon(function() {
ok(!win.TabView.getContentWindow(), "The tab view iframe is not loaded");
test2(win);
});
}
// press the next group key combination and check whether the iframe has loaded or not
function test2(win) {
goToNextGroup(win);
// give it a delay so we can ensure the iframe has not been loaded
executeSoon(function() {
ok(!win.TabView.getContentWindow(),
"The tab view iframe is not loaded after pressing the next group key combination");
test3(win);
});
}
// first run has happened, open the tab context menupopup and the tabview menu,
// move a tab to another group including iframe initialization. Then,
// use the key combination to change to the next group.
function test3(win) {
prefsBranch.setBoolPref("experienced_first_run", true);
let newTab = win.gBrowser.addTab("about:blank");
// open the tab context menupopup and the tabview menupopup
openTabContextPopup(win, newTab);
win.document.getElementById("context_tabViewMenuPopup").openPopup(
win.document.getElementById("context_tabViewMenu"), "end_after", 0, 0,
true, false);
ok(!win.document.getElementById("context_tabViewMenu").hidden,
"The menu should be visible now");
is(win.gBrowser.tabs.length - win.gBrowser.visibleTabs.length, 0,
"There are no hidden tabs")
ok(!win.TabView.getContentWindow(),
"The tab view iframe is not loaded after opening tab context menu");
let onTabViewFrameInitialized = function() {
win.removeEventListener(
"tabviewframeinitialized", onTabViewFrameInitialized, false);
let contentWindow = win.document.getElementById("tab-view").contentWindow;
// show the tab view to ensure groups are created before checking.
let onTabViewShown = function() {
win.removeEventListener("tabviewshown", onTabViewShown, false);
ok(win.TabView.isVisible(), "Tab View is visible");
is(contentWindow.GroupItems.groupItems.length, 2,
"There are two group items");
is(contentWindow.GroupItems.groupItems[0].getChildren().length, 1,
"There should be one tab item in the first group");
is(contentWindow.GroupItems.groupItems[1].getChildren().length, 1,
"There should be one tab item in the second group");
// simulate the next group key combination
currentActiveGroupItemId =
contentWindow.GroupItems.getActiveGroupItem().id;
win.addEventListener("tabviewhidden", onTabViewHidden, false);
win.TabView.toggle();
};
let onTabViewHidden = function() {
win.removeEventListener("tabviewhidden", onTabViewHidden, false);
goToNextGroup(win);
isnot(contentWindow.GroupItems.getActiveGroupItem().id,
currentActiveGroupItemId, "Just switched to another group");
// close the window and finish it
win.close();
finish();
};
win.addEventListener("tabviewshown", onTabViewShown, false);
// give it a delay to ensure everything is loaded.
executeSoon(function() { win.TabView.toggle(); });
};
win.addEventListener(
"tabviewframeinitialized", onTabViewFrameInitialized, false);
// move the tab to another group using the menu item
win.document.getElementById("context_tabViewNewGroup").doCommand();
// close popups
win.document.getElementById("context_tabViewMenuPopup").hidePopup();
closeTabContextPopup(win);
}
function openTabContextPopup(win, tab) {
win.document.popupNode = tab;
win.document.getElementById("tabContextMenu").openPopup(
tab, "end_after", 0, 0, true, false);
}
function closeTabContextPopup(win) {
win.document.getElementById("tabContextMenu").hidePopup();
}
function goToNextGroup(win) {
let utils =
win.QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIDOMWindowUtils);
const masks = Ci.nsIDOMNSEvent;
let mval = 0;
mval |= masks.CONTROL_MASK;
utils.sendKeyEvent("keypress", 0, 96, mval);
}