Bug 1666836 - Set bools correct with legacy preferences. r=emalysz, a=RyanVM
Differential Revision:
https://phabricator.services.mozilla.com/D91178
--- a/browser/components/enterprisepolicies/Policies.jsm
+++ b/browser/components/enterprisepolicies/Policies.jsm
@@ -2055,17 +2055,30 @@ function setDefaultPref(prefName, prefVa
defaults.setBoolPref(prefName, prefValue);
break;
case "number":
if (!Number.isInteger(prefValue)) {
throw new Error(`Non-integer value for ${prefName}`);
}
- defaults.setIntPref(prefName, prefValue);
+ if (
+ defaults.getPrefType(prefName) == defaults.PREF_BOOL ||
+ prefName == "browser.bookmarks.restore_default_bookmarks" ||
+ prefName == "browser.places.importBookmarksHTML" ||
+ prefName == "extensions.getAddons.showPane"
+ ) {
+ // It's possible an int was used in place of a boolean due to legacy prefs and GPO.
+ // If so, we need to set it as a boolean. We had to hardcode these few preference
+ // names because they aren't set by default.
+ // See bug 1666836.
+ defaults.setBoolPref(prefName, !!prefValue);
+ } else {
+ defaults.setIntPref(prefName, prefValue);
+ }
break;
case "string":
defaults.setStringPref(prefName, prefValue);
break;
}
if (locked) {
--- a/browser/components/enterprisepolicies/tests/xpcshell/test_preferences.js
+++ b/browser/components/enterprisepolicies/tests/xpcshell/test_preferences.js
@@ -5,22 +5,26 @@
const OLD_PREFERENCES_TESTS = [
{
policies: {
Preferences: {
"network.IDN_show_punycode": true,
"accessibility.force_disabled": 1,
"security.default_personal_cert": "Select Automatically",
+ "geo.enabled": 1,
+ "extensions.getAddons.showPane": 0,
},
},
lockedPrefs: {
"network.IDN_show_punycode": true,
"accessibility.force_disabled": 1,
"security.default_personal_cert": "Select Automatically",
+ "geo.enabled": true,
+ "extensions.getAddons.showPane": false,
},
},
];
const NEW_PREFERENCES_TESTS = [
{
policies: {
Preferences: {