summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js')
-rw-r--r--browser/base/content/test/tabs/browser_multiselect_tabs_move_to_new_window_contextmenu.js129
1 files changed, 129 insertions, 0 deletions
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);
+});