home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Minami 80
/
MINAMI80.iso
/
Extra
/
DivXInstaller.exe
/
$PLUGINSDIR
/
GoogleToolbarFirefox.msi
/
xpi
/
amulet-jslib
/
firefox
/
preferences.js
< prev
next >
Wrap
Text File
|
2006-05-15
|
5KB
|
137 lines
function G_Preferences(opt_startPoint, opt_getDefaultBranch) {
this.debugZone = "prefs";
this.observers_ = {};
var startPoint = opt_startPoint || null;
var prefSvc = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService);
if (opt_getDefaultBranch) {
this.prefs_ = prefSvc.getDefaultBranch(startPoint);
} else {
this.prefs_ = prefSvc.getBranch(startPoint);
}
this.prefs_.QueryInterface(Ci.nsIPrefBranchInternal);
}
G_Preferences.setterMap_ = { "string": "setCharPref",
"boolean": "setBoolPref",
"number": "setIntPref" };
G_Preferences.getterMap_ = {};
G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_STRING] = "getCharPref";
G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_BOOL] = "getBoolPref";
G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_INT] = "getIntPref";
G_Preferences.prototype.setPref = function(key, val) {
var datatype = typeof(val);
if (datatype == "number" && (val % 1 != 0)) {
throw new Error("Cannot store non-integer numbers in preferences.");
}
var meth = G_Preferences.setterMap_[datatype];
if (!meth) {
throw new Error("Pref datatype {" + datatype + "} not supported.");
}
return this.prefs_[meth](key, val);
}
G_Preferences.prototype.getPref = function(key, opt_default) {
var type = this.prefs_.getPrefType(key);
if (type == Ci.nsIPrefBranch.PREF_INVALID) {
return opt_default;
}
var meth = G_Preferences.getterMap_[type];
if (!meth) {
throw new Error("Pref datatype {" + type + "} not supported.");
}
try {
return this.prefs_[meth](key);
} catch(e) {
return opt_default;
}
}
G_Preferences.prototype.setBoolPref = function(which, value) {
return this.setPref(which, value);
}
G_Preferences.prototype.getBoolPref = function(which) {
return this.prefs_.getBoolPref(which);
}
G_Preferences.prototype.getBoolPrefOrDefault = function(which, def) {
return this.getPref(which, def);
}
G_Preferences.prototype.getBoolPrefOrDefaultAndSet = function(which, def) {
try {
return this.prefs_.getBoolPref(which);
} catch(e) {
this.prefs_.setBoolPref(which, !!def); // The !! forces boolean conversion
return def;
}
}
G_Preferences.prototype.clearPref = function(which) {
try {
this.prefs_.clearUserPref(which);
} catch(e) {}
}
G_Preferences.prototype.addObserver = function(which, callback) {
var observer = new G_PreferenceObserver(callback);
if (!this.observers_[which])
this.observers_[which] = new G_ObjectSafeMap();
this.observers_[which].insert(callback, observer);
this.prefs_.addObserver(which, observer, false /* strong reference */);
}
G_Preferences.prototype.removeObserver = function(which, callback) {
var observer = this.observers_[which].find(callback);
G_Assert(this, !!observer, "Tried to unregister a nonexistant observer");
this.prefs_.removeObserver(which, observer);
this.observers_[which].erase(callback);
}
function G_PreferenceObserver(callback) {
this.debugZone = "prefobserver";
this.callback_ = callback;
}
G_PreferenceObserver.prototype.observe = function(subject, topic, data) {
G_Debug(this, "Observed pref change: " + data);
this.callback_(data);
}
G_PreferenceObserver.prototype.QueryInterface = function(iid) {
var Ci = Ci;
if (iid.equals(Ci.nsISupports) ||
iid.equals(Ci.nsIObserves) ||
iid.equals(Ci.nsISupportsWeakReference))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
}
function TEST_G_Preferences() {
if (G_GDEBUG) {
var z = "preferences UNITTEST";
G_debugService.enableZone(z);
G_Debug(z, "Starting");
var p = new G_Preferences();
var testPref = "google-amulet-preferences-unittest";
var noSuchPref = "google-amulet-preferences-unittest-aypabtu";
var observeCount = 0;
function observe(prefChanged) {
G_Assert(z, prefChanged == testPref, "observer broken");
observeCount++;
};
p.addObserver(testPref, observe);
p.setBoolPref(testPref, true);
G_Assert(z, p.getBoolPref(testPref), "get or set broken");
G_Assert(z, observeCount == 1, "observer adding not working");
p.removeObserver(testPref, observe);
p.setBoolPref(testPref, false);
G_Assert(z, observeCount == 1, "observer removal not working");
G_Assert(z, !p.getBoolPref(testPref), "get broken");
try {
p.getBoolPref(noSuchPref);
G_Assert(z, false, "getting non-existent pref didn't throw");
} catch (e) {
}
G_Assert(z,
p.getBoolPrefOrDefault(noSuchPref, true), "default borken (t)");
G_Assert(z, !p.getBoolPrefOrDefault(noSuchPref, false), "default borken");
G_Assert(z, p.getBoolPrefOrDefaultAndSet(noSuchPref, true),
"default and set broken (didnt default");
G_Assert(z,
p.getBoolPref(noSuchPref), "default and set broken (didnt set)");
p.clearPref(noSuchPref);
G_Assert(z, !p.getBoolPrefOrDefault(noSuchPref, false), "clear broken");
p.clearPref(testPref);
G_Debug(z, "PASSED");
}
}