зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1715137 - Part 3 - Port test_preloaded_sites.js. r=adw
Differential Revision: https://phabricator.services.mozilla.com/D118220
This commit is contained in:
Родитель
914315ca8c
Коммит
45ebbdc987
|
@ -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]
|
||||
|
|
Загрузка…
Ссылка в новой задаче