home *** CD-ROM | disk | FTP | other *** search
/ Minami 83 / MINAMI83.iso / Extra / DivXInstaller.exe / $PLUGINSDIR / GoogleToolbarFirefox.msi / xpi / amulet-jslib / firefox / preferences.js < prev    next >
Text File  |  2006-08-07  |  5KB  |  144 lines

  1. function G_Preferences(opt_startPoint, opt_getDefaultBranch) {
  2. this.debugZone = "prefs";
  3. this.observers_ = {};
  4. var startPoint = opt_startPoint || null;
  5. var prefSvc = Cc["@mozilla.org/preferences-service;1"]
  6. .getService(Ci.nsIPrefService);
  7. if (opt_getDefaultBranch) {
  8. this.prefs_ = prefSvc.getDefaultBranch(startPoint);
  9. } else {
  10. this.prefs_ = prefSvc.getBranch(startPoint);
  11. }
  12. this.prefs_.QueryInterface(Ci.nsIPrefBranchInternal);
  13. }
  14. G_Preferences.setterMap_ = { "string": "setCharPref",
  15. "boolean": "setBoolPref",
  16. "number": "setIntPref" };
  17. G_Preferences.getterMap_ = {};
  18. G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_STRING] = "getCharPref";
  19. G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_BOOL] = "getBoolPref";
  20. G_Preferences.getterMap_[Ci.nsIPrefBranch.PREF_INT] = "getIntPref";
  21. G_Preferences.prototype.setPref = function(key, val) {
  22. var datatype = typeof(val);
  23. if (datatype == "number" && (val % 1 != 0)) {
  24. throw new Error("Cannot store non-integer numbers in preferences.");
  25. }
  26. var meth = G_Preferences.setterMap_[datatype];
  27. if (!meth) {
  28. throw new Error("Pref datatype {" + datatype + "} not supported.");
  29. }
  30. return this.prefs_[meth](key, val);
  31. }
  32. G_Preferences.prototype.getPref = function(key, opt_default) {
  33. var type = this.prefs_.getPrefType(key);
  34. if (type == Ci.nsIPrefBranch.PREF_INVALID) {
  35. return opt_default;
  36. }
  37. var meth = G_Preferences.getterMap_[type];
  38. if (!meth) {
  39. throw new Error("Pref datatype {" + type + "} not supported.");
  40. }
  41. try {
  42. return this.prefs_[meth](key);
  43. } catch(e) {
  44. return opt_default;
  45. }
  46. }
  47. G_Preferences.prototype.setBoolPref = function(which, value) {
  48. return this.setPref(which, value);
  49. }
  50. G_Preferences.prototype.getBoolPref = function(which) {
  51. return this.prefs_.getBoolPref(which);
  52. }
  53. G_Preferences.prototype.getBoolPrefOrDefault = function(which, def) {
  54. return this.getPref(which, def);
  55. }
  56. G_Preferences.prototype.getBoolPrefOrDefaultAndSet = function(which, def) {
  57. try {
  58. return this.prefs_.getBoolPref(which);
  59. } catch(e) {
  60. this.prefs_.setBoolPref(which, !!def);  // The !! forces boolean conversion
  61. return def;
  62. }
  63. }
  64. G_Preferences.prototype.clearPref = function(which) {
  65. try {
  66. this.prefs_.clearUserPref(which);
  67. } catch(e) {}
  68. }
  69. G_Preferences.prototype.addObserver = function(which, callback) {
  70. var observer = new G_PreferenceObserver(callback);
  71. if (!this.observers_[which])
  72. this.observers_[which] = new G_ObjectSafeMap();
  73. this.observers_[which].insert(callback, observer);
  74. this.prefs_.addObserver(which, observer, false /* strong reference */);
  75. }
  76. G_Preferences.prototype.removeObserver = function(which, callback) {
  77. var observer = this.observers_[which].find(callback);
  78. G_Assert(this, !!observer, "Tried to unregister a nonexistant observer");
  79. this.prefs_.removeObserver(which, observer);
  80. this.observers_[which].erase(callback);
  81. }
  82. G_Preferences.prototype.getChildNames = function(opt_startingPoint) {
  83. if (!opt_startingPoint) {
  84. opt_startingPoint = "";
  85. }
  86. return this.prefs_.getChildList(opt_startingPoint,
  87. {} /* count, not used */);
  88. }
  89. function G_PreferenceObserver(callback) {
  90. this.debugZone = "prefobserver";
  91. this.callback_ = callback;
  92. }
  93. G_PreferenceObserver.prototype.observe = function(subject, topic, data) {
  94. G_Debug(this, "Observed pref change: " + data);
  95. this.callback_(data);
  96. }
  97. G_PreferenceObserver.prototype.QueryInterface = function(iid) {
  98. var Ci = Ci;
  99. if (iid.equals(Ci.nsISupports) ||
  100. iid.equals(Ci.nsIObserves) ||
  101. iid.equals(Ci.nsISupportsWeakReference))
  102. return this;
  103. throw Components.results.NS_ERROR_NO_INTERFACE;
  104. }
  105. function TEST_G_Preferences() {
  106. if (G_GDEBUG) {
  107. var z = "preferences UNITTEST";
  108. G_debugService.enableZone(z);
  109. G_Debug(z, "Starting");
  110. var p = new G_Preferences();
  111. var testPref = "google-amulet-preferences-unittest";
  112. var noSuchPref = "google-amulet-preferences-unittest-aypabtu";
  113. var observeCount = 0;
  114. function observe(prefChanged) {
  115. G_Assert(z, prefChanged == testPref, "observer broken");
  116. observeCount++;
  117. };
  118. p.addObserver(testPref, observe);
  119. p.setBoolPref(testPref, true);
  120. G_Assert(z, p.getBoolPref(testPref), "get or set broken");
  121. G_Assert(z, observeCount == 1, "observer adding not working");
  122. p.removeObserver(testPref, observe);
  123. p.setBoolPref(testPref, false);
  124. G_Assert(z, observeCount == 1, "observer removal not working");
  125. G_Assert(z, !p.getBoolPref(testPref), "get broken");
  126. try {
  127. p.getBoolPref(noSuchPref);
  128. G_Assert(z, false, "getting non-existent pref didn't throw");
  129. } catch (e) {
  130. }
  131. G_Assert(z,
  132. p.getBoolPrefOrDefault(noSuchPref, true), "default borken (t)");
  133. G_Assert(z, !p.getBoolPrefOrDefault(noSuchPref, false), "default borken");
  134. G_Assert(z, p.getBoolPrefOrDefaultAndSet(noSuchPref, true),
  135. "default and set broken (didnt default");
  136. G_Assert(z,
  137. p.getBoolPref(noSuchPref), "default and set broken (didnt set)");
  138. p.clearPref(noSuchPref);
  139. G_Assert(z, !p.getBoolPrefOrDefault(noSuchPref, false), "clear broken");
  140. p.clearPref(testPref);
  141. G_Debug(z, "PASSED");
  142. }
  143. }
  144.