Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
const { SearchTestUtils } = ChromeUtils.importESModule(
);
SearchTestUtils.init(this);
add_setup(async function () {
await SearchTestUtils.installSearchExtension({
name: "engine1",
search_url_get_params: "search={searchTerms}",
});
await SearchTestUtils.installSearchExtension({
name: "engine2",
search_url_get_params: "search={searchTerms}",
});
const defaultEngine = await SearchService.getDefault();
const defaultPrivateEngine = await SearchService.getDefaultPrivate();
registerCleanupFunction(async () => {
await SearchService.setDefault(
defaultEngine,
SearchService.CHANGE_REASON.UNKNOWN
);
await SearchService.setDefaultPrivate(
defaultPrivateEngine,
SearchService.CHANGE_REASON.UNKNOWN
);
});
});
add_task(async function test_openWithPrivateDefaultNotEnabledFirst() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.search.separatePrivateDefault.ui.enabled", false],
["browser.search.separatePrivateDefault", false],
],
});
await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true });
const doc = gBrowser.selectedBrowser.contentDocument;
const separateEngineCheckbox = doc.getElementById(
"browserSeparateDefaultEngine"
).parentElement;
const privateDefaultDropdown = doc.getElementById("defaultPrivateEngine");
Assert.ok(
separateEngineCheckbox.hidden,
"Should have hidden the separate search engine checkbox"
);
Assert.ok(
separateEngineCheckbox.hidden &&
separateEngineCheckbox.contains(privateDefaultDropdown),
"Should have hidden the private engine selection box"
);
await SpecialPowers.pushPrefEnv({
set: [["browser.search.separatePrivateDefault.ui.enabled", true]],
});
Assert.ok(
!separateEngineCheckbox.hidden,
"Should have displayed the separate search engine checkbox"
);
Assert.ok(
BrowserTestUtils.isVisible(privateDefaultDropdown),
"Private engine selection box should be visible"
);
await SpecialPowers.pushPrefEnv({
set: [["browser.search.separatePrivateDefault", true]],
});
Assert.ok(
!separateEngineCheckbox.hidden,
"Should still be displaying the separate search engine checkbox"
);
Assert.ok(
!privateDefaultDropdown.disabled,
"Private engine selection box should be enabled"
);
gBrowser.removeCurrentTab();
});
add_task(async function test_openWithPrivateDefaultEnabledFirst() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.search.separatePrivateDefault.ui.enabled", true],
["browser.search.separatePrivateDefault", true],
],
});
await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true });
const doc = gBrowser.selectedBrowser.contentDocument;
const separateEngineCheckbox = doc.getElementById(
"browserSeparateDefaultEngine"
).parentElement;
const privateDefaultDropdown = doc.getElementById("defaultPrivateEngine");
Assert.ok(
!separateEngineCheckbox.hidden,
"Should not have hidden the separate search engine checkbox"
);
Assert.ok(
!privateDefaultDropdown.shadowRoot.getElementById("input").disabled,
"Private engine selection box should be enabled"
);
await SpecialPowers.pushPrefEnv({
set: [["browser.search.separatePrivateDefault", false]],
});
Assert.ok(
!separateEngineCheckbox.hidden,
"Should not have hidden the separate search engine checkbox"
);
Assert.ok(
BrowserTestUtils.isVisible(privateDefaultDropdown),
"Private engine selection box should be visible"
);
await SpecialPowers.pushPrefEnv({
set: [["browser.search.separatePrivateDefault.ui.enabled", false]],
});
Assert.ok(
separateEngineCheckbox.hidden,
"Should have hidden the separate private engine checkbox"
);
Assert.ok(
separateEngineCheckbox.hidden &&
separateEngineCheckbox.contains(privateDefaultDropdown),
"Should have hidden the private engine selection box"
);
gBrowser.removeCurrentTab();
});
add_task(async function test_separatePrivateDefault() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.search.separatePrivateDefault.ui.enabled", true],
["browser.search.separatePrivateDefault", false],
],
});
await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true });
const doc = gBrowser.selectedBrowser.contentDocument;
const separateEngineCheckbox = doc.getElementById(
"browserSeparateDefaultEngine"
);
const privateDefaultDropdown = doc.getElementById("defaultPrivateEngine");
Assert.ok(
BrowserTestUtils.isVisible(privateDefaultDropdown),
"Private engine selection box should be visible"
);
separateEngineCheckbox.click();
await separateEngineCheckbox.parentElement.updateComplete;
Assert.ok(
Services.prefs.getBoolPref("browser.search.separatePrivateDefault"),
"Should have correctly set the pref"
);
Assert.ok(
!privateDefaultDropdown.shadowRoot.getElementById("input").disabled,
"Private engine selection box should be enabled"
);
separateEngineCheckbox.click();
await separateEngineCheckbox.parentElement.updateComplete;
Assert.ok(
!Services.prefs.getBoolPref("browser.search.separatePrivateDefault"),
"Should have correctly turned the pref off"
);
Assert.ok(
BrowserTestUtils.isVisible(privateDefaultDropdown),
"Private engine selection box should be visible"
);
gBrowser.removeCurrentTab();
});
async function setDefaultEngine(
testPrivate,
currentEngineName,
expectedEngineName
) {
await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true });
const doc = gBrowser.selectedBrowser.contentDocument;
const input = doc.getElementById(
testPrivate ? "defaultPrivateEngine" : "defaultEngineNormal"
);
const defaultEngineSelector = input.inputEl;
const defaultEnginePopup = input.panelList;
Assert.ok(
input.value.startsWith(currentEngineName),
"Should have the correct engine as default on first open"
);
const popupShown = BrowserTestUtils.waitForEvent(defaultEnginePopup, "shown");
EventUtils.synthesizeMouseAtCenter(
defaultEngineSelector,
{},
defaultEngineSelector.ownerGlobal
);
await popupShown;
const items = Array.from(defaultEnginePopup.children);
const engine2Item = items.find(item =>
item.textContent.includes(expectedEngineName)
);
const defaultChanged = SearchTestUtils.promiseSearchNotification(
testPrivate ? "engine-default-private" : "engine-default",
"browser-search-engine-modified"
);
// Waiting for popupHiding here seemed to cause a race condition, however
// as we're really just interested in the notification, we'll just use
// that here.
EventUtils.synthesizeMouseAtCenter(engine2Item, {}, engine2Item.ownerGlobal);
await defaultChanged;
const newDefault = testPrivate
? await SearchService.getDefaultPrivate()
: await SearchService.getDefault();
Assert.equal(
newDefault.name,
expectedEngineName,
"Should have changed the default engine to engine2"
);
}
add_task(async function test_setDefaultEngine() {
const engine1 = SearchService.getEngineByName("engine1");
// Set an initial default so we have a known engine.
await SearchService.setDefault(engine1, SearchService.CHANGE_REASON.UNKNOWN);
Services.telemetry.clearEvents();
Services.fog.testResetFOG();
await setDefaultEngine(false, "engine1", "engine2");
let snapshot = Glean.searchEngineDefault.changed.testGetValue();
delete snapshot[0].timestamp;
Assert.deepEqual(
snapshot[0],
{
category: "search.engine.default",
name: "changed",
extra: {
change_reason: "user",
previous_engine_id: engine1.telemetryId,
new_engine_id: "other-engine2",
new_display_name: "engine2",
new_load_path: "[addon]engine2@tests.mozilla.org",
new_submission_url: "",
},
},
"Should have received the correct event details"
);
gBrowser.removeCurrentTab();
});
add_task(async function test_setPrivateDefaultEngine() {
Services.telemetry.clearEvents();
Services.fog.testResetFOG();
await SpecialPowers.pushPrefEnv({
set: [
["browser.search.separatePrivateDefault.ui.enabled", true],
["browser.search.separatePrivateDefault", true],
],
});
const engine2 = SearchService.getEngineByName("engine2");
// Set an initial default so we have a known engine.
await SearchService.setDefaultPrivate(
engine2,
SearchService.CHANGE_REASON.UNKNOWN
);
Services.telemetry.clearEvents();
Services.fog.testResetFOG();
await setDefaultEngine(true, "engine2", "engine1");
let snapshot = Glean.searchEnginePrivate.changed.testGetValue();
delete snapshot[0].timestamp;
console.log(snapshot);
Assert.deepEqual(
snapshot[0],
{
category: "search.engine.private",
name: "changed",
extra: {
change_reason: "user",
previous_engine_id: engine2.telemetryId,
new_engine_id: "other-engine1",
new_display_name: "engine1",
new_load_path: "[addon]engine1@tests.mozilla.org",
new_submission_url: "",
},
},
"Should have received the correct event details"
);
gBrowser.removeCurrentTab();
});