Bug 1863360 - Make tests pass for app provided search engine class. r=Standard8

Differential Revision: https://phabricator.services.mozilla.com/D192862
This commit is contained in:
mcheang 2023-11-08 11:38:36 +00:00
parent 5a00aa459f
commit d8ddd3cc26
36 changed files with 1271 additions and 350 deletions

View file

@ -2,7 +2,10 @@
"data": [
{
"webExtension": {
"id": "basic@search.mozilla.org"
"id": "basic@search.mozilla.org",
"name": "basic",
"search_url": "https://mochi.test:8888/browser/browser/components/search/test/browser/?search={searchTerms}&foo=1",
"suggest_url": "https://mochi.test:8888/browser/browser/modules/test/browser/usageTelemetrySearchSuggestions.sjs?{searchTerms}"
},
"appliesTo": [
{

View file

@ -1866,18 +1866,16 @@
"us": {
"keyword": "@amazon",
"name": "Amazon.com",
"search_url": "https://www.amazon.com/exec/obidos/external-search/",
"search_form": "https://www.amazon.com/exec/obidos/external-search/",
"suggest_url": "https://completion.amazon.com/search/complete?q={searchTerms}&search-alias=aps&mkt=1",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=moz-us-20&sourceid=Mozilla-search"
"search_url": "https://www.amazon.com/exec/s",
"search_form": "https://www.amazon.com/",
"search_url_get_params": "k={searchTerms}"
},
"en": {
"keyword": "@amazon",
"name": "Amazon.com",
"search_url": "https://www.amazon.com/exec/obidos/external-search/",
"search_form": "https://www.amazon.com/exec/obidos/external-search/",
"suggest_url": "https://completion.amazon.com/search/complete?q={searchTerms}&search-alias=aps&mkt=1",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=mozilla-20&sourceid=Mozilla-search"
"search_url": "https://www.amazon.com/exec/s",
"search_form": "https://www.amazon.com/",
"search_url_get_params": "k={searchTerms}"
}
}
},
@ -1978,101 +1976,79 @@
"sweden": {
"keyword": "@amazon",
"name": "Amazon.se",
"search_url": "https://www.amazon.se/exec/obidos/external-search/",
"search_url": "https://www.amazon.se/s",
"search_form": "https://www.amazon.se/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=mozillasweede-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.se/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=704403121"
"search_url_get_params": "k={searchTerms}"
},
"france": {
"keyword": "@amazon",
"name": "Amazon.fr",
"search_url": "https://www.amazon.fr/exec/obidos/external-search/",
"search_url": "https://www.amazon.fr/exec/s",
"search_form": "https://www.amazon.fr/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=firefox-fr-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.fr/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=5"
"search_url_get_params": "k={searchTerms}"
},
"in": {
"keyword": "@amazon",
"name": "Amazon.in",
"search_url": "https://www.amazon.in/exec/obidos/external-search/",
"search_url": "https://www.amazon.in/s",
"search_form": "https://www.amazon.in/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.in/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=44571"
"search_url_get_params": "k={searchTerms}"
},
"spain": {
"keyword": "@amazon",
"name": "Amazon.es",
"search_url": "https://www.amazon.es/exec/obidos/external-search/",
"search_url": "https://www.amazon.es/s",
"search_form": "https://www.amazon.es/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=mozillaspain-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.es/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=44551"
"search_url_get_params": "k={searchTerms}"
},
"it": {
"keyword": "@amazon",
"name": "Amazon.it",
"search_url": "https://www.amazon.it/exec/obidos/external-search/",
"search_url": "https://www.amazon.it/s",
"search_form": "https://www.amazon.it/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=firefoxit-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.it/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=35691"
"search_url_get_params": "k={searchTerms}"
},
"ca": {
"keyword": "@amazon",
"name": "Amazon.ca",
"search_url": "https://www.amazon.ca/exec/obidos/external-search/",
"search_form": "https://www.amazon.ca/exec/obidos/external-search/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=mozillacanada-20&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.ca/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=7"
"search_url": "https://www.amazon.ca/s",
"search_form": "https://www.amazon.ca/",
"search_url_get_params": "k={searchTerms}"
},
"en-GB": {
"keyword": "@amazon",
"name": "Amazon.co.uk",
"search_url": "https://www.amazon.co.uk/exec/obidos/external-search/",
"search_url": "https://www.amazon.co.uk/s",
"search_form": "https://www.amazon.co.uk/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=firefox-uk-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.co.uk/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=3"
"search_url_get_params": "k={searchTerms}"
},
"au": {
"keyword": "@amazon",
"name": "Amazon.com.au",
"search_url": "https://www.amazon.com.au/exec/obidos/external-search/",
"search_form": "https://www.amazon.com.au/exec/obidos/external-search/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended",
"suggest_url": "https://completion.amazon.com.au/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=111172"
"search_url": "https://www.amazon.com.au/s",
"search_form": "https://www.amazon.com.au/",
"search_url_get_params": "k={searchTerms}"
},
"nl": {
"keyword": "@amazon",
"name": "Amazon.nl",
"search_url": "https://www.amazon.nl/gp/search",
"search_url": "https://www.amazon.nl/s",
"search_form": "https://www.amazon.nl/",
"search_url_get_params": "ie={inputEncoding}&tag=mozillanether-21&index=aps&keywords={searchTerms}",
"suggest_url": "https://completion.amazon.nl/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=328451"
"search_url_get_params": "k={searchTerms}"
},
"de": {
"keyword": "@amazon",
"name": "Amazon.de",
"search_url": "https://www.amazon.de/exec/obidos/external-search/",
"search_url": "https://www.amazon.de/s",
"search_form": "https://www.amazon.de/",
"search_url_get_params": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&tag=firefox-de-21&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.de/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=4"
"search_url_get_params": "k={searchTerms}"
},
"jp": {
"keyword": "@amazon",
"name": "Amazon.co.jp",
"search_url": "https://www.amazon.co.jp/exec/obidos/external-search/",
"search_form": "https://www.amazon.co.jp/",
"search_url_get_params": "field-keywords={searchTerms}&mode=blended&tag=mozillajapan-fx-22&sourceid=Mozilla-search",
"suggest_url": "https://completion.amazon.co.jp/search/complete",
"suggest_url_get_params": "q={searchTerms}&search-alias=aps&mkt=6"
"search_url_get_params": "field-keywords={searchTerms}&mode=blended&tag=mozillajapan-fx-22&sourceid=Mozilla-search"
}
}
},
@ -2098,16 +2074,16 @@
"default": {
"keyword": "@amazon",
"name": "亚马逊",
"search_url": "https://www.amazon.cn/mn/searchApp",
"search_url": "https://www.amazon.cn/s",
"search_form": "https://www.amazon.cn/",
"search_url_get_params": "ix=sunray&pageletid=headsearch&searchType=&Go.x=0&Go.y=0&bestSaleNum=0&keywords={searchTerms}"
"search_url_get_params": "k={searchTerms}"
},
"mozillaonline": {
"keyword": "@amazon",
"name": "亚马逊",
"search_url": "https://www.amazon.cn/gp/search",
"search_url": "https://www.amazon.cn/gp/s",
"search_form": "https://www.amazon.cn/",
"search_url_get_params": "ie=UTF8&camp=536&creative=3200&index=aps&linkCode=ur2&tag=mozilla&keywords={searchTerms}"
"search_url_get_params": "k={searchTerms}"
}
}
},

