summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js196
1 files changed, 196 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js b/browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js
new file mode 100644
index 0000000000..1bb65c0c42
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_aboutHomeLoading.js
@@ -0,0 +1,196 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This tests ensures the urlbar is cleared properly when about:home is visited.
+ */
+
+"use strict";
+
+const { SessionSaver } = ChromeUtils.importESModule(
+ "resource:///modules/sessionstore/SessionSaver.sys.mjs"
+);
+const { TabStateFlusher } = ChromeUtils.importESModule(
+ "resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
+);
+
+add_task(function addHomeButton() {
+ CustomizableUI.addWidgetToArea("home-button", "nav-bar");
+ registerCleanupFunction(() =>
+ CustomizableUI.removeWidgetFromArea("home-button")
+ );
+});
+
+/**
+ * Test what happens if loading a URL that should clear the
+ * location bar after a parent process URL.
+ */
+add_task(async function clearURLBarAfterParentProcessURL() {
+ let tab = await new Promise(resolve => {
+ gBrowser.selectedTab = BrowserTestUtils.addTab(
+ gBrowser,
+ "about:preferences"
+ );
+ let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
+ newTabBrowser.addEventListener(
+ "Initialized",
+ async function () {
+ resolve(gBrowser.selectedTab);
+ },
+ { capture: true, once: true }
+ );
+ });
+ document.getElementById("home-button").click();
+ await BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ HomePage.get()
+ );
+ is(gURLBar.value, "", "URL bar should be empty");
+ is(
+ tab.linkedBrowser.userTypedValue,
+ null,
+ "The browser should have no recorded userTypedValue"
+ );
+ BrowserTestUtils.removeTab(tab);
+});
+
+/**
+ * Same as above, but open the tab without passing the URL immediately
+ * which changes behaviour in tabbrowser.xml.
+ */
+add_task(async function clearURLBarAfterParentProcessURLInExistingTab() {
+ let tab = await new Promise(resolve => {
+ gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
+ let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
+ newTabBrowser.addEventListener(
+ "Initialized",
+ async function () {
+ resolve(gBrowser.selectedTab);
+ },
+ { capture: true, once: true }
+ );
+ BrowserTestUtils.loadURIString(newTabBrowser, "about:preferences");
+ });
+ document.getElementById("home-button").click();
+ await BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ HomePage.get()
+ );
+ is(gURLBar.value, "", "URL bar should be empty");
+ is(
+ tab.linkedBrowser.userTypedValue,
+ null,
+ "The browser should have no recorded userTypedValue"
+ );
+ BrowserTestUtils.removeTab(tab);
+});
+
+/**
+ * Load about:home directly from an about:newtab page. Because it is an
+ * 'initial' page, we need to treat this specially if the user actually
+ * loads a page like this from the URL bar.
+ */
+add_task(async function clearURLBarAfterManuallyLoadingAboutHome() {
+ let promiseTabOpenedAndSwitchedTo = BrowserTestUtils.switchTab(
+ gBrowser,
+ () => {}
+ );
+ // This opens about:newtab:
+ BrowserOpenTab();
+ let tab = await promiseTabOpenedAndSwitchedTo;
+ is(gURLBar.value, "", "URL bar should be empty");
+ is(tab.linkedBrowser.userTypedValue, null, "userTypedValue should be null");
+
+ gURLBar.value = "about:home";
+ gURLBar.select();
+ let aboutHomeLoaded = BrowserTestUtils.browserLoaded(
+ gBrowser.selectedBrowser,
+ false,
+ "about:home"
+ );
+ EventUtils.sendKey("return");
+ await aboutHomeLoaded;
+
+ is(gURLBar.value, "", "URL bar should be empty");
+ is(tab.linkedBrowser.userTypedValue, null, "userTypedValue should be null");
+ BrowserTestUtils.removeTab(tab);
+});
+
+/**
+ * Ensure we don't show 'about:home' in the URL bar temporarily in new tabs
+ * while we're switching remoteness (when the URL we're loading and the
+ * default content principal are different).
+ */
+add_task(async function dontTemporarilyShowAboutHome() {
+ requestLongerTimeout(2);
+
+ await SpecialPowers.pushPrefEnv({ set: [["browser.startup.page", 1]] });
+ let windowOpenedPromise = BrowserTestUtils.waitForNewWindow();
+ let win = OpenBrowserWindow();
+ await windowOpenedPromise;
+ let promiseTabSwitch = BrowserTestUtils.switchTab(win.gBrowser, () => {});
+ win.BrowserOpenTab();
+ await promiseTabSwitch;
+ is(win.gBrowser.visibleTabs.length, 2, "2 tabs opened");
+ await TabStateFlusher.flush(win.gBrowser.selectedBrowser);
+ await BrowserTestUtils.closeWindow(win);
+ ok(SessionStore.getClosedWindowCount(), "Should have a closed window");
+
+ await SessionSaver.run();
+
+ windowOpenedPromise = BrowserTestUtils.waitForNewWindow();
+ win = SessionStore.undoCloseWindow(0);
+ await windowOpenedPromise;
+ let wpl = {
+ onLocationChange() {
+ is(win.gURLBar.value, "", "URL bar value should stay empty.");
+ },
+ };
+ win.gBrowser.addProgressListener(wpl);
+
+ if (win.gBrowser.visibleTabs.length < 2) {
+ await BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen");
+ }
+ let otherTab = win.gBrowser.selectedTab.previousElementSibling;
+ let tabLoaded = BrowserTestUtils.browserLoaded(
+ otherTab.linkedBrowser,
+ false,
+ "about:home"
+ );
+ await BrowserTestUtils.switchTab(win.gBrowser, otherTab);
+ await tabLoaded;
+ win.gBrowser.removeProgressListener(wpl);
+ is(win.gURLBar.value, "", "URL bar value should be empty.");
+
+ await BrowserTestUtils.closeWindow(win);
+});
+
+/**
+ * Test that if the Home Button is clicked after a user has typed
+ * some value into the URL bar, that the URL bar is cleared if
+ * the homepage is one of the initial pages set.
+ */
+add_task(async function () {
+ await BrowserTestUtils.withNewTab(
+ {
+ url: "http://example.com",
+ gBrowser,
+ },
+ async browser => {
+ const TYPED_VALUE = "This string should get cleared";
+ gURLBar.value = TYPED_VALUE;
+ browser.userTypedValue = TYPED_VALUE;
+
+ document.getElementById("home-button").click();
+ await BrowserTestUtils.browserLoaded(browser, false, HomePage.get());
+ is(gURLBar.value, "", "URL bar should be empty");
+ is(
+ browser.userTypedValue,
+ null,
+ "The browser should have no recorded userTypedValue"
+ );
+ }
+ );
+});