Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Additional tests against the search config for Google related items.
*/
ChromeUtils.defineESModuleGetters(this, {
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
});
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
);
let engineSelector;
add_setup(async function () {
sinon.spy(NimbusFeatures.searchConfiguration, "onUpdate");
sinon.stub(NimbusFeatures.searchConfiguration, "ready").resolves();
updateAppInfo({
name: "firefox",
ID: "xpcshell@tests.mozilla.org",
version: "42.0",
platformVersion: "42.0",
});
await maybeSetupConfig();
engineSelector = new SearchEngineSelector();
// This is needed to make sure the search settings can be loaded
// when the search service is initialized.
do_get_profile();
registerCleanupFunction(async () => {
sinon.restore();
});
});
// We skip this test on ESR as on the ESR channel, we don't set up nimbus
// because we are not using any experiments there - the channel pref is used
// for enterprise, rather than the google_channel_* experiment options.
add_task(
{ skip_if: () => SearchUtils.MODIFIED_APP_CHANNEL == "esr" },
async function test_searchConfig_google_with_nimbus() {
let sandbox = sinon.createSandbox();
// Test a couple of configurations with a preference parameter set up.
const TEST_DATA = [
{
locale: "en-US",
region: "US",
expected: "nimbus_us_param",
},
{
locale: "en-US",
region: "GB",
expected: "nimbus_row_param",
},
];
// Call this once to cause ConfigSearchEngine to initialise `ParamPreferenceCache`.
await getEngines(engineSelector, "default", "default");
Assert.ok(
NimbusFeatures.searchConfiguration.onUpdate.called,
"Should register an update listener for Nimbus experiments"
);
// Stub getVariable to populate the cache with our expected data
sandbox.stub(NimbusFeatures.searchConfiguration, "getVariable").returns([
{ key: "google_channel_us", value: "nimbus_us_param" },
{ key: "google_channel_row", value: "nimbus_row_param" },
]);
// Set the pref cache with Nimbus values
NimbusFeatures.searchConfiguration.onUpdate.firstCall.args[0]();
for (const testData of TEST_DATA) {
info(`Checking region ${testData.region}, locale ${testData.locale}`);
const { engines } = await getEngines(
engineSelector,
testData.region,
testData.locale
);
Assert.equal(engines[0].id, "google", "Should have the correct engine");
const submission = engines[0].getSubmission("test", URLTYPE_SEARCH_HTML);
Assert.ok(
NimbusFeatures.searchConfiguration.ready.called,
"Should wait for Nimbus to get ready"
);
Assert.ok(
NimbusFeatures.searchConfiguration.getVariable,
"Should call NimbusFeatures.searchConfiguration.getVariable to populate the cache"
);
Assert.ok(
submission.uri.query
.split("&")
.includes("channel=" + testData.expected),
"Should be including the correct preference parameter for the engine"
);
}
sandbox.restore();
}
);
async function assertEnterpriseParameter(useEmptyPolicy) {
// Test a couple of configurations.
const TEST_DATA = [
{
locale: "en-US",
region: "US",
},
{
locale: "en-US",
region: "GB",
},
];
Services.search.wrappedJSObject.reset();
await EnterprisePolicyTesting.setupPolicyEngineWithJson(
useEmptyPolicy
? {}
: {
policies: {
BlockAboutSupport: true,
},
}
);
await Services.search.init();
for (const testData of TEST_DATA) {
info(`Checking region ${testData.region}, locale ${testData.locale}`);
const { engines } = await getEngines(
engineSelector,
testData.region,
testData.locale
);
Assert.equal(engines[0].id, "google", "Should have the correct engine");
const submission = engines[0].getSubmission("test", URLTYPE_SEARCH_HTML);
Assert.ok(
submission.uri.query.split("&").includes("channel=entpr"),
"Should be including the correct preference parameter for the engine"
);
}
}
// On ESR the channel parameter should always be `entpr`, regardless of if
// enterprise policies are set up or not.
add_task(
{ skip_if: () => SearchUtils.MODIFIED_APP_CHANNEL != "esr" },
async function test_searchConfig_google_enterprise_on_esr() {
await assertEnterpriseParameter(true);
}
);
// If there's a policy set, we should also have the channel=entpr parameter
// set.
add_task(async function test_searchConfig_google_enterprise_policy() {
await assertEnterpriseParameter(false);
});