summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_stop.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_stop.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_stop.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_stop.js b/browser/components/urlbar/tests/browser/browser_stop.js
new file mode 100644
index 0000000000..285071a3ff
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_stop.js
@@ -0,0 +1,75 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This tests ensures the urlbar reflects the correct value if a page load is
+ * stopped immediately after loading.
+ */
+
+"use strict";
+
+const goodURL = "http://mochi.test:8888/";
+const badURL = "http://mochi.test:8888/whatever.html";
+
+add_task(async function () {
+ gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, goodURL);
+ await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
+ is(
+ gURLBar.value,
+ BrowserUIUtils.trimURL(goodURL),
+ "location bar reflects loaded page"
+ );
+
+ await typeAndSubmitAndStop(badURL);
+ is(
+ gURLBar.value,
+ BrowserUIUtils.trimURL(goodURL),
+ "location bar reflects loaded page after stop()"
+ );
+ gBrowser.removeCurrentTab();
+
+ gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
+ is(gURLBar.value, "", "location bar is empty");
+
+ await typeAndSubmitAndStop(badURL);
+ is(
+ gURLBar.value,
+ BrowserUIUtils.trimURL(badURL),
+ "location bar reflects stopped page in an empty tab"
+ );
+ gBrowser.removeCurrentTab();
+});
+
+async function typeAndSubmitAndStop(url) {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: url,
+ fireInputEvent: true,
+ });
+
+ let docLoadPromise = BrowserTestUtils.waitForDocLoadAndStopIt(
+ url,
+ gBrowser.selectedBrowser
+ );
+
+ // When the load is stopped, tabbrowser calls gURLBar.setURI and then calls
+ // onStateChange on its progress listeners. So to properly wait until the
+ // urlbar value has been updated, add our own progress listener here.
+ let progressPromise = new Promise(resolve => {
+ let listener = {
+ onStateChange(browser, webProgress, request, stateFlags, status) {
+ if (
+ webProgress.isTopLevel &&
+ stateFlags & Ci.nsIWebProgressListener.STATE_STOP
+ ) {
+ gBrowser.removeTabsProgressListener(listener);
+ resolve();
+ }
+ },
+ };
+ gBrowser.addTabsProgressListener(listener);
+ });
+
+ gURLBar.handleCommand();
+ await Promise.all([docLoadPromise, progressPromise]);
+}