PageRenderTime 30ms CodeModel.GetById 20ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 1ms

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