Bug 1338306 - nsIPrefBranch.get*Pref should support providing a default value, r=bsmedberg.

This commit is contained in:
Florian Quèze 2017-03-01 13:15:35 +01:00
Родитель a9a7378a89
Коммит 8e85c687b4
4 изменённых файлов: 126 добавлений и 4 удалений

Просмотреть файл

@ -57,12 +57,16 @@ interface nsIPrefBranch : nsISupports
* Called to get the state of an individual boolean preference. * Called to get the state of an individual boolean preference.
* *
* @param aPrefName The boolean preference to get the state of. * @param aPrefName The boolean preference to get the state of.
* @param aDefaultValue The value to return if the preference is not set.
* *
* @return boolean The value of the requested boolean preference. * @return boolean The value of the requested boolean preference.
* *
* @see setBoolPref * @see setBoolPref
*/ */
boolean getBoolPref(in string aPrefName); [optional_argc,binaryname(GetBoolPrefWithDefault)]
boolean getBoolPref(in string aPrefName, [optional] in boolean aDefaultValue);
[noscript,binaryname(GetBoolPref)]
boolean getBoolPrefXPCOM(in string aPrefName);
/** /**
* Called to set the state of an individual boolean preference. * Called to set the state of an individual boolean preference.
@ -83,23 +87,31 @@ interface nsIPrefBranch : nsISupports
* are converted to floating point numbers. * are converted to floating point numbers.
* *
* @param aPrefName The floating point preference to get the state of. * @param aPrefName The floating point preference to get the state of.
* @param aDefaultValue The value to return if the preference is not set.
* *
* @return float The value of the requested floating point preference. * @return float The value of the requested floating point preference.
* *
* @see setCharPref * @see setCharPref
*/ */
float getFloatPref(in string aPrefName); [optional_argc,binaryname(GetFloatPrefWithDefault)]
float getFloatPref(in string aPrefName, [optional] in float aDefaultValue);
[noscript,binaryname(GetFloatPref)]
float getFloatPrefXPCOM(in string aPrefName);
/** /**
* Called to get the state of an individual string preference. * Called to get the state of an individual string preference.
* *
* @param aPrefName The string preference to retrieve. * @param aPrefName The string preference to retrieve.
* @param aDefaultValue The string to return if the preference is not set.
* *
* @return string The value of the requested string preference. * @return string The value of the requested string preference.
* *
* @see setCharPref * @see setCharPref
*/ */
string getCharPref(in string aPrefName); [optional_argc,binaryname(GetCharPrefWithDefault)]
string getCharPref(in string aPrefName, [optional] in string aDefaultValue);
[noscript,binaryname(GetCharPref)]
string getCharPrefXPCOM(in string aPrefName);
/** /**
* Called to set the state of an individual string preference. * Called to set the state of an individual string preference.
@ -118,12 +130,16 @@ interface nsIPrefBranch : nsISupports
* Called to get the state of an individual integer preference. * Called to get the state of an individual integer preference.
* *
* @param aPrefName The integer preference to get the value of. * @param aPrefName The integer preference to get the value of.
* @param aDefaultValue The value to return if the preference is not set.
* *
* @return long The value of the requested integer preference. * @return long The value of the requested integer preference.
* *
* @see setIntPref * @see setIntPref
*/ */
long getIntPref(in string aPrefName); [optional_argc,binaryname(GetIntPrefWithDefault)]
long getIntPref(in string aPrefName, [optional] in long aDefaultValue);
[noscript,binaryname(GetIntPref)]
long getIntPrefXPCOM(in string aPrefName);
/** /**
* Called to set the state of an individual integer preference. * Called to set the state of an individual integer preference.

Просмотреть файл

@ -145,6 +145,20 @@ NS_IMETHODIMP nsPrefBranch::GetPrefType(const char *aPrefName, int32_t *_retval)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrefBranch::GetBoolPrefWithDefault(const char *aPrefName,
bool aDefaultValue,
uint8_t _argc, bool *_retval)
{
nsresult rv = GetBoolPref(aPrefName, _retval);
if (NS_FAILED(rv) && _argc == 1) {
*_retval = aDefaultValue;
return NS_OK;
}
return rv;
}
NS_IMETHODIMP nsPrefBranch::GetBoolPref(const char *aPrefName, bool *_retval) NS_IMETHODIMP nsPrefBranch::GetBoolPref(const char *aPrefName, bool *_retval)
{ {
NS_ENSURE_ARG(aPrefName); NS_ENSURE_ARG(aPrefName);
@ -160,6 +174,20 @@ NS_IMETHODIMP nsPrefBranch::SetBoolPref(const char *aPrefName, bool aValue)
return PREF_SetBoolPref(pref, aValue, mIsDefault); return PREF_SetBoolPref(pref, aValue, mIsDefault);
} }
NS_IMETHODIMP nsPrefBranch::GetFloatPrefWithDefault(const char *aPrefName,
float aDefaultValue,
uint8_t _argc, float *_retval)
{
nsresult rv = GetFloatPref(aPrefName, _retval);
if (NS_FAILED(rv) && _argc == 1) {
*_retval = aDefaultValue;
return NS_OK;
}
return rv;
}
NS_IMETHODIMP nsPrefBranch::GetFloatPref(const char *aPrefName, float *_retval) NS_IMETHODIMP nsPrefBranch::GetFloatPref(const char *aPrefName, float *_retval)
{ {
NS_ENSURE_ARG(aPrefName); NS_ENSURE_ARG(aPrefName);
@ -173,6 +201,21 @@ NS_IMETHODIMP nsPrefBranch::GetFloatPref(const char *aPrefName, float *_retval)
return rv; return rv;
} }
NS_IMETHODIMP nsPrefBranch::GetCharPrefWithDefault(const char *aPrefName,
const char *aDefaultValue,
uint8_t _argc, char **_retval)
{
nsresult rv = GetCharPref(aPrefName, _retval);
if (NS_FAILED(rv) && _argc == 1) {
NS_ENSURE_ARG(aDefaultValue);
*_retval = NS_strdup(aDefaultValue);
return NS_OK;
}
return rv;
}
NS_IMETHODIMP nsPrefBranch::GetCharPref(const char *aPrefName, char **_retval) NS_IMETHODIMP nsPrefBranch::GetCharPref(const char *aPrefName, char **_retval)
{ {
NS_ENSURE_ARG(aPrefName); NS_ENSURE_ARG(aPrefName);
@ -199,6 +242,20 @@ nsresult nsPrefBranch::SetCharPrefInternal(const char *aPrefName, const char *aV
return PREF_SetCharPref(pref, aValue, mIsDefault); return PREF_SetCharPref(pref, aValue, mIsDefault);
} }
NS_IMETHODIMP nsPrefBranch::GetIntPrefWithDefault(const char *aPrefName,
int32_t aDefaultValue,
uint8_t _argc, int32_t *_retval)
{
nsresult rv = GetIntPref(aPrefName, _retval);
if (NS_FAILED(rv) && _argc == 1) {
*_retval = aDefaultValue;
return NS_OK;
}
return rv;
}
NS_IMETHODIMP nsPrefBranch::GetIntPref(const char *aPrefName, int32_t *_retval) NS_IMETHODIMP nsPrefBranch::GetIntPref(const char *aPrefName, int32_t *_retval)
{ {
NS_ENSURE_ARG(aPrefName); NS_ENSURE_ARG(aPrefName);

Просмотреть файл

@ -0,0 +1,48 @@
/* 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/. */
/* Tests for providing a default value to get{Bool,Char,Float,Int}Pref */
function run_test() {
var ps = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService)
.QueryInterface(Ci.nsIPrefBranch);
let prefName = "test.default.values.bool";
do_check_throws(function() { ps.getBoolPref(prefName); },
Cr.NS_ERROR_UNEXPECTED);
strictEqual(ps.getBoolPref(prefName, false), false);
strictEqual(ps.getBoolPref(prefName, true), true);
ps.setBoolPref(prefName, true);
strictEqual(ps.getBoolPref(prefName), true);
strictEqual(ps.getBoolPref(prefName, false), true);
strictEqual(ps.getBoolPref(prefName, true), true);
prefName = "test.default.values.char";
do_check_throws(function() { ps.getCharPref(prefName); },
Cr.NS_ERROR_UNEXPECTED);
strictEqual(ps.getCharPref(prefName, ""), "");
strictEqual(ps.getCharPref(prefName, "string"), "string");
ps.setCharPref(prefName, "foo");
strictEqual(ps.getCharPref(prefName), "foo");
strictEqual(ps.getCharPref(prefName, "string"), "foo");
prefName = "test.default.values.float";
do_check_throws(function() { ps.getFloatPref(prefName); },
Cr.NS_ERROR_UNEXPECTED);
strictEqual(ps.getFloatPref(prefName, 3.5), 3.5);
strictEqual(ps.getFloatPref(prefName, 0), 0);
ps.setCharPref(prefName, 1.75);
strictEqual(ps.getFloatPref(prefName), 1.75);
strictEqual(ps.getFloatPref(prefName, 3.5), 1.75);
prefName = "test.default.values.int";
do_check_throws(function() { ps.getIntPref(prefName); },
Cr.NS_ERROR_UNEXPECTED);
strictEqual(ps.getIntPref(prefName, 3), 3);
strictEqual(ps.getIntPref(prefName, 0), 0);
ps.setIntPref(prefName, 42);
strictEqual(ps.getIntPref(prefName), 42);
strictEqual(ps.getIntPref(prefName, 3), 42);
}

Просмотреть файл

@ -12,6 +12,7 @@ support-files =
[test_stickyprefs.js] [test_stickyprefs.js]
support-files = data/testPrefSticky.js data/testPrefStickyUser.js support-files = data/testPrefSticky.js data/testPrefStickyUser.js
[test_changeType.js] [test_changeType.js]
[test_defaultValues.js]
[test_dirtyPrefs.js] [test_dirtyPrefs.js]
[test_extprefs.js] [test_extprefs.js]
[test_libPrefs.js] [test_libPrefs.js]