summaryrefslogtreecommitdiffstats
path: root/modules/libpref/test/unit/test_bug345529.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/libpref/test/unit/test_bug345529.js')
-rw-r--r--modules/libpref/test/unit/test_bug345529.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/modules/libpref/test/unit/test_bug345529.js b/modules/libpref/test/unit/test_bug345529.js
new file mode 100644
index 0000000000..05fce35f57
--- /dev/null
+++ b/modules/libpref/test/unit/test_bug345529.js
@@ -0,0 +1,25 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Regression test for bug 345529 - crash removing an observer during an
+// nsPref:changed notification.
+function run_test() {
+ const PREF_NAME = "testPref";
+
+ var observer = {
+ QueryInterface: ChromeUtils.generateQI(["nsIObserver"]),
+
+ observe: function observe(aSubject, aTopic, aState) {
+ Services.prefs.removeObserver(PREF_NAME, observer);
+ },
+ };
+ Services.prefs.addObserver(PREF_NAME, observer);
+
+ Services.prefs.setCharPref(PREF_NAME, "test0");
+ // This second call isn't needed on a clean profile: it makes sure
+ // the observer gets called even if the pref already had the value
+ // "test0" before this test.
+ Services.prefs.setCharPref(PREF_NAME, "test1");
+
+ Assert.ok(true);
+}