diff options
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js')
-rw-r--r-- | toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js b/toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js new file mode 100644 index 0000000000..8c36f4ef03 --- /dev/null +++ b/toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js @@ -0,0 +1,161 @@ +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs", + Preferences: "resource://gre/modules/Preferences.sys.mjs", +}); + +AddonTestUtils.init(this); +AddonTestUtils.overrideCertDB(); + +AddonTestUtils.createAppInfo( + "xpcshell@tests.mozilla.org", + "XPCShell", + "42", + "42" +); + +Services.prefs.setBoolPref("extensions.eventPages.enabled", true); + +add_task(async function setup() { + await AddonTestUtils.promiseStartupManager(); + + // Create an object to hold the values to which we will initialize the prefs. + const PREFS = { + "browser.cache.disk.enable": true, + "browser.cache.memory.enable": true, + }; + + // Set prefs to our initial values. + for (let pref in PREFS) { + Preferences.set(pref, PREFS[pref]); + } + + registerCleanupFunction(() => { + // Reset the prefs. + for (let pref in PREFS) { + Preferences.reset(pref); + } + }); +}); + +// Other tests exist for all the settings, this smoke tests that the +// settings will startup an event page. +add_task(async function test_browser_settings() { + let setExt = ExtensionTestUtils.loadExtension({ + useAddonManager: "permanent", + manifest: { + permissions: ["browserSettings", "privacy"], + }, + background() { + browser.test.onMessage.addListener(async (msg, apiName, value) => { + let apiObj = apiName.split(".").reduce((o, i) => o[i], browser); + let result = await apiObj.set({ value }); + if (msg === "set") { + browser.test.assertTrue(result, "set returns true."); + } else { + browser.test.assertFalse(result, "set returns false for a no-op."); + } + }); + }, + }); + await setExt.startup(); + + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "permanent", + manifest: { + permissions: ["browserSettings", "privacy"], + background: { persistent: false }, + }, + background() { + browser.browserSettings.cacheEnabled.onChange.addListener(() => { + browser.test.log("cacheEnabled received"); + browser.test.sendMessage("cacheEnabled"); + }); + browser.browserSettings.homepageOverride.onChange.addListener(() => { + browser.test.sendMessage("homepageOverride"); + }); + browser.browserSettings.newTabPageOverride.onChange.addListener(() => { + browser.test.sendMessage("newTabPageOverride"); + }); + browser.privacy.services.passwordSavingEnabled.onChange.addListener( + () => { + browser.test.sendMessage("passwordSavingEnabled"); + } + ); + }, + }); + await extension.startup(); + + await extension.terminateBackground({ disableResetIdleForTest: true }); + assertPersistentListeners(extension, "browserSettings", "cacheEnabled", { + primed: true, + }); + + info(`testing cacheEnabled`); + setExt.sendMessage("set", "browserSettings.cacheEnabled", false); + await extension.awaitMessage("cacheEnabled"); + ok(true, "cacheEnabled.onChange fired"); + + await extension.terminateBackground({ disableResetIdleForTest: true }); + assertPersistentListeners(extension, "browserSettings", "homepageOverride", { + primed: true, + }); + + info(`testing homepageOverride`); + Preferences.set("browser.startup.homepage", "http://homepage.example.com"); + await extension.awaitMessage("homepageOverride"); + ok(true, "homepageOverride.onChange fired"); + + if ( + AppConstants.platform !== "android" && + AppConstants.MOZ_APP_NAME !== "thunderbird" + ) { + await extension.terminateBackground({ disableResetIdleForTest: true }); + assertPersistentListeners( + extension, + "browserSettings", + "newTabPageOverride", + { + primed: true, + } + ); + + info(`testing newTabPageOverride`); + AboutNewTab.newTabURL = "http://homepage.example.com"; + await extension.awaitMessage("newTabPageOverride"); + ok(true, "newTabPageOverride.onChange fired"); + } + + await extension.terminateBackground({ disableResetIdleForTest: true }); + assertPersistentListeners( + extension, + "privacy", + "services.passwordSavingEnabled", + { + primed: true, + } + ); + + info(`testing passwordSavingEnabled`); + setExt.sendMessage("set", "privacy.services.passwordSavingEnabled", true); + await extension.awaitMessage("passwordSavingEnabled"); + ok(true, "passwordSavingEnabled.onChange fired"); + + await AddonTestUtils.promiseRestartManager(); + await setExt.awaitStartup(); + await extension.awaitStartup(); + Services.obs.notifyObservers(null, "browser-delayed-startup-finished"); + + assertPersistentListeners(extension, "browserSettings", "homepageOverride", { + primed: true, + }); + + info(`testing homepageOverride after AOM restart`); + Preferences.set("browser.startup.homepage", "http://test.example.com"); + await extension.awaitMessage("homepageOverride"); + ok(true, "homepageOverride.onChange fired"); + + await extension.unload(); + await setExt.unload(); +}); |