Bug 1239708: Improve awesomebar autofill. Part 6: Browser tests. r?mak
MozReview-Commit-ID: 7r62byWErUS
--- a/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js
@@ -1,68 +1,65 @@
// The order of these tests matters!
add_task(async function setup() {
- let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
let bm = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: "http://example.com/?q=%s",
title: "test"
});
registerCleanupFunction(async function() {
await PlacesUtils.bookmarks.remove(bm);
- BrowserTestUtils.removeTab(tab);
});
await PlacesUtils.keywords.insert({ keyword: "keyword",
url: "http://example.com/?q=%s" });
// Needs at least one success.
ok(true, "Setup complete");
});
-add_task(async function test_keyword() {
+add_task(taskWithNewTab(async function test_keyword() {
await promiseAutocompleteResultPopup("keyword bear");
gURLBar.focus();
EventUtils.sendString("d");
EventUtils.synthesizeKey("KEY_Enter");
info("wait for the page to load");
await BrowserTestUtils.browserLoaded(gBrowser.selectedTab.linkedBrowser,
false, "http://example.com/?q=beard");
-});
+}));
-add_task(async function test_sametext() {
+add_task(taskWithNewTab(async function test_sametext() {
await promiseAutocompleteResultPopup("example.com", window, true);
// Simulate re-entering the same text searched the last time. This may happen
// through a copy paste, but clipboard handling is not much reliable, so just
// fire an input event.
info("synthesize input event");
let event = document.createEvent("Events");
event.initEvent("input", true, true);
gURLBar.dispatchEvent(event);
EventUtils.synthesizeKey("KEY_Enter");
info("wait for the page to load");
await BrowserTestUtils.browserLoaded(gBrowser.selectedTab.linkedBrowser,
false, "http://example.com/");
-});
+}));
-add_task(async function test_after_empty_search() {
+add_task(taskWithNewTab(async function test_after_empty_search() {
await promiseAutocompleteResultPopup("");
gURLBar.focus();
- // Add www. to avoid a switch-to-tab.
- gURLBar.value = "www.e";
+ gURLBar.value = "e";
EventUtils.synthesizeKey("x");
EventUtils.synthesizeKey("KEY_Enter");
info("wait for the page to load");
await BrowserTestUtils.browserLoaded(gBrowser.selectedTab.linkedBrowser,
- false, "http://www.example.com/");
-});
+ false, "http://example.com/");
+}));
-add_task(async function test_disabled_ac() {
+add_task(taskWithNewTab(async function test_disabled_ac() {
// Disable autocomplete.
let suggestHistory = Preferences.get("browser.urlbar.suggest.history");
Preferences.set("browser.urlbar.suggest.history", false);
let suggestBookmarks = Preferences.get("browser.urlbar.suggest.bookmark");
Preferences.set("browser.urlbar.suggest.bookmark", false);
let suggestOpenPages = Preferences.get("browser.urlbar.suggest.openpage");
Preferences.set("browser.urlbar.suggest.openpages", false);
@@ -89,19 +86,19 @@ add_task(async function test_disabled_ac
gURLBar.value = "e";
EventUtils.sendString("x");
EventUtils.synthesizeKey("KEY_Enter");
info("wait for the page to load");
await BrowserTestUtils.browserLoaded(gBrowser.selectedTab.linkedBrowser,
false, "http://example.com/?q=ex");
await cleanup();
-});
+}));
-add_task(async function test_delay() {
+add_task(taskWithNewTab(async function test_delay() {
const TIMEOUT = 10000;
// Set a large delay.
let delay = Preferences.get("browser.urlbar.delay");
Preferences.set("browser.urlbar.delay", TIMEOUT);
registerCleanupFunction(function() {
Preferences.set("browser.urlbar.delay", delay);
});
@@ -116,9 +113,18 @@ add_task(async function test_delay() {
gURLBar.focus();
gURLBar.value = "e";
EventUtils.sendString("x");
EventUtils.synthesizeKey("KEY_Enter");
info("wait for the page to load");
await BrowserTestUtils.browserLoaded(gBrowser.selectedTab.linkedBrowser,
false, "http://example.com/");
Assert.ok((Date.now() - start) < TIMEOUT);
-});
+}));
+
+
+// The main reason for running each test task in a new tab that's closed when
+// the task finishes is to avoid switch-to-tab results.
+function taskWithNewTab(fn) {
+ return async function() {
+ await BrowserTestUtils.withNewTab("about:blank", fn);
+ };
+}
--- a/browser/base/content/test/urlbar/browser_urlbarAutoFillTrimURLs.js
+++ b/browser/base/content/test/urlbar/browser_urlbarAutoFillTrimURLs.js
@@ -56,51 +56,56 @@ async function promiseTestResult(test) {
const tests = [{
search: "http://",
autofilledValue: "http://",
resultListDisplayTitle: "http://",
resultListActionText: "Search with Google",
resultListType: "searchengine",
finalCompleteValue: 'moz-action:searchengine,{"engineName":"Google","input":"http%3A%2F%2F","searchQuery":"http%3A%2F%2F"}'
- }, {
+ },
+ {
search: "https://",
autofilledValue: "https://",
resultListDisplayTitle: "https://",
resultListActionText: "Search with Google",
resultListType: "searchengine",
finalCompleteValue: 'moz-action:searchengine,{"engineName":"Google","input":"https%3A%2F%2F","searchQuery":"https%3A%2F%2F"}'
- }, {
+ },
+ {
search: "au",
autofilledValue: "autofilltrimurl.com/",
resultListDisplayTitle: "www.autofilltrimurl.com",
resultListActionText: "Visit",
resultListType: "",
- finalCompleteValue: "www.autofilltrimurl.com/"
- }, {
+ finalCompleteValue: "http://www.autofilltrimurl.com/"
+ },
+ {
search: "http://au",
autofilledValue: "http://autofilltrimurl.com/",
- resultListDisplayTitle: "autofilltrimurl.com",
+ resultListDisplayTitle: "www.autofilltrimurl.com",
resultListActionText: "Visit",
resultListType: "",
- finalCompleteValue: "http://autofilltrimurl.com/"
- }, {
+ finalCompleteValue: "http://www.autofilltrimurl.com/"
+ },
+ {
search: "sec",
autofilledValue: "secureautofillurl.com/",
resultListDisplayTitle: "https://www.secureautofillurl.com",
resultListActionText: "Visit",
resultListType: "",
finalCompleteValue: "https://www.secureautofillurl.com/"
- }, {
+ },
+ {
search: "https://sec",
autofilledValue: "https://secureautofillurl.com/",
- resultListDisplayTitle: "https://secureautofillurl.com",
+ resultListDisplayTitle: "https://www.secureautofillurl.com",
resultListActionText: "Visit",
resultListType: "",
- finalCompleteValue: "https://secureautofillurl.com/"
+ finalCompleteValue: "https://www.secureautofillurl.com/"
},
];
add_task(async function autofill_tests() {
for (let test of tests) {
await promiseTestResult(test);
}
});
--- a/browser/base/content/test/urlbar/browser_urlbarDelete.js
+++ b/browser/base/content/test/urlbar/browser_urlbarDelete.js
@@ -8,32 +8,32 @@ add_task(async function() {
});
await BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, testDelete);
});
function sendHome() {
// unclear why VK_HOME doesn't work on Mac, but it doesn't...
if (Services.appinfo.OS == "Darwin") {
- EventUtils.synthesizeKey("KEY_ArrowLeft", {altKey: true});
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {metaKey: true});
} else {
EventUtils.synthesizeKey("KEY_Home");
}
}
function sendDelete() {
EventUtils.synthesizeKey("KEY_Delete");
}
async function testDelete() {
await promiseAutocompleteResultPopup("bug1105244");
// move to the start.
sendHome();
// delete the first few chars - each delete should operate on the input field.
sendDelete();
- Assert.equal(gURLBar.inputField.value, "ug1105244");
+ Assert.equal(gURLBar.inputField.value, "ug1105244.example.com/");
await promisePopupShown(gURLBar.popup);
sendDelete();
- Assert.equal(gURLBar.inputField.value, "g1105244");
+ Assert.equal(gURLBar.inputField.value, "g1105244.example.com/");
}
--- a/browser/base/content/test/urlbar/browser_urlbarEnter.js
+++ b/browser/base/content/test/urlbar/browser_urlbarEnter.js
@@ -1,36 +1,34 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const TEST_VALUE = "example.com/\xF7?\xF7";
const START_VALUE = "example.com/%C3%B7?%C3%B7";
-add_task(async function() {
+add_task(async function returnKeypress() {
info("Simple return keypress");
- let tab = gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, START_VALUE);
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, START_VALUE);
gURLBar.focus();
EventUtils.synthesizeKey("KEY_Enter");
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
// Check url bar and selected tab.
is(gURLBar.textValue, TEST_VALUE, "Urlbar should preserve the value on return keypress");
is(gBrowser.selectedTab, tab, "New URL was loaded in the current tab");
// Cleanup.
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
-add_task(async function() {
+add_task(async function altReturnKeypress() {
info("Alt+Return keypress");
- // due to bug 691608, we must wait for the load event, else isTabEmpty() will
- // return true on e10s for this tab, so it will be reused even with altKey.
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, START_VALUE);
let tabOpenPromise = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen");
gURLBar.focus();
EventUtils.synthesizeKey("KEY_Enter", {altKey: true});
// wait for the new tab to appear.
await tabOpenPromise;
--- a/browser/base/content/test/urlbar/browser_urlbar_canonize_on_autofill.js
+++ b/browser/base/content/test/urlbar/browser_urlbar_canonize_on_autofill.js
@@ -34,17 +34,17 @@ add_task(async function() {
await PlacesTestUtils.addVisits({
uri: "http://example.com/",
transition: Ci.nsINavHistoryService.TRANSITION_TYPED
});
await test_autocomplete({ desc: "CTRL+ENTER on the autofilled part should use autofill",
typed: "exam",
autofilled: "example.com/",
- modified: "example.com/",
+ modified: "example.com",
waitForUrl: "http://example.com/",
keys: [["KEY_Enter"]]
});
await test_autocomplete({ desc: "CTRL+ENTER on the autofilled part should bypass autofill",
typed: "exam",
autofilled: "example.com/",
modified: "www.exam.com",
--- a/browser/base/content/test/urlbar/browser_urlbar_search_speculative_connect.js
+++ b/browser/base/content/test/urlbar/browser_urlbar_search_speculative_connect.js
@@ -9,21 +9,28 @@
let gHttpServer = null;
let gScheme = "http";
let gHost = "localhost"; // 'localhost' by default.
let gPort = -1;
let gPrivateWin = null;
let gIsSpeculativeConnected = false;
+let gTest;
+
add_task(async function setup() {
gHttpServer = runHttpServer(gScheme, gHost);
// The server will be run on a random port if the port number wasn't given.
gPort = gHttpServer.identity.primaryPort;
+ gTest = {
+ search: gHost.substr(0, 2),
+ autofilledValue: `${gHost}:${gPort}/`
+ };
+
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.autoFill", true],
// Turn off search suggestion so we won't speculative connect to the search engine.
["browser.search.suggest.enabled", false],
["browser.urlbar.speculativeConnect.enabled", true],
// In mochitest this number is 0 by default but we have to turn it on.
["network.http.speculative-parallel-limit", 6],
// The http server is using IPv4, so it's better to disable IPv6 to avoid weird
@@ -40,54 +47,54 @@ add_task(async function setup() {
gPrivateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
is(PrivateBrowsingUtils.isWindowPrivate(gPrivateWin), true, "A private window created.");
// Bug 764062 - we can't get port number from autocomplete result, so we have to mock
// this function and add it manually.
let oldSpeculativeConnect = gURLBar.popup.maybeSetupSpeculativeConnect.bind(gURLBar.popup);
let newSpeculativeConnect = (uriString) => {
gIsSpeculativeConnected = true;
- info(`Original uri is ${uriString}`);
- let newUriString = uriString.substr(0, uriString.length - 1) +
- ":" + gPort + "/";
- info(`New uri is ${newUriString}`);
- oldSpeculativeConnect(newUriString);
+ oldSpeculativeConnect(uriString);
};
gURLBar.popup.maybeSetupSpeculativeConnect = newSpeculativeConnect;
gPrivateWin.gURLBar.popup.maybeSetupSpeculativeConnect = newSpeculativeConnect;
registerCleanupFunction(async function() {
await PlacesUtils.history.clear();
gURLBar.popup.maybeSetupSpeculativeConnect = oldSpeculativeConnect;
gPrivateWin.gURLBar.popup.maybeSetupSpeculativeConnect = oldSpeculativeConnect;
gHttpServer.identity.remove(gScheme, gHost, gPort);
- gHttpServer.stop(() => {
- gHttpServer = null;
+ await new Promise(resolve => {
+ gHttpServer.stop(() => {
+ gHttpServer = null;
+ resolve();
+ });
});
await BrowserTestUtils.closeWindow(gPrivateWin);
+ gScheme = null;
+ gHost = null;
+ gPort = null;
+ gPrivateWin = null;
+ gIsSpeculativeConnected = null;
+ gTest = null;
});
});
-const test = {
- search: gHost.substr(0, 2),
- autofilledValue: `${gHost}/`
-};
-
add_task(async function autofill_tests() {
gIsSpeculativeConnected = false;
- info(`Searching for '${test.search}'`);
- await promiseAutocompleteResultPopup(test.search, window, true);
- is(gURLBar.inputField.value, test.autofilledValue,
- `Autofilled value is as expected for search '${test.search}'`);
+ info(`Searching for '${gTest.search}'`);
+ await promiseAutocompleteResultPopup(gTest.search, window, true);
+ is(gURLBar.inputField.value, gTest.autofilledValue,
+ `Autofilled value is as expected for search '${gTest.search}'`);
is(gIsSpeculativeConnected, true, "Speculative connection should be called");
await promiseSpeculativeConnection(gHttpServer);
is(gHttpServer.connectionNumber, 1, `${gHttpServer.connectionNumber} speculative connection has been setup.`);
});
add_task(async function privateContext_test() {
info("In private context.");
gIsSpeculativeConnected = false;
- info(`Searching for '${test.search}'`);
- await promiseAutocompleteResultPopup(test.search, gPrivateWin, true);
- is(gPrivateWin.gURLBar.inputField.value, test.autofilledValue,
- `Autofilled value is as expected for search '${test.search}'`);
+ info(`Searching for '${gTest.search}'`);
+ await promiseAutocompleteResultPopup(gTest.search, gPrivateWin, true);
+ is(gPrivateWin.gURLBar.inputField.value, gTest.autofilledValue,
+ `Autofilled value is as expected for search '${gTest.search}'`);
is(gIsSpeculativeConnected, false, "Speculative connection shouldn't be called");
});