function test() { while (gBrowser.mTabs.length > 1) gBrowser.removeCurrentTab(); gBrowser.addTab(); gBrowser.addTab(); gBrowser.addTab(); ctrlTabTest([2] , 1, 0); ctrlTabTest([2, 3, 1], 2, 2); ctrlTabTest([] , 4, 2); gBrowser.removeTab(gBrowser.tabContainer.lastChild); ctrlTabTest([2, 1, 0], 7, 1); gBrowser.removeTab(gBrowser.tabContainer.lastChild); ctrlTabTest([1] , 1, 0); gBrowser.removeTab(gBrowser.tabContainer.lastChild); var focusedWindow = document.commandDispatcher.focusedWindow; var eventConsumed = true; var detectKeyEvent = function (event) { eventConsumed = event.getPreventDefault(); }; document.addEventListener("keypress", detectKeyEvent, false); pressCtrlTab(); document.removeEventListener("keypress", detectKeyEvent, false); ok(eventConsumed, "Ctrl+Tab consumed by the tabbed browser if one tab is open"); is(focusedWindow.location, document.commandDispatcher.focusedWindow.location, "Ctrl+Tab doesn't change focus if one tab is open"); /* private utitily functions */ function pressCtrlTab() EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true }); function releaseCtrl() EventUtils.synthesizeKey("VK_CONTROL", { type: "keyup" }); function ctrlTabTest(tabsToSelect, tabTimes, expectedIndex) { tabsToSelect.forEach(function (index) { gBrowser.selectedTab = gBrowser.mTabs[index]; }); var indexStart = gBrowser.tabContainer.selectedIndex; var tabCount = gBrowser.mTabs.length; var normalized = tabTimes % tabCount; var where = normalized == 1 ? "back to the previously selected tab" : normalized + " tabs back in most-recently-selected order"; for (let i = 0; i < tabTimes; i++) { pressCtrlTab(); if (tabCount > 2) is(gBrowser.tabContainer.selectedIndex, indexStart, "Selected tab doesn't change while tabbing"); } if (tabCount > 2) { ok(ctrlTab.panel.state == "showing" || ctrlTab.panel.state == "open", "With " + tabCount + " tabs open, Ctrl+Tab opens the preview panel"); is(ctrlTab.label.value, gBrowser.mTabs[expectedIndex].label, "Preview panel displays label of expected tab"); releaseCtrl(); ok(ctrlTab.panel.state == "hiding" || ctrlTab.panel.state == "closed", "Releasing Ctrl closes the preview panel"); } else { ok(ctrlTab.panel.state == "hiding" || ctrlTab.panel.state == "closed", "With " + tabCount + " tabs open, Ctrl+Tab doesn't open the preview panel"); } is(gBrowser.tabContainer.selectedIndex, expectedIndex, "With "+ tabCount +" tabs open and tab " + indexStart + " selected, Ctrl+Tab*" + tabTimes + " goes " + where); } }