508 lines
12 KiB
JavaScript
508 lines
12 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
* Test that defaultEngine property can be set and yields the proper events and
|
|
* behavior (search results)
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
|
|
});
|
|
|
|
const CONFIG = [
|
|
{ identifier: "engine1" },
|
|
{ identifier: "engine2" },
|
|
{
|
|
identifier: "exp2",
|
|
variants: [
|
|
{
|
|
environment: { allRegionsAndLocales: true, experiment: "exp2" },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
identifier: "exp3",
|
|
variants: [
|
|
{
|
|
environment: { allRegionsAndLocales: true, experiment: "exp3" },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
recordType: "defaultEngines",
|
|
globalDefault: "engine1",
|
|
globalDefaultPrivate: "engine1",
|
|
specificDefaults: [
|
|
{
|
|
environment: { experiment: "exp1" },
|
|
default: "engine2",
|
|
},
|
|
{
|
|
environment: { experiment: "exp2" },
|
|
defaultPrivate: "exp2",
|
|
},
|
|
{
|
|
environment: { experiment: "exp3" },
|
|
default: "exp3",
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
let getVariableStub;
|
|
|
|
let defaultGetVariable = name => {
|
|
if (name == "separatePrivateDefaultUIEnabled") {
|
|
return true;
|
|
}
|
|
if (name == "separatePrivateDefaultUrlbarResultEnabled") {
|
|
return false;
|
|
}
|
|
return undefined;
|
|
};
|
|
|
|
add_setup(async () => {
|
|
Services.prefs.setBoolPref(
|
|
SearchUtils.BROWSER_SEARCH_PREF + "separatePrivateDefault.ui.enabled",
|
|
true
|
|
);
|
|
Services.prefs.setBoolPref(
|
|
SearchUtils.BROWSER_SEARCH_PREF + "separatePrivateDefault",
|
|
true
|
|
);
|
|
|
|
sinon.spy(NimbusFeatures.searchConfiguration, "onUpdate");
|
|
sinon.stub(NimbusFeatures.searchConfiguration, "ready").resolves();
|
|
getVariableStub = sinon.stub(
|
|
NimbusFeatures.searchConfiguration,
|
|
"getVariable"
|
|
);
|
|
getVariableStub.callsFake(defaultGetVariable);
|
|
|
|
do_get_profile();
|
|
Services.fog.initializeFOG();
|
|
|
|
SearchTestUtils.setRemoteSettingsConfig(CONFIG);
|
|
|
|
let promiseSaved = promiseAfterSettings();
|
|
await Services.search.init();
|
|
await promiseSaved;
|
|
|
|
registerCleanupFunction(async () => {
|
|
sinon.restore();
|
|
});
|
|
});
|
|
|
|
async function switchExperiment(newExperiment) {
|
|
let promiseReloaded =
|
|
SearchTestUtils.promiseSearchNotification("engines-reloaded");
|
|
let promiseSaved = promiseAfterSettings();
|
|
|
|
if (newExperiment) {
|
|
Services.prefs.setStringPref("browser.search.experiment", newExperiment);
|
|
} else {
|
|
Services.prefs.clearUserPref("browser.search.experiment");
|
|
}
|
|
|
|
await promiseReloaded;
|
|
await promiseSaved;
|
|
}
|
|
|
|
function getSettingsAttribute(setting, isAppProvided) {
|
|
return Services.search.wrappedJSObject._settings.getVerifiedMetaDataAttribute(
|
|
setting,
|
|
isAppProvided
|
|
);
|
|
}
|
|
|
|
add_task(async function test_experiment_setting() {
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have the application default engine as default"
|
|
);
|
|
|
|
// Start the experiment.
|
|
await switchExperiment("exp1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
|
|
// End the experiment.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have reset the default engine to the application default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have kept the saved attribute as empty"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_setting_to_same_as_user() {
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine2");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have the user selected engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2"
|
|
);
|
|
|
|
// Start the experiment, ensure user default is maintained.
|
|
await switchExperiment("exp1");
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2"
|
|
);
|
|
|
|
Assert.equal(
|
|
Services.search.appDefaultEngine.name,
|
|
"engine2",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
|
|
// End the experiment.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(
|
|
Services.search.appDefaultEngine.name,
|
|
"engine1",
|
|
"Should have set the app default engine correctly"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have kept the engine the same "
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2",
|
|
"Should have kept the saved attribute as the user's preference"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_setting_user_changed_back_during() {
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have the application default engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have an empty settings attribute"
|
|
);
|
|
|
|
// Start the experiment.
|
|
await switchExperiment("exp1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should still have an empty settings attribute"
|
|
);
|
|
|
|
// User resets to the original default engine.
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine1");
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have the user selected engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine1"
|
|
);
|
|
|
|
// Ending the experiment should keep the original default and reset the
|
|
// saved attribute.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(
|
|
Services.search.appDefaultEngine.name,
|
|
"engine1",
|
|
"Should have set the app default engine correctly"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have kept the engine the same"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have reset the saved attribute to empty after the experiment ended"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_setting_user_changed_back_private() {
|
|
Services.search.defaultPrivateEngine =
|
|
Services.search.getEngineByName("engine1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultPrivateEngine.name,
|
|
"engine1",
|
|
"Should have the user selected engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"privateDefaultEngineId",
|
|
Services.search.defaultPrivateEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have an empty settings attribute"
|
|
);
|
|
|
|
// Start the experiment.
|
|
await switchExperiment("exp2");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultPrivateEngine.name,
|
|
"exp2",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should still have an empty settings attribute"
|
|
);
|
|
|
|
// User resets to the original default engine.
|
|
Services.search.defaultPrivateEngine =
|
|
Services.search.getEngineByName("engine1");
|
|
Assert.equal(
|
|
Services.search.defaultPrivateEngine.name,
|
|
"engine1",
|
|
"Should have the user selected engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"privateDefaultEngineId",
|
|
Services.search.defaultPrivateEngine.isAppProvided
|
|
),
|
|
"engine1"
|
|
);
|
|
|
|
// Ending the experiment should keep the original default and reset the
|
|
// saved attribute.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(Services.search.appPrivateDefaultEngine.name, "engine1");
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have kept the engine the same "
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"privateDefaultEngineId",
|
|
Services.search.defaultPrivateEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have reset the saved attribute to empty after the experiment ended"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_setting_user_changed_to_other_during() {
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have the application default engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have an empty settings attribute"
|
|
);
|
|
|
|
// Start the experiment.
|
|
await switchExperiment("exp3");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"exp3",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should still have an empty settings attribute"
|
|
);
|
|
|
|
// User changes to a different default engine
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine2");
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have the user selected engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2",
|
|
"Should have correctly set the user's default in settings"
|
|
);
|
|
|
|
// Ending the experiment should keep the original default and reset the
|
|
// saved attribute.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(
|
|
Services.search.appDefaultEngine.name,
|
|
"engine1",
|
|
"Should have set the app default engine correctly"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have kept the user's choice of engine"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2",
|
|
"Should have kept the user's choice in settings"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_experiment_setting_user_hid_app_default_during() {
|
|
Services.prefs.setBoolPref(
|
|
SearchUtils.BROWSER_SEARCH_PREF + "separatePrivateDefault",
|
|
false
|
|
);
|
|
Services.search.defaultEngine = Services.search.getEngineByName("engine1");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine1",
|
|
"Should have the application default engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should have an empty settings attribute"
|
|
);
|
|
|
|
// Start the experiment.
|
|
await switchExperiment("exp3");
|
|
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"exp3",
|
|
"Should have set the experiment engine as default"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"",
|
|
"Should still have an empty settings attribute"
|
|
);
|
|
|
|
// User hides the original application engine
|
|
await Services.search.removeEngine(
|
|
Services.search.getEngineByName("engine1")
|
|
);
|
|
Assert.equal(
|
|
Services.search.getEngineByName("engine1").hidden,
|
|
true,
|
|
"Should have hid the selected engine"
|
|
);
|
|
|
|
// Ending the experiment should keep the original default and reset the
|
|
// saved attribute.
|
|
await switchExperiment("");
|
|
|
|
Assert.equal(
|
|
Services.search.appDefaultEngine.name,
|
|
"engine1",
|
|
"Should have set the app default engine correctly"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.hidden,
|
|
false,
|
|
"Should not have set default engine to an engine that is hidden"
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
"engine2",
|
|
"Should have reset the user's engine to the next available engine"
|
|
);
|
|
Assert.equal(
|
|
getSettingsAttribute(
|
|
"defaultEngineId",
|
|
Services.search.defaultEngine.isAppProvided
|
|
),
|
|
"engine2",
|
|
"Should have saved the choice in settings"
|
|
);
|
|
});
|