diff -r 000000000000 -r 6474c204b198 browser/base/content/test/general/browser_urlbarAutoFillTrimURLs.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/base/content/test/general/browser_urlbarAutoFillTrimURLs.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,87 @@ +/* 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/. */ + +// This test ensures that autoFilled values are not trimmed, unless the user +// selects from the autocomplete popup. + +function test() { + waitForExplicitFinish(); + + const PREF_TRIMURL = "browser.urlbar.trimURLs"; + const PREF_AUTOFILL = "browser.urlbar.autoFill"; + + registerCleanupFunction(function () { + Services.prefs.clearUserPref(PREF_TRIMURL); + Services.prefs.clearUserPref(PREF_AUTOFILL); + gURLBar.handleRevert(); + }); + Services.prefs.setBoolPref(PREF_TRIMURL, true); + Services.prefs.setBoolPref(PREF_AUTOFILL, true); + + // Adding a tab would hit switch-to-tab, so it's safer to just add a visit. + let callback = { + handleError: function () {}, + handleResult: function () {}, + handleCompletion: continue_test + }; + let history = Cc["@mozilla.org/browser/history;1"] + .getService(Ci.mozIAsyncHistory); + history.updatePlaces({ uri: NetUtil.newURI("http://www.autofilltrimurl.com/") + , visits: [ { transitionType: Ci.nsINavHistoryService.TRANSITION_TYPED + , visitDate: Date.now() * 1000 + } ] + }, callback); +} + +function continue_test() { + function test_autoFill(aTyped, aExpected, aCallback) { + gURLBar.inputField.value = aTyped.substr(0, aTyped.length - 1); + gURLBar.focus(); + gURLBar.selectionStart = aTyped.length - 1; + gURLBar.selectionEnd = aTyped.length - 1; + + EventUtils.synthesizeKey(aTyped.substr(-1), {}); + waitForSearchComplete(function () { + is(gURLBar.value, aExpected, "trim was applied correctly"); + aCallback(); + }); + } + + test_autoFill("http://", "http://", function () { + test_autoFill("http://a", "http://autofilltrimurl.com/", function () { + test_autoFill("http://www.autofilltrimurl.com", "http://www.autofilltrimurl.com/", function () { + // Now ensure selecting from the popup correctly trims. + is(gURLBar.controller.matchCount, 1, "Found the expected number of matches"); + EventUtils.synthesizeKey("VK_DOWN", {}); + is(gURLBar.value, "www.autofilltrimurl.com", "trim was applied correctly"); + gURLBar.closePopup(); + waitForClearHistory(finish); + }); + }); + }); +} + +function waitForClearHistory(aCallback) { + Services.obs.addObserver(function observeCH(aSubject, aTopic, aData) { + Services.obs.removeObserver(observeCH, PlacesUtils.TOPIC_EXPIRATION_FINISHED); + aCallback(); + }, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false); + PlacesUtils.bhistory.removeAllPages(); +} + +let gOnSearchComplete = null; +function waitForSearchComplete(aCallback) { + info("Waiting for onSearchComplete"); + if (!gOnSearchComplete) { + gOnSearchComplete = gURLBar.onSearchComplete; + registerCleanupFunction(() => { + gURLBar.onSearchComplete = gOnSearchComplete; + }); + } + gURLBar.onSearchComplete = function () { + ok(gURLBar.popupOpen, "The autocomplete popup is correctly open"); + gOnSearchComplete.apply(gURLBar); + aCallback(); + } +}