From 8f4c81575112e0968d7b0e6436780017215429a2 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 14 Oct 2016 09:27:44 -0600 Subject: [PATCH] Bug 1309384 - merge default and user prefs in Services shim; r=jdescottes MozReview-Commit-ID: 19rvPSGOsOZ --HG-- extra : rebase_source : 7d949a7a626056a5c6646cba6276b26095eb9bb3 --- devtools/client/shared/shim/Services.js | 15 +++-- .../client/shared/shim/test/mochitest.ini | 1 + .../test/test_service_prefs_defaults.html | 63 +++++++++++++++++++ 3 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 devtools/client/shared/shim/test/test_service_prefs_defaults.html diff --git a/devtools/client/shared/shim/Services.js b/devtools/client/shared/shim/Services.js index cfbed2796174..27deb96c4d73 100644 --- a/devtools/client/shared/shim/Services.js +++ b/devtools/client/shared/shim/Services.js @@ -356,12 +356,15 @@ PrefBranch.prototype = { * @param {String} keyName the full-qualified name of the preference. * This is also the name of the key in local storage. * @param {Any} userValue the user value to use if the pref does not exist - * @param {Any} defaultValue the default value to use if the pref - * does not exist * @param {Boolean} hasUserValue if a new pref is created, whether * the default value is also a user value + * @param {Any} defaultValue the default value to use if the pref + * does not exist + * @param {Boolean} init if true, then this call is initialization + * from local storage and should override the default prefs */ - _findOrCreatePref: function (keyName, userValue, hasUserValue, defaultValue) { + _findOrCreatePref: function (keyName, userValue, hasUserValue, defaultValue, + init = false) { let branch = this._createBranch(keyName.split(".")); if (hasUserValue && typeof (userValue) !== typeof (defaultValue)) { @@ -383,7 +386,7 @@ PrefBranch.prototype = { throw new Error("unhandled argument type: " + typeof (defaultValue)); } - if (branch._type === PREF_INVALID) { + if (init || branch._type === PREF_INVALID) { branch._storageUpdated(type, userValue, hasUserValue, defaultValue); } else if (branch._type !== type) { throw new Error("attempt to change type of pref " + keyName); @@ -422,7 +425,7 @@ PrefBranch.prototype = { * Helper function to initialize the root PrefBranch. */ _initializeRoot: function () { - if (localStorage.length === 0 && Services._defaultPrefsEnabled) { + if (Services._defaultPrefsEnabled) { /* eslint-disable no-eval */ let devtools = require("raw!prefs!devtools/client/preferences/devtools"); eval(devtools); @@ -439,7 +442,7 @@ PrefBranch.prototype = { let {userValue, hasUserValue, defaultValue} = JSON.parse(localStorage.getItem(keyName)); this._findOrCreatePref(keyName.slice(PREFIX.length), userValue, - hasUserValue, defaultValue); + hasUserValue, defaultValue, true); } } diff --git a/devtools/client/shared/shim/test/mochitest.ini b/devtools/client/shared/shim/test/mochitest.ini index 6213d906f871..aa804d696b96 100644 --- a/devtools/client/shared/shim/test/mochitest.ini +++ b/devtools/client/shared/shim/test/mochitest.ini @@ -5,3 +5,4 @@ support-files = [test_service_appinfo.html] [test_service_focus.html] [test_service_prefs.html] +[test_service_prefs_defaults.html] diff --git a/devtools/client/shared/shim/test/test_service_prefs_defaults.html b/devtools/client/shared/shim/test/test_service_prefs_defaults.html new file mode 100644 index 000000000000..4a3a86f8842a --- /dev/null +++ b/devtools/client/shared/shim/test/test_service_prefs_defaults.html @@ -0,0 +1,63 @@ + + + + + Test for Bug 1309384 - Services.prefs replacement defaults handling + + + + + + + + + + +