From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- ...tiselect_tabs_move_to_new_window_contextmenu.js | 129 +++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js (limited to 'browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js') diff --git a/browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js b/browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js new file mode 100644 index 0000000000..d668d21df8 --- /dev/null +++ b/browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js @@ -0,0 +1,129 @@ +add_task(async function test() { + let tab1 = await addTab(); + let tab2 = await addTab(); + let tab3 = await addTab(); + let tab4 = await addTab(); + + is(gBrowser.multiSelectedTabsCount, 0, "Zero multiselected tabs"); + + await BrowserTestUtils.switchTab(gBrowser, tab2); + await triggerClickOn(tab1, { ctrlKey: true }); + await triggerClickOn(tab3, { ctrlKey: true }); + + ok(tab1.multiselected, "Tab1 is multiselected"); + ok(tab2.multiselected, "Tab2 is multiselected"); + ok(tab3.multiselected, "Tab3 is multiselected"); + ok(!tab4.multiselected, "Tab4 is not multiselected"); + is(gBrowser.multiSelectedTabsCount, 3, "Three multiselected tabs"); + + let newWindow = gBrowser.replaceTabsWithWindow(tab1); + + // waiting for tab2 to close ensure that the newWindow is created, + // thus newWindow.gBrowser used in the second waitForCondition + // will not be undefined. + await TestUtils.waitForCondition( + () => tab2.closing, + "Wait for tab2 to close" + ); + await TestUtils.waitForCondition( + () => newWindow.gBrowser.visibleTabs.length == 3, + "Wait for all three tabs to get moved to the new window" + ); + + let gBrowser2 = newWindow.gBrowser; + + is(gBrowser.multiSelectedTabsCount, 0, "Zero multiselected tabs"); + is(gBrowser.visibleTabs.length, 2, "Two tabs now in the old window"); + is(gBrowser2.visibleTabs.length, 3, "Three tabs in the new window"); + is( + gBrowser2.visibleTabs.indexOf(gBrowser2.selectedTab), + 1, + "Previously active tab is still the active tab in the new window" + ); + + BrowserTestUtils.closeWindow(newWindow); + BrowserTestUtils.removeTab(tab4); +}); + +add_task(async function testLazyTabs() { + let params = { createLazyBrowser: true }; + let oldTabs = []; + let numTabs = 4; + for (let i = 0; i < numTabs; ++i) { + oldTabs.push( + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + BrowserTestUtils.addTab(gBrowser, `http://example.com/?${i}`, params) + ); + } + + await BrowserTestUtils.switchTab(gBrowser, oldTabs[0]); + for (let i = 1; i < numTabs; ++i) { + await triggerClickOn(oldTabs[i], { ctrlKey: true }); + } + + isnot(oldTabs[0].linkedPanel, "", `Old tab 0 shouldn't be lazy`); + for (let i = 1; i < numTabs; ++i) { + is(oldTabs[i].linkedPanel, "", `Old tab ${i} should be lazy`); + } + + is(gBrowser.multiSelectedTabsCount, numTabs, `${numTabs} multiselected tabs`); + for (let i = 0; i < numTabs; ++i) { + ok(oldTabs[i].multiselected, `Old tab ${i} should be multiselected`); + } + + let tabsMoved = new Promise(resolve => { + let numTabsMoved = 0; + window.addEventListener("TabClose", async function listener(event) { + let oldTab = event.target; + let i = oldTabs.indexOf(oldTab); + if (i == 0) { + isnot( + oldTab.linkedPanel, + "", + `Old tab ${i} should continue not being lazy` + ); + } else if (i > 0) { + is(oldTab.linkedPanel, "", `Old tab ${i} should continue being lazy`); + } else { + return; + } + let newTab = event.detail.adoptedBy; + await TestUtils.waitForCondition(() => { + return newTab.linkedBrowser.currentURI.spec != "about:blank"; + }, `Wait for the new tab to finish the adoption of the old tab`); + if (++numTabsMoved == numTabs) { + window.removeEventListener("TabClose", listener); + resolve(); + } + }); + }); + let newWindow = gBrowser.replaceTabsWithWindow(oldTabs[0]); + await tabsMoved; + let newTabs = newWindow.gBrowser.tabs; + + isnot(newTabs[0].linkedPanel, "", `New tab 0 should continue not being lazy`); + for (let i = 1; i < numTabs; ++i) { + is(newTabs[i].linkedPanel, "", `New tab ${i} should continue being lazy`); + } + + is( + newTabs[0].linkedBrowser.currentURI.spec, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + `http://example.com/?0`, + `New tab 0 should have the right URL` + ); + for (let i = 1; i < numTabs; ++i) { + is( + SessionStore.getLazyTabValue(newTabs[i], "url"), + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + `http://example.com/?${i}`, + `New tab ${i} should have the right lazy URL` + ); + } + + for (let i = 0; i < numTabs; ++i) { + ok(newTabs[i].multiselected, `New tab ${i} should be multiselected`); + } + + BrowserTestUtils.closeWindow(newWindow); +}); -- cgit v1.2.3