Bug 1715137 - Part 3 - Port test_preloaded_sites.js. r=adw

Differential Revision: https://phabricator.services.mozilla.com/D118220
This commit is contained in:
Harry Twyford 2021-06-22 21:02:58 +00:00
Родитель 914315ca8c
Коммит 45ebbdc987
6 изменённых файлов: 595 добавлений и 337 удалений

Просмотреть файл

@ -157,7 +157,7 @@ class ProviderPreloadedSites extends UrlbarProvider {
// will be guaranteed to return a result very quickly using this approach.
// Bug 1651101 is filed to improve this behaviour.
let result = await this._getAutofillResult(queryContext);
if (!result || instance != this.queryInstance) {
if (instance != this.queryInstance) {
return false;
}
this._autofillData = { result, instance };
@ -176,20 +176,12 @@ class ProviderPreloadedSites extends UrlbarProvider {
// fetched. We don't expect this to be true since we also check the instance
// in isActive and clear _autofillData in cancelQuery, but we sanity check it.
if (
!this._autofillData ||
this._autofillData.instance != this.queryInstance
this._autofillData.result &&
this._autofillData.instance == this.queryInstance
) {
this.logger.error("startQuery invoked with an invalid _autofillData");
return;
}
this._autofillData.result.heuristic = true;
addCallback(this, this._autofillData.result);
this._autofillData = null;
if (!this._searchString) {
// The user hasn't typed anything, or they've only typed a scheme.
return;
this._autofillData.result.heuristic = true;
addCallback(this, this._autofillData.result);
this._autofillData = null;
}
// Now, add non-autofill preloaded sites.

Просмотреть файл

@ -57,6 +57,7 @@ add_task(function makeResultBuckets_true() {
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_BOOKMARK_KEYWORD },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_UNIFIED_COMPLETE },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_AUTOFILL },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_PRELOADED },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_TOKEN_ALIAS_ENGINE },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_FALLBACK },
],
@ -115,6 +116,10 @@ add_task(function makeResultBuckets_true() {
flex: 2,
group: UrlbarUtils.RESULT_GROUP.ABOUT_PAGES,
},
{
flex: 1,
group: UrlbarUtils.RESULT_GROUP.PRELOADED,
},
],
},
{
@ -148,6 +153,7 @@ add_task(function makeResultBuckets_false() {
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_BOOKMARK_KEYWORD },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_UNIFIED_COMPLETE },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_AUTOFILL },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_PRELOADED },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_TOKEN_ALIAS_ENGINE },
{ group: UrlbarUtils.RESULT_GROUP.HEURISTIC_FALLBACK },
],
@ -184,6 +190,10 @@ add_task(function makeResultBuckets_false() {
flex: 2,
group: UrlbarUtils.RESULT_GROUP.ABOUT_PAGES,
},
{
flex: 1,
group: UrlbarUtils.RESULT_GROUP.PRELOADED,
},
],
},
{

Просмотреть файл

@ -0,0 +1,578 @@
/**
* Test for bug 1211726 - preload list of top web sites for better
* autocompletion on empty profiles.
*/
testEngine_setup();
const PREF_FEATURE_ENABLED = "browser.urlbar.usepreloadedtopurls.enabled";
const PREF_FEATURE_EXPIRE_DAYS =
"browser.urlbar.usepreloadedtopurls.expire_days";
XPCOMUtils.defineLazyModuleGetters(this, {
UrlbarProviderPreloadedSites:
"resource:///modules/UrlbarProviderPreloadedSites.jsm",
});
Cu.importGlobalProperties(["fetch"]);
let yahoooURI = "https://yahooo.com/";
let gooogleURI = "https://gooogle.com/";
UrlbarProviderPreloadedSites.populatePreloadedSiteStorage([
[yahoooURI, "Yahooo"],
[gooogleURI, "Gooogle"],
]);
async function assert_feature_works(condition) {
info("List Results do appear " + condition);
let context = createContext("ooo", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
heuristic: true,
engineName: SUGGESTIONS_ENGINE_NAME,
providerName: "HeuristicFallback",
}),
makeVisitResult(context, {
uri: yahoooURI,
title: "Yahooo",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${yahoooURI}`,
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: gooogleURI,
title: "Gooogle",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${gooogleURI}`,
providerName: "PreloadedSites",
}),
],
});
info("Autofill does appear " + condition);
context = createContext("gooo", { isPrivate: false });
await check_results({
context,
autofilled: "gooogle.com/",
completed: gooogleURI,
matches: [
makeVisitResult(context, {
uri: gooogleURI,
title: gooogleURI.slice(0, -1), // Trim trailing slash.
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: `page-icon:${gooogleURI}`,
providerName: "PreloadedSites",
heuristic: true,
}),
],
});
}
async function assert_feature_does_not_appear(condition) {
info("List Results don't appear " + condition);
let context = createContext("ooo", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
heuristic: true,
engineName: SUGGESTIONS_ENGINE_NAME,
providerName: "HeuristicFallback",
}),
],
});
info("Autofill doesn't appear " + condition);
context = createContext("gooo", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
heuristic: true,
engineName: SUGGESTIONS_ENGINE_NAME,
providerName: "HeuristicFallback",
}),
],
});
}
add_task(async function test_it_works() {
// Not expired but OFF
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, false);
await assert_feature_does_not_appear("when OFF by prefs");
// Now turn it ON
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
await assert_feature_works("when ON by prefs");
// And expire
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 0);
await assert_feature_does_not_appear("when expired");
await cleanupPlaces();
});
add_task(async function test_sorting_against_bookmark() {
let boookmarkURI = "https://boookmark.com/";
await PlacesTestUtils.addBookmarkWithDetails({
uri: boookmarkURI,
title: "Boookmark",
});
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
info("Preloaded Top Sites are placed lower than Bookmarks");
let context = createContext("ooo", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
engineName: SUGGESTIONS_ENGINE_NAME,
heuristic: true,
}),
makeBookmarkResult(context, {
uri: boookmarkURI,
title: "Boookmark",
}),
makeVisitResult(context, {
uri: yahoooURI,
title: "Yahooo",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${yahoooURI}`,
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: gooogleURI,
title: "Gooogle",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${gooogleURI}`,
providerName: "PreloadedSites",
}),
],
});
await cleanupPlaces();
});
add_task(async function test_sorting_against_history() {
let histoooryURI = "https://histooory.com/";
await PlacesTestUtils.addVisits({ uri: histoooryURI, title: "Histooory" });
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
info("Preloaded Top Sites are placed lower than History entries");
let context = createContext("ooo", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
engineName: SUGGESTIONS_ENGINE_NAME,
heuristic: true,
}),
makeVisitResult(context, {
uri: histoooryURI,
title: "Histooory",
}),
makeVisitResult(context, {
uri: yahoooURI,
title: "Yahooo",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${yahoooURI}`,
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: gooogleURI,
title: "Gooogle",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: `page-icon:${gooogleURI}`,
providerName: "PreloadedSites",
}),
],
});
await cleanupPlaces();
});
add_task(async function test_scheme_and_www() {
// Order is important to check sorting
let sites = [
["https://www.ooops-https-www.com/", "Ooops"],
["https://ooops-https.com/", "Ooops"],
["HTTP://ooops-HTTP.com/", "Ooops"],
["HTTP://www.ooops-HTTP-www.com/", "Ooops"],
["https://foo.com/", "Title with www"],
["https://www.bar.com/", "Tile"],
];
let titlesMap = new Map(sites);
UrlbarProviderPreloadedSites.populatePreloadedSiteStorage(sites);
// No matches when just typing the protocol.
let context = createContext("https://", { isPrivate: false });
await check_results({
context,
matches: [
makeSearchResult(context, {
engineName: SUGGESTIONS_ENGINE_NAME,
heuristic: true,
}),
],
});
context = createContext("www.", { isPrivate: false });
await check_results({
context,
autofilled: "www.ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
makeVisitResult(context, {
uri: "http://www.ooops-http-www.com/",
title: titlesMap.get("HTTP://www.ooops-HTTP-www.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:http://www.ooops-http-www.com/",
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: "https://www.bar.com/",
title: titlesMap.get("https://www.bar.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:https://www.bar.com/",
providerName: "PreloadedSites",
}),
],
});
context = createContext("http://www.", { isPrivate: false });
await check_results({
context,
autofilled: "http://www.ooops-http-www.com/",
completed: "http://www.ooops-http-www.com/",
matches: [
makeVisitResult(context, {
uri: "http://www.ooops-http-www.com/",
title: "www.ooops-http-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:http://www.ooops-http-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
],
});
context = createContext("ftp://ooops", { isPrivate: false });
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "ftp://ooops/",
title: "ftp://ooops/",
providerName: "HeuristicFallback",
heuristic: true,
}),
],
});
context = createContext("ww", { isPrivate: false });
await check_results({
context,
autofilled: "www.ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
makeVisitResult(context, {
uri: "http://www.ooops-http-www.com/",
title: titlesMap.get("HTTP://www.ooops-HTTP-www.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:http://www.ooops-http-www.com/",
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: "https://foo.com/",
title: titlesMap.get("https://foo.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:https://foo.com/",
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: "https://www.bar.com/",
title: titlesMap.get("https://www.bar.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:https://www.bar.com/",
providerName: "PreloadedSites",
}),
],
});
context = createContext("ooops", { isPrivate: false });
await check_results({
context,
autofilled: "ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
makeVisitResult(context, {
uri: "https://ooops-https.com/",
title: titlesMap.get("https://ooops-https.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:https://ooops-https.com/",
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: "http://ooops-http.com/",
title: titlesMap.get("HTTP://ooops-HTTP.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:http://ooops-http.com/",
providerName: "PreloadedSites",
}),
makeVisitResult(context, {
uri: "http://www.ooops-http-www.com/",
title: titlesMap.get("HTTP://www.ooops-HTTP-www.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:http://www.ooops-http-www.com/",
providerName: "PreloadedSites",
}),
],
});
context = createContext("www.ooops", { isPrivate: false });
await check_results({
context,
autofilled: "www.ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
makeVisitResult(context, {
uri: "http://www.ooops-http-www.com/",
title: titlesMap.get("HTTP://www.ooops-HTTP-www.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:http://www.ooops-http-www.com/",
providerName: "PreloadedSites",
}),
],
});
context = createContext("ooops-https-www", { isPrivate: false });
await check_results({
context,
autofilled: "ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
],
});
context = createContext("www.ooops-https.", { isPrivate: false });
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "http://www.ooops-https./",
title: "http://www.ooops-https./",
providerName: "HeuristicFallback",
heuristic: true,
}),
makeSearchResult(context, {
engineName: SUGGESTIONS_ENGINE_NAME,
providerName: "HeuristicFallback",
}),
],
});
context = createContext("https://ooops", { isPrivate: false });
await check_results({
context,
autofilled: "https://ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
makeVisitResult(context, {
uri: "https://ooops-https.com/",
title: titlesMap.get("https://ooops-https.com/"),
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
tags: null,
iconUri: "page-icon:https://ooops-https.com/",
providerName: "PreloadedSites",
}),
],
});
context = createContext("https://www.ooops", { isPrivate: false });
await check_results({
context,
autofilled: "https://www.ooops-https-www.com/",
completed: "https://www.ooops-https-www.com/",
matches: [
makeVisitResult(context, {
uri: "https://www.ooops-https-www.com/",
title: "https://www.ooops-https-www.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: "page-icon:https://www.ooops-https-www.com/",
providerName: "PreloadedSites",
heuristic: true,
}),
],
});
context = createContext("http://www.ooops-http.", { isPrivate: false });
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "http://www.ooops-http./",
title: "http://www.ooops-http./",
providerName: "HeuristicFallback",
heuristic: true,
}),
],
});
context = createContext("http://ooops-https", { isPrivate: false });
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "http://ooops-https/",
title: "http://ooops-https/",
providerName: "HeuristicFallback",
heuristic: true,
}),
],
});
await cleanupPlaces();
});
add_task(async function test_data_file() {
let response = await fetch(
"chrome://browser/content/urlbar/preloaded-top-urls.json"
);
info("Source file is supplied and fetched OK");
Assert.ok(response.ok);
info("The JSON is parsed");
let sites = await response.json();
// Add test site so this test doesn't depend on the contents of the data file.
sites.push(["https://www.example.com/", "Example"]);
info("Storage is populated");
UrlbarProviderPreloadedSites.populatePreloadedSiteStorage(sites);
let lastSite = sites.pop();
let uri = Services.io.newURI(lastSite[0]);
info("Storage is populated from JSON correctly");
let context = createContext(uri.host, { isPrivate: false });
await check_results({
context,
autofilled: uri.host + "/",
completed: uri.spec,
matches: [
makeVisitResult(context, {
uri: uri.spec,
title: uri.spec.slice(0, -1), // Trim trailing slash.
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: `page-icon:${uri.spec}`,
providerName: "PreloadedSites",
heuristic: true,
}),
],
});
await cleanupPlaces();
});
add_task(async function test_partial_scheme() {
// "tt" should not result in a match of "ttps://whatever.com/".
let testUrl = "http://www.ttt.com/";
UrlbarProviderPreloadedSites.populatePreloadedSiteStorage([
[testUrl, "Test"],
]);
let context = createContext("tt", { isPrivate: false });
await check_results({
context,
autofilled: "ttt.com/",
completed: testUrl,
matches: [
makeVisitResult(context, {
uri: testUrl,
title: "www.ttt.com",
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
iconUri: `page-icon:${testUrl}`,
heuristic: true,
providerName: "PreloadedSites",
}),
],
});
await cleanupPlaces();
});

Просмотреть файл

@ -29,6 +29,7 @@ skip-if = os == 'linux' # bug 1474616
[test_providerKeywords.js]
[test_providerOmnibox.js]
[test_providerOpenTabs.js]
[test_providerPreloaded.js]
[test_providersManager.js]
[test_providersManager_filtering.js]
[test_providersManager_maxResults.js]

Просмотреть файл

@ -1,322 +0,0 @@
/**
* Test for bug 1211726 - preload list of top web sites for better
* autocompletion on empty profiles.
*/
const PREF_FEATURE_ENABLED = "browser.urlbar.usepreloadedtopurls.enabled";
const PREF_FEATURE_EXPIRE_DAYS =
"browser.urlbar.usepreloadedtopurls.expire_days";
const autocompleteObject = Cc[
"@mozilla.org/autocomplete/search;1?name=unifiedcomplete"
].getService(Ci.mozIPlacesAutoComplete);
Cu.importGlobalProperties(["fetch"]);
// With or without trailing slash - no matter. URI.spec does have it always.
// Then, check_autocomplete() doesn't cut it off (uses stripPrefix()).
let yahoooURI = NetUtil.newURI("https://yahooo.com/");
let gooogleURI = NetUtil.newURI("https://gooogle.com/");
autocompleteObject.populatePreloadedSiteStorage([
[yahoooURI.spec, "Yahooo"],
[gooogleURI.spec, "Gooogle"],
]);
async function assert_feature_works(condition) {
info("List Results do appear " + condition);
await check_autocomplete({
search: "ooo",
matches: [
{ uri: yahoooURI, title: "Yahooo", style: ["preloaded-top-site"] },
{ uri: gooogleURI, title: "Gooogle", style: ["preloaded-top-site"] },
],
});
info("Autofill does appear " + condition);
await check_autocomplete({
search: "gooo",
autofilled: "gooogle.com/", // Will fail without trailing slash
completed: "https://gooogle.com/",
});
}
async function assert_feature_does_not_appear(condition) {
info("List Results don't appear " + condition);
await check_autocomplete({
search: "ooo",
matches: [],
});
info("Autofill doesn't appear " + condition);
// "search" is what you type,
// "autofilled" is what you get in response in the url bar,
// "completed" is what you get there when you hit enter.
// So if they are all equal - it's the proof there was no autofill
// (knowing we have a suitable preloaded top site).
await check_autocomplete({
search: "gooo",
autofilled: "gooo",
completed: "gooo",
});
}
add_task(async function test_it_works() {
// Not expired but OFF
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, false);
await assert_feature_does_not_appear("when OFF by prefs");
// Now turn it ON
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
await assert_feature_works("when ON by prefs");
// And expire
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 0);
await assert_feature_does_not_appear("when expired");
await cleanup();
});
add_task(async function test_sorting_against_bookmark() {
let boookmarkURI = NetUtil.newURI("https://boookmark.com");
await PlacesTestUtils.addBookmarkWithDetails({
uri: boookmarkURI,
title: "Boookmark",
});
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
info("Preloaded Top Sites are placed lower than Bookmarks");
await check_autocomplete({
checkSorting: true,
search: "ooo",
matches: [
{ uri: boookmarkURI, title: "Boookmark", style: ["bookmark"] },
{ uri: yahoooURI, title: "Yahooo", style: ["preloaded-top-site"] },
{ uri: gooogleURI, title: "Gooogle", style: ["preloaded-top-site"] },
],
});
await cleanup();
});
add_task(async function test_sorting_against_history() {
let histoooryURI = NetUtil.newURI("https://histooory.com");
await PlacesTestUtils.addVisits({ uri: histoooryURI, title: "Histooory" });
Services.prefs.setBoolPref(PREF_FEATURE_ENABLED, true);
Services.prefs.setIntPref(PREF_FEATURE_EXPIRE_DAYS, 14);
info("Preloaded Top Sites are placed lower than History entries");
await check_autocomplete({
checkSorting: true,
search: "ooo",
matches: [
{ uri: histoooryURI, title: "Histooory" },
{ uri: yahoooURI, title: "Yahooo", style: ["preloaded-top-site"] },
{ uri: gooogleURI, title: "Gooogle", style: ["preloaded-top-site"] },
],
});
await cleanup();
});
add_task(async function test_scheme_and_www() {
// Order is important to check sorting
let sites = [
["https://www.ooops-https-www.com/", "Ooops"],
["https://ooops-https.com/", "Ooops"],
["HTTP://ooops-HTTP.com/", "Ooops"],
["HTTP://www.ooops-HTTP-www.com/", "Ooops"],
["https://foo.com/", "Title with www"],
["https://www.bar.com/", "Tile"],
];
let titlesMap = new Map(sites);
autocompleteObject.populatePreloadedSiteStorage(sites);
let tests = [
// User typed,
// Inline autofill (`autofilled`),
// Substitute after enter is pressed (`completed`),
// [List matches, with sorting]
// not tested if omitted
// !!! first one is always an autofill entry !!!
[
// Protocol by itself doesn't match anything
"https://",
"https://",
"https://",
[],
],
[
"www.",
"www.ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[
["www.ooops-https-www.com/", "https://www.ooops-https-www.com"],
"HTTP://www.ooops-HTTP-www.com/",
"https://www.bar.com/",
],
],
[
"http://www.",
"http://www.ooops-http-www.com/",
"http://www.ooops-http-www.com/",
[["http://www.ooops-http-www.com/", "www.ooops-http-www.com"]],
],
["ftp://ooops", "ftp://ooops", "ftp://ooops", []],
[
"ww",
"www.ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[
["www.ooops-https-www.com/", "https://www.ooops-https-www.com"],
"HTTP://www.ooops-HTTP-www.com/",
["https://foo.com/", "Title with www", ["preloaded-top-site"]],
"https://www.bar.com/",
],
],
[
"ooops",
"ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[
["ooops-https-www.com/", "https://www.ooops-https-www.com"],
"https://ooops-https.com/",
"HTTP://ooops-HTTP.com/",
"HTTP://www.ooops-HTTP-www.com/",
],
],
[
"www.ooops",
"www.ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[
["www.ooops-https-www.com/", "https://www.ooops-https-www.com"],
"HTTP://www.ooops-HTTP-www.com/",
],
],
[
"ooops-https-www",
"ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[["ooops-https-www.com/", "https://www.ooops-https-www.com"]],
],
["www.ooops-https.", "www.ooops-https.", "www.ooops-https.", []],
[
"https://ooops",
"https://ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[
["https://ooops-https-www.com/", "https://www.ooops-https-www.com"],
"https://ooops-https.com/",
],
],
[
"https://www.ooops",
"https://www.ooops-https-www.com/",
"https://www.ooops-https-www.com/",
[["https://www.ooops-https-www.com/", "https://www.ooops-https-www.com"]],
],
[
"http://www.ooops-http.",
"http://www.ooops-http.",
"http://www.ooops-http.",
[],
],
["http://ooops-https", "http://ooops-https", "http://ooops-https", []],
];
function toMatch(entry, index) {
if (Array.isArray(entry)) {
return {
value: entry[0],
comment: entry[1],
style: entry[2] || ["autofill", "heuristic", "preloaded-top-site"],
};
}
return {
uri: NetUtil.newURI(entry),
title: titlesMap.get(entry),
style: ["preloaded-top-site"],
};
}
for (let test of tests) {
let matches = test[3] ? test[3].map(toMatch) : null;
info("User types: " + test[0]);
await check_autocomplete({
checkSorting: true,
search: test[0],
autofilled: test[1].toLowerCase(),
completed: test[2].toLowerCase(),
matches,
});
}
await cleanup();
});
add_task(async function test_data_file() {
let response = await fetch(
"chrome://browser/content/urlbar/preloaded-top-urls.json"
);
info("Source file is supplied and fetched OK");
Assert.ok(response.ok);
info("The JSON is parsed");
let sites = await response.json();
info("Storage is populated");
autocompleteObject.populatePreloadedSiteStorage(sites);
let lastSite = sites.pop();
let uri = NetUtil.newURI(lastSite[0]);
info("Storage is populated from JSON correctly");
await check_autocomplete({
search: uri.host,
autofilled: uri.host + "/",
completed: uri.spec,
});
await cleanup();
});
add_task(async function test_partial_scheme() {
// "tt" should not result in a match of "ttps://whatever.com/".
autocompleteObject.populatePreloadedSiteStorage([
["http://www.ttt.com/", "Test"],
]);
await check_autocomplete({
search: "tt",
autofilled: "ttt.com/",
completed: "http://www.ttt.com/",
matches: [
{
value: "ttt.com/",
comment: "www.ttt.com",
style: ["autofill", "heuristic", "preloaded-top-site"],
},
],
});
await cleanup();
});

Просмотреть файл

@ -20,7 +20,6 @@ support-files =
[test_history_autocomplete_tags.js]
[test_ignore_protocol.js]
[test_multi_word_search.js]
[test_preloaded_sites.js]
[test_search_engine_restyle.js]
[test_special_search.js]
[test_swap_protocol.js]