OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This provides a way to access the application's current preferences. | 5 // This provides a way to access the application's current preferences. |
6 // This service has two preference stores, one for "persistent" preferences, | 6 // This service has two preference stores, one for "persistent" preferences, |
7 // which get serialized for use in the next session, and one for "transient" | 7 // which get serialized for use in the next session, and one for "transient" |
8 // preferences, which are in effect for only the current session | 8 // preferences, which are in effect for only the current session |
9 // (this usually encodes things like command-line switches). | 9 // (this usually encodes things like command-line switches). |
10 // | 10 // |
11 // Calling the getter functions in this class basically looks at both the | 11 // Calling the getter functions in this class basically looks at both the |
12 // persistent and transient stores, where any corresponding value in the | 12 // persistent and transient stores, where any corresponding value in the |
13 // transient store overrides the one in the persistent store. | 13 // transient store overrides the one in the persistent store. |
14 | 14 |
15 #ifndef CHROME_BROWSER_PREF_SERVICE_H_ | 15 #ifndef CHROME_BROWSER_PREF_SERVICE_H_ |
16 #define CHROME_BROWSER_PREF_SERVICE_H_ | 16 #define CHROME_BROWSER_PREF_SERVICE_H_ |
17 | 17 |
18 #include <set> | 18 #include <set> |
19 | 19 |
20 #include "base/file_path.h" | 20 #include "base/file_path.h" |
21 #include "base/hash_tables.h" | 21 #include "base/hash_tables.h" |
22 #include "base/non_thread_safe.h" | 22 #include "base/non_thread_safe.h" |
23 #include "base/observer_list.h" | 23 #include "base/observer_list.h" |
24 #include "base/scoped_ptr.h" | 24 #include "base/scoped_ptr.h" |
25 #include "base/values.h" | 25 #include "base/values.h" |
26 #include "chrome/browser/important_file_writer.h" | 26 #include "chrome/browser/important_file_writer.h" |
27 | 27 |
28 class NotificationObserver; | 28 class NotificationObserver; |
29 class Preference; | 29 class Preference; |
| 30 class ScopedPrefUpdate; |
30 | 31 |
31 class PrefService : public NonThreadSafe, | 32 class PrefService : public NonThreadSafe, |
32 public ImportantFileWriter::DataSerializer { | 33 public ImportantFileWriter::DataSerializer { |
33 public: | 34 public: |
34 | 35 |
35 // A helper class to store all the information associated with a preference. | 36 // A helper class to store all the information associated with a preference. |
36 class Preference { | 37 class Preference { |
37 public: | 38 public: |
38 | 39 |
39 // The type of the preference is determined by the type of |default_value|. | 40 // The type of the preference is determined by the type of |default_value|. |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 // Value type will be TYPE_STRING. | 152 // Value type will be TYPE_STRING. |
152 void SetInt64(const wchar_t* path, int64 value); | 153 void SetInt64(const wchar_t* path, int64 value); |
153 int64 GetInt64(const wchar_t* path) const; | 154 int64 GetInt64(const wchar_t* path) const; |
154 void RegisterInt64Pref(const wchar_t* path, int64 default_value); | 155 void RegisterInt64Pref(const wchar_t* path, int64 default_value); |
155 | 156 |
156 // Used to set the value of dictionary or list values in the pref tree. This | 157 // Used to set the value of dictionary or list values in the pref tree. This |
157 // will create a dictionary or list if one does not exist in the pref tree. | 158 // will create a dictionary or list if one does not exist in the pref tree. |
158 // This method returns NULL only if you're requesting an unregistered pref or | 159 // This method returns NULL only if you're requesting an unregistered pref or |
159 // a non-dict/non-list pref. | 160 // a non-dict/non-list pref. |
160 // WARNING: Changes to the dictionary or list will not automatically notify | 161 // WARNING: Changes to the dictionary or list will not automatically notify |
161 // pref observers. TODO(tc): come up with a way to still fire observers. | 162 // pref observers. |
| 163 // Use a ScopedPrefUpdate to update observers on changes. |
162 DictionaryValue* GetMutableDictionary(const wchar_t* path); | 164 DictionaryValue* GetMutableDictionary(const wchar_t* path); |
163 ListValue* GetMutableList(const wchar_t* path); | 165 ListValue* GetMutableList(const wchar_t* path); |
164 | 166 |
165 // Returns true if a value has been set for the specified path. | 167 // Returns true if a value has been set for the specified path. |
166 // NOTE: this is NOT the same as FindPreference. In particular | 168 // NOTE: this is NOT the same as FindPreference. In particular |
167 // FindPreference returns whether RegisterXXX has been invoked, where as | 169 // FindPreference returns whether RegisterXXX has been invoked, where as |
168 // this checks if a value exists for the path. | 170 // this checks if a value exists for the path. |
169 bool HasPrefPath(const wchar_t* path) const; | 171 bool HasPrefPath(const wchar_t* path) const; |
170 | 172 |
171 class PreferencePathComparator { | 173 class PreferencePathComparator { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 // A set of all the registered Preference objects. | 211 // A set of all the registered Preference objects. |
210 PreferenceSet prefs_; | 212 PreferenceSet prefs_; |
211 | 213 |
212 // A map from pref names to a list of observers. Observers get fired in the | 214 // A map from pref names to a list of observers. Observers get fired in the |
213 // order they are added. | 215 // order they are added. |
214 typedef ObserverList<NotificationObserver> NotificationObserverList; | 216 typedef ObserverList<NotificationObserver> NotificationObserverList; |
215 typedef base::hash_map<std::wstring, NotificationObserverList*> | 217 typedef base::hash_map<std::wstring, NotificationObserverList*> |
216 PrefObserverMap; | 218 PrefObserverMap; |
217 PrefObserverMap pref_observers_; | 219 PrefObserverMap pref_observers_; |
218 | 220 |
| 221 friend class ScopedPrefUpdate; |
| 222 |
219 DISALLOW_COPY_AND_ASSIGN(PrefService); | 223 DISALLOW_COPY_AND_ASSIGN(PrefService); |
220 }; | 224 }; |
221 | 225 |
222 #endif // CHROME_BROWSER_PREF_SERVICE_H_ | 226 #endif // CHROME_BROWSER_PREF_SERVICE_H_ |
OLD | NEW |