From 8e93a5852c25eda9e75b8f6a14bbebe3bf9603a4 Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Sun, 29 May 2011 08:39:27 +0900 Subject: [PATCH] Bug 659913 part.2 Implement AddObservers and RemoveObservers r=roc --- modules/libpref/public/Preferences.h | 11 +++++++++ modules/libpref/src/Preferences.cpp | 36 ++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/modules/libpref/public/Preferences.h b/modules/libpref/public/Preferences.h index 324636bc2836..baab0a8947ca 100644 --- a/modules/libpref/public/Preferences.h +++ b/modules/libpref/public/Preferences.h @@ -193,6 +193,17 @@ public: static nsresult AddWeakObserver(nsIObserver* aObserver, const char* aPref); static nsresult RemoveObserver(nsIObserver* aObserver, const char* aPref); + /** + * Adds/Removes two or more observers for the root pref branch. + * Pass to aPrefs an array of const char* whose last item is NULL. + */ + static nsresult AddStrongObservers(nsIObserver* aObserver, + const char** aPrefs); + static nsresult AddWeakObservers(nsIObserver* aObserver, + const char** aPrefs); + static nsresult RemoveObservers(nsIObserver* aObserver, + const char** aPrefs); + protected: nsresult NotifyServiceObservers(const char *aSubject); nsresult UseDefaultPrefFile(); diff --git a/modules/libpref/src/Preferences.cpp b/modules/libpref/src/Preferences.cpp index dd8b5e630c1b..3aa68f692573 100644 --- a/modules/libpref/src/Preferences.cpp +++ b/modules/libpref/src/Preferences.cpp @@ -1197,4 +1197,40 @@ Preferences::RemoveObserver(nsIObserver* aObserver, return sPreferences->mRootBranch->RemoveObserver(aPref, aObserver); } +// static +nsresult +Preferences::AddStrongObservers(nsIObserver* aObserver, + const char** aPrefs) +{ + for (PRUint32 i = 0; aPrefs[i]; i++) { + nsresult rv = AddStrongObserver(aObserver, aPrefs[i]); + NS_ENSURE_SUCCESS(rv, rv); + } + return NS_OK; +} + +// static +nsresult +Preferences::AddWeakObservers(nsIObserver* aObserver, + const char** aPrefs) +{ + for (PRUint32 i = 0; aPrefs[i]; i++) { + nsresult rv = AddWeakObserver(aObserver, aPrefs[i]); + NS_ENSURE_SUCCESS(rv, rv); + } + return NS_OK; +} + +// static +nsresult +Preferences::RemoveObservers(nsIObserver* aObserver, + const char** aPrefs) +{ + for (PRUint32 i = 0; aPrefs[i]; i++) { + nsresult rv = RemoveObserver(aObserver, aPrefs[i]); + NS_ENSURE_SUCCESS(rv, rv); + } + return NS_OK; +} + } // namespace mozilla