browser_history_recently_closed_middleclick.js (3447B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 // Verifies that middle-clicking "Recently Closed Tabs" in both history 5 // menus works as expected. 6 7 const URLS = [ 8 "http://example.com/", 9 "http://example.org/", 10 "http://example.net/", 11 ]; 12 13 async function setupTest() { 14 // Navigate the initial tab to ensure that it won't be reused for the tab 15 // that will be reopened. 16 let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); 17 BrowserTestUtils.startLoadingURIString( 18 gBrowser.selectedBrowser, 19 "https://example.com" 20 ); 21 await loadPromise; 22 23 // Populate the recently closed tabs list. 24 for (let url of URLS) { 25 await BrowserTestUtils.openNewForegroundTab(gBrowser, url); 26 } 27 for (let i = 0; i < URLS.length; i++) { 28 gBrowser.removeTab(gBrowser.selectedTab); 29 } 30 31 return gBrowser.tabs.length; 32 } 33 34 add_task(async function testMenubar() { 35 if (AppConstants.platform === "macosx") { 36 ok(true, "Can't open menu items on macOS"); 37 return; 38 } 39 40 let nOpenTabs = await setupTest(); 41 42 // Open the "History" menu. 43 let menu = document.getElementById("history-menu"); 44 let popupPromise = BrowserTestUtils.waitForEvent(menu, "popupshown"); 45 menu.open = true; 46 await popupPromise; 47 ok(true, "Opened 'History' menu"); 48 49 // Open the "Recently Closed Tabs" submenu. 50 let undoMenu = document.getElementById("historyUndoMenu"); 51 popupPromise = BrowserTestUtils.waitForEvent(undoMenu, "popupshown"); 52 undoMenu.open = true; 53 let popupEvent = await popupPromise; 54 ok(true, "Opened 'Recently Closed Tabs' menu"); 55 56 // And now middle-click the first item in that menu, and ensure that we're 57 // only opening a single new tab. 58 let menuitems = popupEvent.target.querySelectorAll("menuitem"); 59 let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, null, true); 60 popupEvent.target.activateItem(menuitems[0], { button: 1 }); 61 62 let newTab = await newTabPromise; 63 is(newTab.linkedBrowser.currentURI.spec, URLS[0], "Opened correct URL"); 64 is(gBrowser.tabs.length, nOpenTabs + 1, "Only opened 1 new tab"); 65 66 gBrowser.removeTab(newTab); 67 }); 68 69 add_task(async function testHistoryPanel() { 70 let nOpenTabs = await setupTest(); 71 72 // Setup history panel. 73 CustomizableUI.addWidgetToArea( 74 "history-panelmenu", 75 CustomizableUI.AREA_FIXED_OVERFLOW_PANEL 76 ); 77 registerCleanupFunction(() => CustomizableUI.reset()); 78 await openHistoryPanel(); 79 80 // Open the "Recently closed tabs" panel. 81 let recentlyClosedTabs = document.getElementById("appMenuRecentlyClosedTabs"); 82 recentlyClosedTabs.click(); 83 84 let recentlyClosedTabsPanel = document.getElementById( 85 "appMenu-library-recentlyClosedTabs" 86 ); 87 await BrowserTestUtils.waitForEvent(recentlyClosedTabsPanel, "ViewShown"); 88 ok(true, "Opened 'Recently closed tabs' panel"); 89 90 let panelBody = recentlyClosedTabsPanel.querySelector(".panel-subview-body"); 91 let toolbarButtons = panelBody.querySelectorAll("toolbarbutton"); 92 93 // Middle-click the first toolbar button in the panel. 94 let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, null, true); 95 EventUtils.sendMouseEvent( 96 { type: "click", button: 1 }, 97 toolbarButtons[0], 98 window 99 ); 100 101 let newTab = await newTabPromise; 102 is(newTab.linkedBrowser.currentURI.spec, URLS[0], "Opened correct URL"); 103 is(gBrowser.tabs.length, nOpenTabs + 1, "Only opened 1 new tab"); 104 105 gBrowser.removeTab(newTab); 106 });