|
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. |
|
6 function 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 } |