summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js b/browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js
new file mode 100644
index 0000000000..3dfaedec81
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_move_tab_to_new_window.js
@@ -0,0 +1,120 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ These tests ensure that if the urlbar has a user typed value and the user
+ moves the tab into a new window, the user typed value moves with it.
+*/
+
+add_setup(async function () {
+ await PlacesUtils.bookmarks.eraseEverything();
+ await PlacesUtils.history.clear();
+ await PlacesTestUtils.addVisits(["https://example.com/"]);
+ registerCleanupFunction(async function () {
+ await PlacesUtils.history.clear();
+ });
+});
+
+async function moveTabIntoNewWindowAndBack(url = "about:blank") {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+
+ info("Replace urlbar value with a user typed value.");
+ gURLBar.value = "hello world";
+ UrlbarTestUtils.fireInputEvent(window);
+ Assert.equal(
+ gBrowser.userTypedValue,
+ "hello world",
+ "The user typed value should be replaced with hello world."
+ );
+
+ info("Move the tab into its own window.");
+ let newWindow = gBrowser.replaceTabWithWindow(tab);
+ let swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ tab.linkedBrowser,
+ "SwapDocShells"
+ );
+ await swapDocShellPromise;
+ Assert.equal(
+ newWindow.gURLBar.value,
+ "hello world",
+ "The value of the urlbar should have been moved."
+ );
+
+ info("Return that tab back to its original window and select it.");
+ tab = newWindow.gBrowser.selectedTab;
+ swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ tab.linkedBrowser,
+ "SwapDocShells"
+ );
+ gBrowser.adoptTab(newWindow.gBrowser.selectedTab, 1, true);
+ await swapDocShellPromise;
+ Assert.equal(
+ gURLBar.value,
+ "hello world",
+ "The value of the urlbar should have been moved."
+ );
+
+ // Clean up.
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+}
+
+add_task(async function move_newtab_with_value() {
+ info("Open a new tab.");
+ await moveTabIntoNewWindowAndBack();
+});
+
+add_task(async function move_loaded_page_with_value() {
+ info("Open a new tab and load a URL.");
+ await moveTabIntoNewWindowAndBack("https://www.example.com/");
+});
+
+add_task(async function move_tab_into_new_window_and_open_new_tab() {
+ info("Open a new tab.");
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ info("Move the new tab into a new window.");
+ let swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ tab.linkedBrowser,
+ "SwapDocShells"
+ );
+ let newWindow = gBrowser.replaceTabWithWindow(tab);
+ await swapDocShellPromise;
+ await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
+
+ info("Type in the urlbar to open it and see an autofill suggestion.");
+ await UrlbarTestUtils.promisePopupOpen(newWindow, async () => {
+ newWindow.gURLBar.focus();
+ EventUtils.synthesizeKey("ex", {}, newWindow);
+ });
+
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(newWindow, 0);
+ Assert.equal(details.autofill, true, "Heuristic result should be Autofill.");
+ Assert.equal(
+ details.result.autofill.value,
+ "example.com/",
+ "Autofill value is as expected."
+ );
+
+ info("Open an about:newtab page while address bar is focused.");
+ let tab2 = await BrowserTestUtils.openNewForegroundTab(
+ newWindow.gBrowser,
+ "about:newtab",
+ false
+ );
+
+ // To be certain autoOpen isn't triggered, wait a brief amount of time
+ // following the tab switch event.
+ /* eslint-disable mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 100));
+
+ Assert.equal(newWindow.gURLBar.value, "", "Urlbar should be empty.");
+ Assert.equal(
+ newWindow.gURLBar.view.isOpen,
+ false,
+ "Urlbar view should be closed."
+ );
+
+ await BrowserTestUtils.removeTab(tab2);
+ await BrowserTestUtils.closeWindow(newWindow);
+});