Bug 1572030 - Reland Add support for experiments in modernConfig r=Standard8

This reverts commit 6e8f8684501061d1d759d1dab40b867e90f2b85d.

Differential Revision: https://phabricator.services.mozilla.com/D44376

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Dale Harvey 2019-09-11 11:29:02 +00:00
Родитель b5c83385d6
Коммит eaf9d22b52
3 изменённых файлов: 50 добавлений и 0 удалений

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

@ -14,6 +14,7 @@ XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
XPCOMUtils.defineLazyModuleGetters(this, {
SearchUtils: "resource://gre/modules/SearchUtils.jsm",
Services: "resource://gre/modules/Services.jsm",
});
const EXT_SEARCH_PREFIX = "resource://search-extensions/";
@ -57,6 +58,7 @@ class SearchEngineSelector {
throw new Error("region and locale parameters required");
}
log(`fetchEngineConfiguration ${region}:${locale}`);
let cohort = Services.prefs.getCharPref("browser.search.cohort", null);
let engines = [];
for (let config of this.configuration) {
const appliesTo = config.appliesTo || [];
@ -67,6 +69,9 @@ class SearchEngineSelector {
let excluded =
"excluded" in section &&
this._isInSection(region, locale, section.excluded);
if ("cohort" in section && cohort != section.cohort) {
return false;
}
return included && !excluded;
});

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

@ -132,6 +132,36 @@ configuration object with the users locale. For example:
Will report either ``us`` or ``gb`` as the ``webExtensionLocale``
depending on the user.
Experiments
-----------
We can run experiments by giving sections within ``appliesTo`` a
``cohort`` value, the Search Service can then optionally pass in a
matching ``cohort`` value to match those sections.
Sections which have a ``cohort`` will not be used unless a matching
``cohort`` has been passed in, for example:
.. code-block:: js
"engine1": {
"webExtensionId": "webext",
"webExtensionVersion": "1.0",
"appliesTo": [{
"included": {
"everywhere": true
},
"cohort": "nov-16",
"webExtensionId": "webext-experimental",
}, {
"included": {
"everywhere": true
},
"webExtensionId": "webext-gb",
"webExtensionVersion": "1.2"
}]
}
Engine Defaults
---------------

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

@ -54,6 +54,10 @@ const CONFIG_URL =
included: { everywhere: true },
excluded: { regions: ["us"] },
},
{
included: { everywhere: true },
cohort: "acohortid",
},
],
},
{
@ -96,4 +100,15 @@ add_task(async function() {
["excite", "aol"],
"The engines should be in the correct order"
);
Services.prefs.setCharPref("browser.search.cohort", "acohortid");
({ engines, privateDefault } = engineSelector.fetchEngineConfiguration(
"us",
"en-US"
));
Assert.deepEqual(
engines.map(obj => obj.engineName),
["lycos", "altavista", "aol", "excite"],
"Engines are in the correct order and include the cohort engine"
);
});