зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1338306 - nsIPrefBranch.get*Pref should support providing a default value, r=bsmedberg.
This commit is contained in:
Родитель
a9a7378a89
Коммит
8e85c687b4
|
@ -57,12 +57,16 @@ interface nsIPrefBranch : nsISupports
|
|||
* Called to get the state of an individual boolean preference.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @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.
|
||||
|
@ -83,23 +87,31 @@ interface nsIPrefBranch : nsISupports
|
|||
* are converted to floating point numbers.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @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.
|
||||
|
@ -118,12 +130,16 @@ interface nsIPrefBranch : nsISupports
|
|||
* Called to get the state of an individual integer preference.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @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.
|
||||
|
|
|
@ -145,6 +145,20 @@ NS_IMETHODIMP nsPrefBranch::GetPrefType(const char *aPrefName, int32_t *_retval)
|
|||
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_ENSURE_ARG(aPrefName);
|
||||
|
@ -160,6 +174,20 @@ NS_IMETHODIMP nsPrefBranch::SetBoolPref(const char *aPrefName, bool aValue)
|
|||
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_ENSURE_ARG(aPrefName);
|
||||
|
@ -173,6 +201,21 @@ NS_IMETHODIMP nsPrefBranch::GetFloatPref(const char *aPrefName, float *_retval)
|
|||
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_ENSURE_ARG(aPrefName);
|
||||
|
@ -199,6 +242,20 @@ nsresult nsPrefBranch::SetCharPrefInternal(const char *aPrefName, const char *aV
|
|||
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_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]
|
||||
support-files = data/testPrefSticky.js data/testPrefStickyUser.js
|
||||
[test_changeType.js]
|
||||
[test_defaultValues.js]
|
||||
[test_dirtyPrefs.js]
|
||||
[test_extprefs.js]
|
||||
[test_libPrefs.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче