diff options
Diffstat (limited to 'remote/shared/test/xpcshell/test_RecommendedPreferences.js')
-rw-r--r-- | remote/shared/test/xpcshell/test_RecommendedPreferences.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/remote/shared/test/xpcshell/test_RecommendedPreferences.js b/remote/shared/test/xpcshell/test_RecommendedPreferences.js new file mode 100644 index 0000000000..d42482d1d8 --- /dev/null +++ b/remote/shared/test/xpcshell/test_RecommendedPreferences.js @@ -0,0 +1,111 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const { RecommendedPreferences } = ChromeUtils.importESModule( + "chrome://remote/content/shared/RecommendedPreferences.sys.mjs" +); + +const COMMON_PREF = "toolkit.startup.max_resumed_crashes"; + +const MARIONETTE_PREF = "dom.disable_beforeunload"; +const MARIONETTE_RECOMMENDED_PREFS = new Map([[MARIONETTE_PREF, true]]); + +const CDP_PREF = "browser.contentblocking.features.standard"; +const CDP_RECOMMENDED_PREFS = new Map([ + [CDP_PREF, "-tp,tpPrivate,cookieBehavior0,-cm,-fp"], +]); + +function cleanup() { + info("Restore recommended preferences and test preferences"); + Services.prefs.clearUserPref("remote.prefs.recommended"); + RecommendedPreferences.restoreAllPreferences(); +} + +// cleanup() should be called: +// - explicitly after each test to avoid side effects +// - via registerCleanupFunction in case a test crashes/times out +registerCleanupFunction(cleanup); + +add_task(async function test_RecommendedPreferences() { + info("Check initial values for the test preferences"); + checkPreferences({ cdp: false, common: false, marionette: false }); + + checkPreferences({ cdp: false, common: false, marionette: false }); + + info("Apply recommended preferences for a marionette client"); + RecommendedPreferences.applyPreferences(MARIONETTE_RECOMMENDED_PREFS); + checkPreferences({ cdp: false, common: true, marionette: true }); + + info("Apply recommended preferences for a cdp client"); + RecommendedPreferences.applyPreferences(CDP_RECOMMENDED_PREFS); + checkPreferences({ cdp: true, common: true, marionette: true }); + + info("Restore marionette preferences"); + RecommendedPreferences.restorePreferences(MARIONETTE_RECOMMENDED_PREFS); + checkPreferences({ cdp: true, common: true, marionette: false }); + + info("Restore cdp preferences"); + RecommendedPreferences.restorePreferences(CDP_RECOMMENDED_PREFS); + checkPreferences({ cdp: false, common: true, marionette: false }); + + info("Restore all the altered preferences"); + RecommendedPreferences.restoreAllPreferences(); + checkPreferences({ cdp: false, common: false, marionette: false }); + + info("Attemps to restore again"); + RecommendedPreferences.restoreAllPreferences(); + checkPreferences({ cdp: false, common: false, marionette: false }); + + cleanup(); +}); + +add_task(async function test_RecommendedPreferences_disabled() { + info("Disable RecommendedPreferences"); + Services.prefs.setBoolPref("remote.prefs.recommended", false); + + info("Check initial values for the test preferences"); + checkPreferences({ cdp: false, common: false, marionette: false }); + + info("Recommended preferences are not applied, applyPreferences is a no-op"); + RecommendedPreferences.applyPreferences(MARIONETTE_RECOMMENDED_PREFS); + checkPreferences({ cdp: false, common: false, marionette: false }); + + cleanup(); +}); + +// Check that protocols can override common preferences. +add_task(async function test_RecommendedPreferences_override() { + info("Make sure the common preference has no user value"); + Services.prefs.clearUserPref(COMMON_PREF); + + const OVERRIDE_VALUE = 42; + const OVERRIDE_COMMON_PREF = new Map([[COMMON_PREF, OVERRIDE_VALUE]]); + + info("Apply a map of preferences overriding a common preference"); + RecommendedPreferences.applyPreferences(OVERRIDE_COMMON_PREF); + + equal( + Services.prefs.getIntPref(COMMON_PREF), + OVERRIDE_VALUE, + "The common preference was set to the expected value" + ); + + cleanup(); +}); + +function checkPreferences({ cdp, common, marionette }) { + checkPreference(COMMON_PREF, { hasValue: common }); + checkPreference(MARIONETTE_PREF, { hasValue: marionette }); + checkPreference(CDP_PREF, { hasValue: cdp }); +} + +function checkPreference(pref, { hasValue }) { + equal( + Services.prefs.prefHasUserValue(pref), + hasValue, + hasValue + ? `The preference ${pref} has a user value` + : `The preference ${pref} has no user value` + ); +} |