From 04689ca3bcc74f18b7dfa3a298ad8ccd647f2682 Mon Sep 17 00:00:00 2001 From: Tom Ritter Date: Thu, 11 Jan 2024 17:10:13 +0000 Subject: [PATCH] Bug 1873526: Refactor the restriction override list from a big if statement to a list r=KrisWright Differential Revision: https://phabricator.services.mozilla.com/D198081 --- modules/libpref/Preferences.cpp | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp index 42dbf714a564..9f2606c4f7b9 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp @@ -5951,8 +5951,8 @@ struct PrefListEntry { // StaticPrefList.yml), a string pref, and it is NOT exempted in // sDynamicPrefOverrideList // -// This behavior is codified in ShouldSanitizePreference() below where -// exclusions of preferences can be defined. +// This behavior is codified in ShouldSanitizePreference() below. +// Exclusions of preferences can be defined in sOverrideRestrictionsList[]. static const PrefListEntry sRestrictFromWebContentProcesses[] = { // Remove prefs with user data PREF_LIST_ENTRY("datareporting.policy."), @@ -6001,6 +6001,19 @@ static const PrefListEntry sRestrictFromWebContentProcesses[] = { PREF_LIST_ENTRY("toolkit.telemetry.previousBuildID"), }; +// Allowlist for prefs and branches blocklisted in +// sRestrictFromWebContentProcesses[], including prefs from +// StaticPrefList.yaml and *.js, to let them pass. +static const PrefListEntry sOverrideRestrictionsList[]{ + PREF_LIST_ENTRY("services.settings.clock_skew_seconds"), + PREF_LIST_ENTRY("services.settings.last_update_seconds"), + PREF_LIST_ENTRY("services.settings.loglevel"), + // This is really a boolean dynamic pref, but one Nightly user + // has it set as a string... + PREF_LIST_ENTRY("services.settings.preview_enabled"), + PREF_LIST_ENTRY("services.settings.server"), +}; + // These prefs are dynamically-named (i.e. not specified in prefs.js or // StaticPrefList) and would normally by blocklisted but we allow them through // anyway, so this override list acts as an allowlist @@ -6055,8 +6068,8 @@ static const PrefListEntry sDynamicPrefOverrideList[]{ PREF_LIST_ENTRY("print_printer"), PREF_LIST_ENTRY("places.interactions.customBlocklist"), PREF_LIST_ENTRY("remote.log.level"), - // services.* preferences should be added in ShouldSanitizePreference - the - // whole preference branch gets sanitized by default. + // services.* preferences should be added in sOverrideRestrictionsList[] - + // the whole preference branch gets sanitized by default. PREF_LIST_ENTRY("spellchecker.dictionary"), PREF_LIST_ENTRY("test.char"), PREF_LIST_ENTRY("Test.IPC."), @@ -6090,14 +6103,12 @@ static bool ShouldSanitizePreference(const Pref* const aPref) { // pref through. for (const auto& entry : sRestrictFromWebContentProcesses) { if (strncmp(entry.mPrefBranch, prefName, entry.mLen) == 0) { - const auto* p = prefName; // This avoids clang-format doing ugly things. - return !(strncmp("services.settings.clock_skew_seconds", p, 36) == 0 || - strncmp("services.settings.last_update_seconds", p, 37) == 0 || - strncmp("services.settings.loglevel", p, 26) == 0 || - // This is really a boolean dynamic pref, but one Nightly user - // has it set as a string... - strncmp("services.settings.preview_enabled", p, 33) == 0 || - strncmp("services.settings.server", p, 24) == 0); + for (const auto& pasEnt : sOverrideRestrictionsList) { + if (strncmp(pasEnt.mPrefBranch, prefName, pasEnt.mLen) == 0) { + return false; + } + } + return true; } }