/modules/libpref/test/unit/test_bug345529.js

http://github.com/zpao/v8monkey · JavaScript · 34 lines · 22 code · 5 blank · 7 comment · 1 complexity · f086ecffe2d7b888bd1a3f434a3f364d MD5 · raw file

  1. /* Any copyright is dedicated to the Public Domain.
  2. * http://creativecommons.org/licenses/publicdomain/ */
  3. // Regression test for bug 345529 - crash removing an observer during an
  4. // nsPref:changed notification.
  5. function run_test() {
  6. const Cc = Components.classes;
  7. const Ci = Components.interfaces;
  8. const PREF_NAME = "testPref";
  9. var prefs = Cc["@mozilla.org/preferences-service;1"]
  10. .getService(Ci.nsIPrefBranch);
  11. var observer = {
  12. QueryInterface: function QueryInterface(aIID) {
  13. if (aIID.equals(Ci.nsIObserver) ||
  14. aIID.equals(Ci.nsISupports))
  15. return this;
  16. throw Components.results.NS_NOINTERFACE;
  17. },
  18. observe: function observe(aSubject, aTopic, aState) {
  19. prefs.removeObserver(PREF_NAME, observer);
  20. }
  21. }
  22. prefs.addObserver(PREF_NAME, observer, false);
  23. prefs.setCharPref(PREF_NAME, "test0")
  24. // This second call isn't needed on a clean profile: it makes sure
  25. // the observer gets called even if the pref already had the value
  26. // "test0" before this test.
  27. prefs.setCharPref(PREF_NAME, "test1")
  28. do_check_true(true);
  29. }