View file

@ -33,6 +33,9 @@ export class AppProvidedSearchEngine extends SearchEngine {
id,
});
this._extensionID = extensionId;
this._locale = details?.locale;
if (details) {
if (!details.config.webExtension.id) {
throw Components.Exception(
@ -58,6 +61,8 @@ export class AppProvidedSearchEngine extends SearchEngine {
* The search engine configuration for application provided engines.
*/
update({ locale, configuration } = {}) {
this._urls = [];
this._iconMapObj = null;
this.#init(locale, configuration);
lazy.SearchUtils.notifyAction(this, lazy.SearchUtils.MODIFIED_TYPE.CHANGED);
}
@ -68,18 +73,33 @@ export class AppProvidedSearchEngine extends SearchEngine {
*
* @param {object} options
* The options object.
* @param {object} [options.config]
* @param {object} [options.configuration]
* The search engine configuration for application provided engines.
* @param {string} [options.locale]
* The locale to use for getting details of the search engine.
* @returns {boolean}
* Returns true if the engine was updated, false otherwise.
*/
async updateIfNoNameChange({ config, locale }) {
if (this.name != config.search_provider.name.trim()) {
async updateIfNoNameChange({ configuration, locale }) {
let newName;
if (locale != "default") {
newName = configuration.webExtension.searchProvider[locale].name;
} else if (
locale == "default" &&
configuration.webExtension.default_locale
) {
newName =
configuration.webExtension.searchProvider[
configuration.webExtension.default_locale
].name;
} else {
newName = configuration.webExtension.name;
}
if (this.name != newName.trim()) {
return false;
}
this.update(locale, config);
this.update({ locale, configuration });
return true;
}
@ -111,7 +131,8 @@ export class AppProvidedSearchEngine extends SearchEngine {
get isGeneralPurposeEngine() {
return !!(
this.id && lazy.SearchUtils.GENERAL_SEARCH_ENGINE_IDS.has(this.id)
this._extensionID &&
lazy.SearchUtils.GENERAL_SEARCH_ENGINE_IDS.has(this._extensionID)
);
}

View file

@ -1650,29 +1650,34 @@ export class SearchService {
this.#addEngineToStore(engine);
}
if (!lazy.SearchUtils.newSearchConfigEnabled) {
lazy.logConsole.debug(
"#loadEngines: loading",
this.#startupExtensions.size,
"engines reported by AddonManager startup"
);
for (let extension of this.#startupExtensions) {
try {
await this.#installExtensionEngine(
extension,
[lazy.SearchUtils.DEFAULT_TAG],
true
);
} catch (ex) {
lazy.logConsole.error(
`#installExtensionEngine failed for ${extension.id}`,
ex
);
}
}
this.#startupExtensions.clear();
if (
this.#startupExtensions.size &&
lazy.SearchUtils.newSearchConfigEnabled
) {
await lazy.AddonManager.readyPromise;
}
lazy.logConsole.debug(
"#loadEngines: loading",
this.#startupExtensions.size,
"engines reported by AddonManager startup"
);
for (let extension of this.#startupExtensions) {
try {
await this.#installExtensionEngine(
extension,
[lazy.SearchUtils.DEFAULT_TAG],
true
);
} catch (ex) {
lazy.logConsole.error(
`#installExtensionEngine failed for ${extension.id}`,
ex
);
}
}
this.#startupExtensions.clear();
this.#loadEnginesFromPolicies();
this.#loadEnginesFromSettings(settings.engines);

View file

@ -2,7 +2,28 @@
"data": [
{
"webExtension": {
"id": "engine@search.mozilla.org"
"id": "engine@search.mozilla.org",
"name": "Test search engine",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
}
],
"suggest_url": "https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}"
},
"appliesTo": [
{
@ -13,7 +34,33 @@
},
{
"webExtension": {
"id": "engine-rel-searchform-purpose@search.mozilla.org"
"id": "engine-rel-searchform-purpose@search.mozilla.org",
"name": "engine-rel-searchform-purpose",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "searchbar",
"value": "sb"
}
]
},
"orderHint": 1000,
"appliesTo": [
@ -26,7 +73,15 @@
},
{
"webExtension": {
"id": "engine-chromeicon@search.mozilla.org"
"id": "engine-chromeicon@search.mozilla.org",
"name": "engine-chromeicon",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 1000,
"appliesTo": [
@ -43,7 +98,19 @@
},
{
"webExtension": {
"id": "engine-resourceicon@search.mozilla.org"
"id": "engine-resourceicon@search.mozilla.org",
"name": "engine-resourceicon",
"search_url": "https://www.google.com/search",
"search_provider": {
"en": {
"name": "engine-resourceicon",
"search_url": "https://www.google.com/search"
},
"gd": {
"name": "engine-resourceicon-gd",
"search_url": "https://www.google.com/search"
}
}
},
"appliesTo": [
{
@ -57,7 +124,28 @@
},
{
"webExtension": {
"id": "engine-reordered@search.mozilla.org"
"id": "engine-reordered@search.mozilla.org",
"name": "Test search engine (Reordered)",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
}
],
"suggest_url": "https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}"
},
"appliesTo": [
{
@ -69,7 +157,25 @@
},
{
"webExtension": {
"id": "engine-pref@search.mozilla.org"
"id": "engine-pref@search.mozilla.org",
"name": "engine-pref",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "code",
"condition": "pref",
"pref": "code"
},
{
"name": "test",
"condition": "pref",
"pref": "test"
}
]
},
"appliesTo": [
{

View file

@ -2,7 +2,28 @@
"data": [
{
"webExtension": {
"id": "engine@search.mozilla.org"
"id": "engine@search.mozilla.org",
"name": "Test search engine",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
}
],
"suggest_url": "https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}"
},
"orderHint": 10000,
"appliesTo": [
@ -15,7 +36,25 @@
},
{
"webExtension": {
"id": "engine-pref@search.mozilla.org"
"id": "engine-pref@search.mozilla.org",
"name": "engine-pref",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "code",
"condition": "pref",
"pref": "code"
},
{
"name": "test",
"condition": "pref",
"pref": "test"
}
]
},
"orderHint": 7000,
"appliesTo": [
@ -29,7 +68,33 @@
},
{
"webExtension": {
"id": "engine-rel-searchform-purpose@search.mozilla.org"
"id": "engine-rel-searchform-purpose@search.mozilla.org",
"name": "engine-rel-searchform-purpose",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "searchbar",
"value": "sb"
}
]
},
"orderHint": 6000,
"appliesTo": [
@ -46,7 +111,15 @@
},
{
"webExtension": {
"id": "engine-chromeicon@search.mozilla.org"
"id": "engine-chromeicon@search.mozilla.org",
"name": "engine-chromeicon",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 8000,
"appliesTo": [
@ -63,7 +136,18 @@
},
{
"webExtension": {
"id": "engine-resourceicon@search.mozilla.org"
"id": "engine-resourceicon@search.mozilla.org",
"default_locale": "en",
"searchProvider": {
"en": {
"name": "engine-resourceicon",
"search_url": "https://www.google.com/search"
},
"gd": {
"name": "engine-resourceicon-gd",
"search_url": "https://www.google.com/search"
}
}
},
"orderHint": 9000,
"appliesTo": [
@ -83,7 +167,28 @@
},
{
"webExtension": {
"id": "engine-reordered@search.mozilla.org"
"id": "engine-reordered@search.mozilla.org",
"name": "Test search engine (Reordered)",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "contextmenu",
"value": "rcs"
},
{
"name": "channel",
"condition": "purpose",
"purpose": "keyword",
"value": "fflb"
}
],
"suggest_url": "https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}"
},
"orderHint": 5000,
"appliesTo": [

View file

@ -2,7 +2,15 @@
"data": [
{
"webExtension": {
"id": "engine1@search.mozilla.org"
"id": "engine1@search.mozilla.org",
"name": "engine1",
"search_url": "https://1.example.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 10000,
"appliesTo": [
@ -15,7 +23,15 @@
},
{
"webExtension": {
"id": "engine2@search.mozilla.org"
"id": "engine2@search.mozilla.org",
"name": "engine2",
"search_url": "https://2.example.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 7000,
"appliesTo": [
@ -32,7 +48,15 @@
},
{
"webExtension": {
"id": "exp2@search.mozilla.org"
"id": "exp2@search.mozilla.org",
"name": "exp2",
"search_url": "https://2.example.com/searchexp",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 5000,
"appliesTo": [
@ -45,7 +69,15 @@
},
{
"webExtension": {
"id": "exp3@search.mozilla.org"
"id": "exp3@search.mozilla.org",
"name": "exp3",
"search_url": "https://3.example.com/searchexp",
"params": [
{
"name": "q",
"value": "{searchTerms}"
}
]
},
"orderHint": 20000,
"appliesTo": [

View file

@ -2,7 +2,12 @@
"data": [
{
"webExtension": {
"id": "get@search.mozilla.org"
"id": "get@search.mozilla.org",
"name": "Get Engine",
"search_url": "https://example.com",
"search_url_get_params": "webExtension=1&search={searchTerms}",
"suggest_url": "https://example.com",
"suggest_url_get_params": "webExtension=1&suggest={searchTerms}"
},
"params": {
"searchUrlGetParams": [
@ -23,7 +28,12 @@
},
{
"webExtension": {
"id": "post@search.mozilla.org"
"id": "post@search.mozilla.org",
"name": "Post Engine",
"search_url": "https://example.com",
"search_url_post_params": "webExtension=1&search={searchTerms}",
"suggest_url": "https://example.com",
"suggest_url_post_params": "webExtension=1&suggest={searchTerms}"
},
"params": {
"searchUrlPostParams": [

View file

@ -2,7 +2,20 @@
"data": [
{
"webExtension": {
"id": "basic@search.mozilla.org"
"id": "basic@search.mozilla.org",
"name": "basic",
"search_url": "https://ar.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B5:%D8%A8%D8%AD%D8%AB",
"params": [
{
"name": "search",
"value": "{searchTerms}"
},
{
"name": "sourceId",
"value": "Mozilla-search"
}
],
"suggest_url": "https://ar.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
},
"telemetryId": "telemetry",
"appliesTo": [
@ -14,7 +27,20 @@
},
{
"webExtension": {
"id": "simple@search.mozilla.org"
"id": "simple@search.mozilla.org",
"name": "Simple Engine",
"search_url": "https://example.com",
"params": [
{
"name": "sourceId",
"value": "Mozilla-search"
},
{
"name": "search",
"value": "{searchTerms}"
}
],
"suggest_url": "https://example.com?search={searchTerms}"
},
"appliesTo": [
{

View file

@ -2,7 +2,46 @@
"data": [
{
"webExtension": {
"id": "plainengine@search.mozilla.org"
"id": "plainengine@search.mozilla.org",
"name": "Plain",
"search_url": "https://duckduckgo.com/",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "t",
"condition": "purpose",
"purpose": "contextmenu",
"value": "ffcm"
},
{
"name": "t",
"condition": "purpose",
"purpose": "keyword",
"value": "ffab"
},
{
"name": "t",
"condition": "purpose",
"purpose": "searchbar",
"value": "ffsb"
},
{
"name": "t",
"condition": "purpose",
"purpose": "homepage",
"value": "ffhp"
},
{
"name": "t",
"condition": "purpose",
"purpose": "newtab",
"value": "ffnt"
}
],
"suggest_url": "https://ac.duckduckgo.com/ac/q={searchTerms}&type=list"
},
"orderHint": 10000,
"sendAttributionRequest": true,
@ -15,7 +54,28 @@
},
{
"webExtension": {
"id": "special-engine@search.mozilla.org"
"id": "special-engine@search.mozilla.org",
"name": "Special",
"search_url": "https://www.google.com/search",
"params": [
{
"name": "q",
"value": "{searchTerms}"
},
{
"name": "client",
"condition": "purpose",
"purpose": "keyword",
"value": "firefox-b-1-ab"
},
{
"name": "client",
"condition": "purpose",
"purpose": "searchbar",
"value": "firefox-b-1"
}
],
"suggest_url": "https://www.google.com/complete/search?client=firefox&q={searchTerms}"
},
"orderHint": 7000,
"appliesTo": [
@ -32,25 +92,37 @@
{
"webExtension": {
"id": "multilocale@search.mozilla.org",
"locales": ["an"]
"default_locale": "af",
"searchProvider": {
"an": {
"name": "Multilocale AN",
"description": "A enciclopedia Libre",
"search_url": "https://an.wikipedia.org/wiki/Especial:Mirar",
"suggest_url": "https://an.wikipedia.org/w/api.php"
},
"af": {
"name": "Multilocale AF",
"description": "Wikipedia, die vrye ensiklopedie",
"search_url": "https://af.wikipedia.org/wiki/Spesiaal:Soek",
"suggest_url": "https://af.wikipedia.org/w/api.php"
}
}
},
"orderHint": 6000,
"appliesTo": [
{
"included": { "regions": ["an"] },
"webExtension": {
"locales": ["an"]
},
"default": "yes"
}
]
},
{
"webExtension": {
"id": "multilocale@search.mozilla.org",
"locales": ["af", "an"]
},
"orderHint": 6500,
"appliesTo": [
},
{
"included": { "regions": ["af"] }
"included": { "regions": ["af"] },
"webExtension": {
"locales": ["af", "an"]
},
"orderHint": 6500
}
]
}

View file

@ -56,14 +56,18 @@ add_task(async function test_defaultPrivateEngine() {
normal: {
engineId: "engine",
displayName: "Test search engine",
loadPath: "[addon]engine@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine@search.mozilla.org"
: "[addon]engine@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
verified: "default",
},
private: {
engineId: "engine-pref",
displayName: "engine-pref",
loadPath: "[addon]engine-pref@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-pref@search.mozilla.org"
: "[addon]engine-pref@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
verified: "default",
},
@ -92,14 +96,18 @@ add_task(async function test_defaultPrivateEngine() {
normal: {
engineId: "engine",
displayName: "Test search engine",
loadPath: "[addon]engine@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine@search.mozilla.org"
: "[addon]engine@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
verified: "default",
},
private: {
engineId: "engine-rel-searchform-purpose",
displayName: "engine-rel-searchform-purpose",
loadPath: "[addon]engine-rel-searchform-purpose@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-rel-searchform-purpose@search.mozilla.org"
: "[addon]engine-rel-searchform-purpose@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=&channel=sb",
verified: "default",
},
@ -139,14 +147,18 @@ add_task(async function test_defaultPrivateEngine() {
normal: {
engineId: "engine",
displayName: "Test search engine",
loadPath: "[addon]engine@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine@search.mozilla.org"
: "[addon]engine@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
verified: "default",
},
private: {
engineId: "engine-chromeicon",
displayName: "engine-chromeicon",
loadPath: "[addon]engine-chromeicon@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-chromeicon@search.mozilla.org"
: "[addon]engine-chromeicon@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
verified: "default",
},

View file

@ -15,6 +15,28 @@ const CONFIG = [
{
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{

View file

@ -95,7 +95,7 @@ const TEST_CONFIG = [
const engineSelector = new SearchEngineSelectorOld();
add_setup(async function () {
const settings = await RemoteSettings(SearchUtils.SETTINGS_KEY);
const settings = await RemoteSettings(SearchUtils.OLD_SETTINGS_KEY);
sinon.stub(settings, "get").returns(TEST_CONFIG);
});

View file

@ -90,7 +90,7 @@ const expectedDefaultEngine = {
const engineSelector = new SearchEngineSelectorOld();
add_task(async function test_engine_selector_channels() {
const settings = await RemoteSettings(SearchUtils.SETTINGS_KEY);
const settings = await RemoteSettings(SearchUtils.OLD_SETTINGS_KEY);
sinon.stub(settings, "get").returns(TEST_CONFIG);
for (let [channel, expected] of Object.entries(expectedEnginesPerChannel)) {

View file

@ -66,6 +66,7 @@ const CONFIG = [
const engineSelector = new SearchEngineSelectorOld();
add_setup(async function () {
Services.prefs.setBoolPref("browser.search.newSearchConfig.enabled", false);
await SearchTestUtils.useTestEngines("data", null, CONFIG);
await AddonTestUtils.promiseStartupManager();
});

View file

@ -101,6 +101,7 @@ const tests = [
];
add_setup(async function () {
Services.prefs.setBoolPref("browser.search.newSearchConfig.enabled", false);
await SearchTestUtils.useTestEngines("data", null, CONFIG);
await AddonTestUtils.promiseStartupManager();

View file

@ -106,7 +106,7 @@ function getConfigData(testInput) {
const engineSelector = new SearchEngineSelectorOld();
add_task(async function () {
const settings = await RemoteSettings(SearchUtils.SETTINGS_KEY);
const settings = await RemoteSettings(SearchUtils.OLD_SETTINGS_KEY);
const getStub = sinon.stub(settings, "get");
let i = 0;

View file

@ -81,7 +81,7 @@ const TEST_CONFIG = [
const engineSelector = new SearchEngineSelectorOld();
add_setup(async function () {
const settings = await RemoteSettings(SearchUtils.SETTINGS_KEY);
const settings = await RemoteSettings(SearchUtils.OLD_SETTINGS_KEY);
sinon.stub(settings, "get").returns(TEST_CONFIG);
});

View file

@ -74,7 +74,9 @@ const TEST_CONFIG = [
let getStub;
add_setup(async function () {
const searchConfigSettings = await RemoteSettings(SearchUtils.SETTINGS_KEY);
const searchConfigSettings = await RemoteSettings(
SearchUtils.OLD_SETTINGS_KEY
);
getStub = sinon.stub(searchConfigSettings, "get");
// We expect this error from remove settings as we're invalidating the
@ -187,7 +189,7 @@ add_task(async function test_selector_config_update() {
getStub.resetHistory();
getStub.onFirstCall().returns(NEW_DATA);
await RemoteSettings(SearchUtils.SETTINGS_KEY).emit("sync", {
await RemoteSettings(SearchUtils.OLD_SETTINGS_KEY).emit("sync", {
data: {
current: NEW_DATA,
},
@ -210,7 +212,7 @@ add_task(async function test_selector_config_update() {
add_task(async function test_selector_db_modification() {
const engineSelector = new SearchEngineSelectorOld();
// Fill the database with some values that we can use to test that it is cleared.
const db = RemoteSettings(SearchUtils.SETTINGS_KEY).db;
const db = RemoteSettings(SearchUtils.OLD_SETTINGS_KEY).db;
await db.importChanges(
{},
Date.now(),
@ -256,7 +258,7 @@ add_task(async function test_selector_db_modification() {
add_task(async function test_selector_db_modification_never_succeeds() {
const engineSelector = new SearchEngineSelectorOld();
// Fill the database with some values that we can use to test that it is cleared.
const db = RemoteSettings(SearchUtils.SETTINGS_KEY).db;
const db = RemoteSettings(SearchUtils.OLD_SETTINGS_KEY).db;
await db.importChanges(
{},
Date.now(),
@ -300,7 +302,7 @@ add_task(async function test_empty_results() {
// Check that returning an empty result re-tries.
const engineSelector = new SearchEngineSelectorOld();
// Fill the database with some values that we can use to test that it is cleared.
const db = RemoteSettings(SearchUtils.SETTINGS_KEY).db;
const db = RemoteSettings(SearchUtils.OLD_SETTINGS_KEY).db;
await db.importChanges(
{},
Date.now(),

View file

@ -10,6 +10,28 @@ const CONFIG = [
{
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
orderHint: 30,
appliesTo: [
@ -24,6 +46,24 @@ const CONFIG = [
{
webExtension: {
id: "engine-pref@search.mozilla.org",
name: "engine-pref",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "code",
condition: "pref",
pref: "code",
},
{
name: "test",
condition: "pref",
pref: "test",
},
],
},
orderHint: 20,
appliesTo: [

View file

@ -5,11 +5,46 @@
const TEST_CONFIG = [
{
webExtension: { id: "plainengine@search.mozilla.org" },
webExtension: {
id: "plainengine@search.mozilla.org",
name: "Plain",
search_url: "https://duckduckgo.com/",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
suggest_url: "https://ac.duckduckgo.com/ac/q={searchTerms}&type=list",
},
appliesTo: [{ included: { everywhere: true } }],
},
{
webExtension: { id: "special-engine@search.mozilla.org" },
webExtension: {
id: "special-engine@search.mozilla.org",
name: "Special",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "client",
condition: "purpose",
purpose: "keyword",
value: "firefox-b-1-ab",
},
{
name: "client",
condition: "purpose",
purpose: "searchbar",
value: "firefox-b-1",
},
],
suggest_url:
"https://www.google.com/complete/search?client=firefox&q={searchTerms}",
},
appliesTo: [{ default: "yes", included: { regions: ["FR"] } }],
},
];

View file

@ -10,6 +10,28 @@ const GOOD_CONFIG = [
{
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{

View file

@ -375,7 +375,9 @@ for (const test of tests) {
{
defaultSearchEngine: "simple-addon",
defaultSearchEngineData: {
loadPath: "[addon]simple@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]simple@search.mozilla.org"
: "[addon]simple@search.mozilla.org",
name: "Simple Engine",
origin: "default",
submissionURL: test.expected.searchUrl.replace("{searchTerms}", ""),

View file

@ -8,6 +8,28 @@ const CONFIG = [
// Engine initially default, but the defaults will be changed to engine-pref.
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{
@ -26,6 +48,24 @@ const CONFIG = [
// This will become defaults when region is changed to FR.
webExtension: {
id: "engine-pref@search.mozilla.org",
name: "engine-pref",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "code",
condition: "pref",
pref: "code",
},
{
name: "test",
condition: "pref",
pref: "test",
},
],
},
appliesTo: [
{
@ -42,6 +82,14 @@ const CONFIG = [
// This engine will get an update when region is changed to FR.
webExtension: {
id: "engine-chromeicon@search.mozilla.org",
name: "engine-chromeicon",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [
{
@ -60,6 +108,32 @@ const CONFIG = [
// This engine will be removed when the region is changed to FR.
webExtension: {
id: "engine-rel-searchform-purpose@search.mozilla.org",
name: "engine-rel-searchform-purpose",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
{
name: "channel",
condition: "purpose",
purpose: "searchbar",
value: "sb",
},
],
},
appliesTo: [
{
@ -72,6 +146,28 @@ const CONFIG = [
// This engine will be added when the region is changed to FR.
webExtension: {
id: "engine-reordered@search.mozilla.org",
name: "Test search engine (Reordered)",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{
@ -83,6 +179,18 @@ const CONFIG = [
// This engine will be re-ordered and have a changed name, when moved to FR.
webExtension: {
id: "engine-resourceicon@search.mozilla.org",
name: "engine-resourceicon",
search_url: "https://www.google.com/search",
searchProvider: {
en: {
name: "engine-resourceicon",
search_url: "https://www.google.com/search",
},
gd: {
name: "engine-resourceicon-gd",
search_url: "https://www.google.com/search",
},
},
},
appliesTo: [
{
@ -102,6 +210,18 @@ const CONFIG = [
// This engine has the same name, but still should be replaced correctly.
webExtension: {
id: "engine-same-name@search.mozilla.org",
name: "engine-same-name",
search_url: "https://www.google.com/search?q={searchTerms}",
searchProvider: {
en: {
name: "engine-same-name",
search_url: "https://www.google.com/search?q={searchTerms}",
},
gd: {
name: "engine-same-name",
search_url: "https://www.example.com/search?q={searchTerms}",
},
},
},
appliesTo: [
{

View file

@ -8,6 +8,28 @@ const CONFIG = [
// Just a basic engine that won't be changed.
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{
@ -20,6 +42,17 @@ const CONFIG = [
// This engine will have the locale swapped when the experiment is set.
webExtension: {
id: "engine-same-name@search.mozilla.org",
default_locale: "en",
searchProvider: {
en: {
name: "engine-same-name",
search_url: "https://www.google.com/search?q={searchTerms}",
},
gd: {
name: "engine-same-name",
search_url: "https://www.example.com/search?q={searchTerms}",
},
},
},
appliesTo: [
{

View file

@ -12,6 +12,28 @@ const CONFIG = [
{
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [
{
@ -23,6 +45,17 @@ const CONFIG = [
{
webExtension: {
id: "engine-diff-name@search.mozilla.org",
default_locale: "en",
searchProvider: {
en: {
name: "engine-diff-name-en",
search_url: "https://en.wikipedia.com/search",
},
gd: {
name: "engine-diff-name-gd",
search_url: "https://gd.wikipedia.com/search",
},
},
},
appliesTo: [
{

View file

@ -10,6 +10,14 @@ const CONFIG = [
// Engine initially default, but the defaults will be changed to engine-pref.
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [
{
@ -26,6 +34,14 @@ const CONFIG = [
// This will become defaults when region is changed to FR.
webExtension: {
id: "engine-pref@search.mozilla.org",
name: "engine-pref",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [
{
@ -39,22 +55,9 @@ const CONFIG = [
},
];
const CONFIG_UPDATED = [
{
webExtension: {
id: "engine-pref@search.mozilla.org",
},
appliesTo: [
{
included: { everywhere: true },
},
{
included: { regions: ["FR"] },
default: "yes",
},
],
},
];
const CONFIG_UPDATED = CONFIG.filter(r =>
r.webExtension.id.startsWith("engine-pref")
);
let stub;
let settingsFilePath;

View file

@ -3,7 +3,14 @@
const TEST_CONFIG = [
{
webExtension: { id: "get@search.mozilla.org" },
webExtension: {
id: "get@search.mozilla.org",
name: "Get Engine",
search_url: "https://example.com",
search_url_get_params: "webExtension=1&search={searchTerms}",
suggest_url: "https://example.com",
suggest_url_get_params: "webExtension=1&suggest={searchTerms}",
},
appliesTo: [{ included: { everywhere: true } }],
suggestExtraParams: [
{

View file

@ -18,6 +18,53 @@ add_setup(async function () {
{
webExtension: {
id: "engine-purposes@search.mozilla.org",
name: "Test Engine With Purposes",
search_url: "https://www.example.com/search",
params: [
{
name: "form",
condition: "purpose",
purpose: "keyword",
value: "MOZKEYWORD",
},
{
name: "form",
condition: "purpose",
purpose: "contextmenu",
value: "MOZCONTEXT",
},
{
name: "form",
condition: "purpose",
purpose: "newtab",
value: "MOZNEWTAB",
},
{
name: "form",
condition: "purpose",
purpose: "searchbar",
value: "MOZSEARCHBAR",
},
{
name: "form",
condition: "purpose",
purpose: "homepage",
value: "MOZHOMEPAGE",
},
{
name: "pc",
value: "FIREFOX",
},
{
name: "channel",
condition: "pref",
pref: "testChannelEnabled",
},
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [
{

View file

@ -5,21 +5,38 @@
const CONFIG_DEFAULT = [
{
webExtension: { id: "plainengine@search.mozilla.org" },
webExtension: {
id: "plainengine@search.mozilla.org",
name: "Plain",
search_url: "https://duckduckgo.com/",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [{ included: { everywhere: true } }],
},
{
webExtension: { id: "special-engine@search.mozilla.org" },
webExtension: {
id: "special-engine@search.mozilla.org",
name: "Special",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [{ included: { everywhere: true } }],
},
];
const CONFIG_UPDATED = [
{
webExtension: { id: "plainengine@search.mozilla.org" },
appliesTo: [{ included: { everywhere: true } }],
},
];
const CONFIG_UPDATED = CONFIG_DEFAULT.filter(r =>
r.webExtension.id.startsWith("plainengine")
);
async function startup() {
let settingsFileWritten = promiseAfterSettings();

View file

@ -5,13 +5,34 @@
const CONFIG = [
{
webExtension: { id: "engine@search.mozilla.org" },
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [{ included: { everywhere: true } }],
},
{
// This engine has the same name, but still should be replaced correctly.
webExtension: {
id: "engine-same-name@search.mozilla.org",
default_locale: "en",
searchProvider: {
en: {
name: "engine-same-name",
search_url: "https://www.google.com/search?q={searchTerms}",
},
gd: {
name: "engine-same-name",
search_url: "https://www.example.com/search?q={searchTerms}",
},
},
},
appliesTo: [
{

View file

@ -16,24 +16,101 @@ ChromeUtils.defineESModuleGetters(this, {
const BASE_CONFIG = [
{
webExtension: { id: "engine@search.mozilla.org" },
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [{ included: { everywhere: true } }],
default: "yes",
},
];
const MAIN_CONFIG = [
{
webExtension: { id: "engine@search.mozilla.org" },
webExtension: {
id: "engine@search.mozilla.org",
name: "Test search engine",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "channel",
condition: "purpose",
purpose: "contextmenu",
value: "rcs",
},
{
name: "channel",
condition: "purpose",
purpose: "keyword",
value: "fflb",
},
],
suggest_url:
"https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
},
appliesTo: [{ included: { everywhere: true } }],
default: "no",
},
{
webExtension: { id: "engine-chromeicon@search.mozilla.org" },
webExtension: {
id: "engine-chromeicon@search.mozilla.org",
name: "engine-chromeicon",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
],
},
appliesTo: [{ included: { everywhere: true } }],
default: "yes-if-no-other",
},
{
webExtension: { id: "engine-fr@search.mozilla.org" },
webExtension: {
id: "engine-fr@search.mozilla.org",
name: "Test search engine (fr)",
search_url: "https://www.google.fr/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "ie",
value: "iso-8859-1",
},
{
name: "oe",
value: "iso-8859-1",
},
],
},
appliesTo: [
{ included: { everywhere: true } },
{
@ -45,7 +122,27 @@ const MAIN_CONFIG = [
default: "no",
},
{
webExtension: { id: "engine-pref@search.mozilla.org" },
webExtension: {
id: "engine-pref@search.mozilla.org",
name: "engine-pref",
search_url: "https://www.google.com/search",
params: [
{
name: "q",
value: "{searchTerms}",
},
{
name: "code",
condition: "pref",
pref: "code",
},
{
name: "test",
condition: "pref",
pref: "test",
},
],
},
appliesTo: [
{ included: { everywhere: true } },
{ included: { regions: ["DE"] }, default: "yes" },
@ -53,7 +150,11 @@ const MAIN_CONFIG = [
default: "no",
},
{
webExtension: { id: "engine2@search.mozilla.org" },
webExtension: {
id: "engine2@search.mozilla.org",
name: "A second test engine",
search_url: "https://duckduckgo.com/?q={searchTerms}",
},
appliesTo: [
{ included: { everywhere: true } },
{ included: { everywhere: true }, experiment: "test1", default: "yes" },
@ -65,31 +166,42 @@ const MAIN_CONFIG = [
const testSearchEngine = {
id: "engine",
name: "Test search engine",
loadPath: "[addon]engine@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine@search.mozilla.org"
: "[addon]engine@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
};
const testChromeIconEngine = {
id: "engine-chromeicon",
name: "engine-chromeicon",
loadPath: "[addon]engine-chromeicon@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-chromeicon@search.mozilla.org"
: "[addon]engine-chromeicon@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
};
const testFrEngine = {
id: "engine-fr",
name: "Test search engine (fr)",
loadPath: "[addon]engine-fr@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-fr@search.mozilla.org"
: "[addon]engine-fr@search.mozilla.org",
submissionUrl: "https://www.google.fr/search?q=&ie=iso-8859-1&oe=iso-8859-1",
};
const testPrefEngine = {
id: "engine-pref",
name: "engine-pref",
loadPath: "[addon]engine-pref@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine-pref@search.mozilla.org"
: "[addon]engine-pref@search.mozilla.org",
submissionUrl: "https://www.google.com/search?q=",
};
const testEngine2 = {
id: "engine2",
name: "A second test engine",
loadPath: "[addon]engine2@search.mozilla.org",
loadPath: SearchUtils.newSearchConfigEnabled
? "[app]engine2@search.mozilla.org"
: "[addon]engine2@search.mozilla.org",
submissionUrl: "https://duckduckgo.com/?q=",
};

View file

@ -24,9 +24,7 @@ add_task(async function test_validate_engines() {
},
},
],
webExtension: {
id: e.webExtension.id,
},
webExtension: e.webExtension,
};
});

View file

@ -140,113 +140,125 @@ function makeMultiLocaleExtension(version) {
};
}
add_setup(async function () {
await SearchTestUtils.useTestEngines("test-extensions", null, TEST_CONFIG);
await promiseStartupManager();
add_setup(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function () {
await SearchTestUtils.useTestEngines("test-extensions", null, TEST_CONFIG);
await promiseStartupManager();
registerCleanupFunction(promiseShutdownManager);
await Services.search.init();
});
registerCleanupFunction(promiseShutdownManager);
await Services.search.init();
}
);
add_task(async function basic_multilocale_test() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
add_task(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function basic_multilocale_test() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
let ext = ExtensionTestUtils.loadExtension(makeMultiLocaleExtension("2.0"));
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
let ext = ExtensionTestUtils.loadExtension(makeMultiLocaleExtension("2.0"));
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
let engine = await Services.search.getEngineByName("Multilocale AF");
Assert.equal(
engine.getSubmission("test").uri.spec,
"https://example.af/?q=test&version=2.0",
"Engine got update"
);
engine = await Services.search.getEngineByName("Multilocale AN");
Assert.equal(
engine.getSubmission("test").uri.spec,
"https://example.an/?q=test&version=2.0",
"Engine got update"
);
let engine = await Services.search.getEngineByName("Multilocale AF");
Assert.equal(
engine.getSubmission("test").uri.spec,
"https://example.af/?q=test&version=2.0",
"Engine got update"
);
engine = await Services.search.getEngineByName("Multilocale AN");
Assert.equal(
engine.getSubmission("test").uri.spec,
"https://example.an/?q=test&version=2.0",
"Engine got update"
);
await ext.unload();
});
await ext.unload();
}
);
add_task(async function upgrade_with_configuration_change_test() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
add_task(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function upgrade_with_configuration_change_test() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
let engine = await Services.search.getEngineByName("Plain");
Assert.ok(engine.isAppProvided);
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should have the configuration applied before update."
);
let engine = await Services.search.getEngineByName("Plain");
Assert.ok(engine.isAppProvided);
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should have the configuration applied before update."
);
let ext = ExtensionTestUtils.loadExtension(makePlainExtension("2.0"));
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
let ext = ExtensionTestUtils.loadExtension(makePlainExtension("2.0"));
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
engine = await Services.search.getEngineByName("Plain");
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should still have the configuration applied after update."
);
engine = await Services.search.getEngineByName("Plain");
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should still have the configuration applied after update."
);
await ext.unload();
});
await ext.unload();
}
);
add_task(async function test_upgrade_with_name_change() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
add_task(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function test_upgrade_with_name_change() {
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain",
]);
let ext = ExtensionTestUtils.loadExtension(
makePlainExtension("2.0", "Plain2")
);
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
let ext = ExtensionTestUtils.loadExtension(
makePlainExtension("2.0", "Plain2")
);
await ext.startup();
await AddonTestUtils.waitForSearchProviderStartup(ext);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain2",
]);
Assert.deepEqual(await getEngineNames(), [
"Multilocale AF",
"Multilocale AN",
"Plain2",
]);
let engine = await Services.search.getEngineByName("Plain2");
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should still have the configuration applied after update."
);
let engine = await Services.search.getEngineByName("Plain2");
Assert.equal(
engine.getSubmission("test").uri.spec,
// This test engine specifies the q and t params in its search_url, therefore
// we get both those and the extra parameter specified in the test config.
"https://duckduckgo.com/?q=test&t=ffsb&config=applied",
"Should still have the configuration applied after update."
);
await ext.unload();
});
await ext.unload();
}
);

View file

@ -88,43 +88,55 @@ add_task(async function test_install_duplicate_engine() {
await extension.unload();
});
add_task(async function basic_multilocale_test() {
await promiseSetHomeRegion("an");
add_task(
// Not needed for new configuration.
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function basic_multilocale_test() {
await promiseSetHomeRegion("an");
Assert.deepEqual(await getEngineNames(), [
"Plain",
"Special",
"Multilocale AN",
]);
});
Assert.deepEqual(await getEngineNames(), [
"Plain",
"Special",
"Multilocale AN",
]);
}
);
add_task(async function complex_multilocale_test() {
await promiseSetHomeRegion("af");
add_task(
// Not needed for new configuration.
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function complex_multilocale_test() {
await promiseSetHomeRegion("af");
Assert.deepEqual(await getEngineNames(), [
"Plain",
"Special",
"Multilocale AF",
"Multilocale AN",
]);
});
Assert.deepEqual(await getEngineNames(), [
"Plain",
"Special",
"Multilocale AF",
"Multilocale AN",
]);
}
);
add_task(async function test_manifest_selection() {
// Sets the home region without updating.
Region._setHomeRegion("an", false);
await promiseSetLocale("af");
add_task(
// Not needed for new configuration.
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function test_manifest_selection() {
// Sets the home region without updating.
Region._setHomeRegion("an", false);
await promiseSetLocale("af");
let engine = await Services.search.getEngineByName("Multilocale AN");
Assert.ok(
engine.iconURI.spec.endsWith("favicon-an.ico"),
"Should have the correct favicon for an extension of one locale using a different locale."
);
Assert.equal(
engine.description,
"A enciclopedia Libre",
"Should have the correct engine name for an extension of one locale using a different locale."
);
});
let engine = await Services.search.getEngineByName("Multilocale AN");
Assert.ok(
engine.iconURI.spec.endsWith("favicon-an.ico"),
"Should have the correct favicon for an extension of one locale using a different locale."
);
Assert.equal(
engine.description,
"A enciclopedia Libre",
"Should have the correct engine name for an extension of one locale using a different locale."
);
}
);
add_task(async function test_load_favicon_invalid() {
let observed = TestUtils.consoleMessageObserved(msg => {

View file

@ -34,60 +34,73 @@ async function getEngineNames() {
return engines.map(engine => engine._name);
}
add_setup(async function () {
await SearchTestUtils.useTestEngines("test-extensions", null, CONFIG_DEFAULT);
await AddonTestUtils.promiseStartupManager();
registerCleanupFunction(AddonTestUtils.promiseShutdownManager);
SearchTestUtils.useMockIdleService();
await Services.search.init();
});
add_setup(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function () {
await SearchTestUtils.useTestEngines(
"test-extensions",
null,
CONFIG_DEFAULT
);
await AddonTestUtils.promiseStartupManager();
registerCleanupFunction(AddonTestUtils.promiseShutdownManager);
SearchTestUtils.useMockIdleService();
await Services.search.init();
}
);
// Test the situation where we receive an updated configuration
// that references an engine that doesnt exist locally as it
// will be installed by Normandy.
add_task(async function test_config_before_normandy() {
// Ensure initial default setup.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
await restart();
Assert.deepEqual(await getEngineNames(), ["Plain"]);
// Updated configuration references nonexistant engine.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_UPDATED);
Assert.deepEqual(
await getEngineNames(),
["Plain"],
"Updated engine hasnt been installed yet"
);
// Normandy then installs the engine.
let addon = await SearchTestUtils.installSystemSearchExtension();
Assert.deepEqual(
await getEngineNames(),
["Plain", "Example"],
"Both engines are now enabled"
);
await addon.unload();
});
add_task(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function test_config_before_normandy() {
// Ensure initial default setup.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
await restart();
Assert.deepEqual(await getEngineNames(), ["Plain"]);
// Updated configuration references nonexistant engine.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_UPDATED);
Assert.deepEqual(
await getEngineNames(),
["Plain"],
"Updated engine hasnt been installed yet"
);
// Normandy then installs the engine.
let addon = await SearchTestUtils.installSystemSearchExtension();
Assert.deepEqual(
await getEngineNames(),
["Plain", "Example"],
"Both engines are now enabled"
);
await addon.unload();
}
);
// Test the situation where we receive a newly installed
// engine from Normandy followed by the update to the
// configuration that uses that engine.
add_task(async function test_normandy_before_config() {
// Ensure initial default setup.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
await restart();
Assert.deepEqual(await getEngineNames(), ["Plain"]);
// Normandy installs the enigne.
let addon = await SearchTestUtils.installSystemSearchExtension();
Assert.deepEqual(
await getEngineNames(),
["Plain"],
"Normandy engine ignored as not in config yet"
);
// Configuration is updated to use the engine.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_UPDATED);
Assert.deepEqual(
await getEngineNames(),
["Plain", "Example"],
"Both engines are now enabled"
);
await addon.unload();
});
add_task(
{ skip_if: () => SearchUtils.newSearchConfigEnabled },
async function test_normandy_before_config() {
// Ensure initial default setup.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
await restart();
Assert.deepEqual(await getEngineNames(), ["Plain"]);
// Normandy installs the enigne.
let addon = await SearchTestUtils.installSystemSearchExtension();
Assert.deepEqual(
await getEngineNames(),
["Plain"],
"Normandy engine ignored as not in config yet"
);
// Configuration is updated to use the engine.
await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_UPDATED);
Assert.deepEqual(
await getEngineNames(),
["Plain", "Example"],
"Both engines are now enabled"
);
await addon.unload();
}
);