diff options
Diffstat (limited to '')
-rw-r--r-- | remote/shared/test/xpcshell/test_RecommendedPreferences.js | 118 |
1 files changed, 118 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..20de07a528 --- /dev/null +++ b/remote/shared/test/xpcshell/test_RecommendedPreferences.js @@ -0,0 +1,118 @@ +/* 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 PROTOCOL_1_PREF = "dom.disable_beforeunload"; +const PROTOCOL_1_RECOMMENDED_PREFS = new Map([[PROTOCOL_1_PREF, true]]); + +const PROTOCOL_2_PREF = "browser.contentblocking.features.standard"; +const PROTOCOL_2_RECOMMENDED_PREFS = new Map([ + [PROTOCOL_2_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_multipleClients() { + info("Check initial values for the test preferences"); + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + info("Apply recommended preferences for a protocol_1 client"); + RecommendedPreferences.applyPreferences(PROTOCOL_1_RECOMMENDED_PREFS); + checkPreferences({ common: true, protocol_1: true, protocol_2: false }); + + info("Apply recommended preferences for a protocol_2 client"); + RecommendedPreferences.applyPreferences(PROTOCOL_2_RECOMMENDED_PREFS); + checkPreferences({ common: true, protocol_1: true, protocol_2: true }); + + info("Restore protocol_1 preferences"); + RecommendedPreferences.restorePreferences(PROTOCOL_1_RECOMMENDED_PREFS); + checkPreferences({ common: true, protocol_1: false, protocol_2: true }); + + info("Restore protocol_2 preferences"); + RecommendedPreferences.restorePreferences(PROTOCOL_2_RECOMMENDED_PREFS); + checkPreferences({ common: true, protocol_1: false, protocol_2: false }); + + info("Restore all the altered preferences"); + RecommendedPreferences.restoreAllPreferences(); + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + info("Attemps to restore again"); + RecommendedPreferences.restoreAllPreferences(); + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + cleanup(); +}); + +add_task(async function test_disabled() { + info("Disable RecommendedPreferences"); + Services.prefs.setBoolPref("remote.prefs.recommended", false); + + info("Check initial values for the test preferences"); + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + info("Recommended preferences are not applied, applyPreferences is a no-op"); + RecommendedPreferences.applyPreferences(PROTOCOL_1_RECOMMENDED_PREFS); + checkPreferences({ common: false, protocol_1: false, protocol_2: false }); + + cleanup(); +}); + +add_task(async function test_noCustomPreferences() { + info("Applying preferences without any custom preference should not throw"); + RecommendedPreferences.applyPreferences(); + + cleanup(); +}); + +// Check that protocols can override common preferences. +add_task(async function test_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({ common, protocol_1, protocol_2 }) { + checkPreference(COMMON_PREF, { hasValue: common }); + checkPreference(PROTOCOL_1_PREF, { hasValue: protocol_1 }); + checkPreference(PROTOCOL_2_PREF, { hasValue: protocol_2 }); +} + +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` + ); +} |