summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js')
-rw-r--r--browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js b/browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js
new file mode 100644
index 0000000000..3a013132be
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_movePendingTabToNewWindow.js
@@ -0,0 +1,124 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This tests the behaviour of moving pending tabs to a new window. These
+ * pending tabs have yet to be restored and should be restored upon opening
+ * in the new window. This test covers moving a single pending tab at once
+ * as well as multiple tabs at the same time (using tab multiselection).
+ */
+add_task(async function test_movePendingTabToNewWindow() {
+ const TEST_URIS = [
+ "http://www.example.com/1",
+ "http://www.example.com/2",
+ "http://www.example.com/3",
+ "http://www.example.com/4",
+ ];
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.sessionstore.restore_on_demand", true]],
+ });
+
+ let state = {
+ windows: [
+ {
+ tabs: [
+ { entries: [{ url: TEST_URIS[0], triggeringPrincipal_base64 }] },
+ { entries: [{ url: TEST_URIS[1], triggeringPrincipal_base64 }] },
+ { entries: [{ url: TEST_URIS[2], triggeringPrincipal_base64 }] },
+ { entries: [{ url: TEST_URIS[3], triggeringPrincipal_base64 }] },
+ ],
+ selected: 4,
+ },
+ ],
+ };
+
+ await promiseBrowserState(state);
+
+ is(
+ gBrowser.visibleTabs.length,
+ 4,
+ "Three tabs are visible to start the test"
+ );
+
+ let tabToSelect = gBrowser.visibleTabs[1];
+ ok(tabToSelect.hasAttribute("pending"), "Tab should be pending");
+
+ gBrowser.addRangeToMultiSelectedTabs(gBrowser.selectedTab, tabToSelect);
+ ok(!gBrowser.visibleTabs[0].multiselected, "First tab not multiselected");
+ ok(gBrowser.visibleTabs[1].multiselected, "Second tab multiselected");
+ ok(gBrowser.visibleTabs[2].multiselected, "Third tab multiselected");
+ ok(gBrowser.visibleTabs[3].multiselected, "Fourth tab multiselected");
+
+ let promiseNewWindow = BrowserTestUtils.waitForNewWindow();
+ gBrowser.replaceTabsWithWindow(tabToSelect);
+
+ info("Waiting for new window");
+ let newWindow = await promiseNewWindow;
+ isnot(newWindow, gBrowser.ownerGlobal, "Tab moved to new window");
+
+ let newWindowTabs = newWindow.gBrowser.visibleTabs;
+ await TestUtils.waitForCondition(() => {
+ return (
+ newWindowTabs.length == 3 &&
+ newWindowTabs[0].linkedBrowser.currentURI.spec == TEST_URIS[1] &&
+ newWindowTabs[1].linkedBrowser.currentURI.spec == TEST_URIS[2] &&
+ newWindowTabs[2].linkedBrowser.currentURI.spec == TEST_URIS[3]
+ );
+ }, "Wait for all three tabs to move to new window and load");
+
+ is(newWindowTabs.length, 3, "Three tabs should be in new window");
+ is(
+ newWindowTabs[0].linkedBrowser.currentURI.spec,
+ TEST_URIS[1],
+ "Second tab moved"
+ );
+ is(
+ newWindowTabs[1].linkedBrowser.currentURI.spec,
+ TEST_URIS[2],
+ "Third tab moved"
+ );
+ is(
+ newWindowTabs[2].linkedBrowser.currentURI.spec,
+ TEST_URIS[3],
+ "Fourth tab moved"
+ );
+
+ ok(
+ newWindowTabs[0].hasAttribute("pending"),
+ "First tab in new window should still be pending"
+ );
+ ok(
+ newWindowTabs[1].hasAttribute("pending"),
+ "Second tab in new window should still be pending"
+ );
+ newWindow.gBrowser.clearMultiSelectedTabs();
+ ok(
+ newWindowTabs.every(t => !t.multiselected),
+ "No multiselection should be present"
+ );
+
+ promiseNewWindow = BrowserTestUtils.waitForNewWindow();
+ newWindow.gBrowser.replaceTabsWithWindow(newWindowTabs[0]);
+
+ info("Waiting for second new window");
+ let secondNewWindow = await promiseNewWindow;
+ await TestUtils.waitForCondition(
+ () =>
+ secondNewWindow.gBrowser.selectedBrowser.currentURI.spec == TEST_URIS[1],
+ "Wait until the URI is updated"
+ );
+ is(
+ secondNewWindow.gBrowser.visibleTabs.length,
+ 1,
+ "Only one tab in second new window"
+ );
+ is(
+ secondNewWindow.gBrowser.selectedBrowser.currentURI.spec,
+ TEST_URIS[1],
+ "First tab moved"
+ );
+
+ await BrowserTestUtils.closeWindow(secondNewWindow);
+ await BrowserTestUtils.closeWindow(newWindow);
+});