/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const { SearchTestUtils } = ChromeUtils.import( "resource://testing-common/SearchTestUtils.jsm" ); add_task(async function setup() { const engine1 = await Services.search.addEngineWithDetails("engine1", { method: "get", template: "http://example.com/engine1?search={searchTerms}", }); const engine2 = await Services.search.addEngineWithDetails("engine2", { method: "get", template: "http://example.com/engine2?search={searchTerms}", }); const originalDefault = await Services.search.getDefault(); const originalDefaultPrivate = await Services.search.getDefaultPrivate(); registerCleanupFunction(async () => { await Services.search.setDefault(originalDefault); await Services.search.setDefaultPrivate(originalDefaultPrivate); await Services.search.removeEngine(engine1); await Services.search.removeEngine(engine2); }); }); 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" ); const privateDefaultVbox = doc.getElementById( "browserPrivateEngineSelection" ); Assert.ok( separateEngineCheckbox.hidden, "Should have hidden the separate search engine checkbox" ); Assert.ok( privateDefaultVbox.hidden, "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( privateDefaultVbox.hidden, "Should not have displayed the private engine selection box" ); await SpecialPowers.pushPrefEnv({ set: [["browser.search.separatePrivateDefault", true]], }); Assert.ok( !separateEngineCheckbox.hidden, "Should still be displaying the separate search engine checkbox" ); Assert.ok( !privateDefaultVbox.hidden, "Should have displayed the private engine selection box" ); 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" ); const privateDefaultVbox = doc.getElementById( "browserPrivateEngineSelection" ); Assert.ok( !separateEngineCheckbox.hidden, "Should not have hidden the separate search engine checkbox" ); Assert.ok( !privateDefaultVbox.hidden, "Should not have hidden the private engine selection box" ); await SpecialPowers.pushPrefEnv({ set: [["browser.search.separatePrivateDefault", false]], }); Assert.ok( !separateEngineCheckbox.hidden, "Should not have hidden the separate search engine checkbox" ); Assert.ok( privateDefaultVbox.hidden, "Should have hidden the private engine selection box" ); await SpecialPowers.pushPrefEnv({ set: [["browser.search.separatePrivateDefault.ui.enabled", false]], }); Assert.ok( separateEngineCheckbox.hidden, "Should have hidden the separate private engine checkbox" ); Assert.ok( privateDefaultVbox.hidden, "Should still be hiding 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 privateDefaultVbox = doc.getElementById( "browserPrivateEngineSelection" ); Assert.ok( privateDefaultVbox.hidden, "Should not be displaying the private engine selection box" ); separateEngineCheckbox.checked = false; separateEngineCheckbox.doCommand(); Assert.ok( Services.prefs.getBoolPref("browser.search.separatePrivateDefault"), "Should have correctly set the pref" ); Assert.ok( !privateDefaultVbox.hidden, "Should be displaying the private engine selection box" ); separateEngineCheckbox.checked = true; separateEngineCheckbox.doCommand(); Assert.ok( !Services.prefs.getBoolPref("browser.search.separatePrivateDefault"), "Should have correctly turned the pref off" ); Assert.ok( privateDefaultVbox.hidden, "Should have hidden the private engine selection box" ); gBrowser.removeCurrentTab(); }); async function setDefaultEngine( testPrivate, currentEngineName, expectedEngineName ) { await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true }); const doc = gBrowser.selectedBrowser.contentDocument; const defaultEngineSelector = doc.getElementById( testPrivate ? "defaultPrivateEngine" : "defaultEngine" ); Assert.equal( defaultEngineSelector.selectedItem.engine.name, currentEngineName, "Should have the correct engine as default on first open" ); const popup = defaultEngineSelector.menupopup; const popupShown = BrowserTestUtils.waitForEvent(popup, "popupshown"); EventUtils.synthesizeMouseAtCenter( defaultEngineSelector, {}, defaultEngineSelector.ownerGlobal ); await popupShown; const items = Array.from(popup.children); const engine2Item = items.find( item => item.engine.name == 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 Services.search.getDefaultPrivate() : await Services.search.getDefault(); Assert.equal( newDefault.name, expectedEngineName, "Should have changed the default engine to engine2" ); } add_task(async function test_setDefaultEngine() { const engine1 = Services.search.getEngineByName("engine1"); // Set an initial default so we have a known engine. await Services.search.setDefault(engine1); await setDefaultEngine(false, "engine1", "engine2"); gBrowser.removeCurrentTab(); }); add_task(async function test_setPrivateDefaultEngine() { await SpecialPowers.pushPrefEnv({ set: [ ["browser.search.separatePrivateDefault.ui.enabled", true], ["browser.search.separatePrivateDefault", true], ], }); const engine2 = Services.search.getEngineByName("engine2"); // Set an initial default so we have a known engine. await Services.search.setDefaultPrivate(engine2); await setDefaultEngine(true, "engine2", "engine1"); gBrowser.removeCurrentTab(); });