Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: chrome/browser/api/prefs/pref_service_base.h

Issue 11243002: Move the bits of Prefs where production code has only trivially easy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments, fix gypi problem Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This is the base interface for a preference services that provides
6 // a way to access the application's current preferences.
7 //
8 // This base interface assumes all preferences are local. See
9 // SyncablePrefServiceBase for the interface to a preference service
10 // that stores preferences that can be synced.
11 //
12 // Chromium settings and storage represent user-selected preferences and
13 // information and MUST not be extracted, overwritten or modified except
14 // through Chromium defined APIs.
15
16 #ifndef CHROME_BROWSER_API_PREFS_PREF_SERVICE_BASE_H_
17 #define CHROME_BROWSER_API_PREFS_PREF_SERVICE_BASE_H_
18
19 #include "base/values.h"
20
21 namespace content {
22 class BrowserContext;
23 class NotificationObserver;
24 }
25
26 namespace subtle {
27 class PrefMemberBase;
28 }
29
30 class FilePath;
31 class Profile;
32 class TabContents;
33
34 class PrefServiceBase {
35 public:
36 // Retrieves a PrefServiceBase for the given context.
37 static PrefServiceBase* FromBrowserContext(content::BrowserContext* context);
38
39 virtual ~PrefServiceBase() {}
40
41 // Enum used when registering preferences to determine if it should be synced
42 // or not. This is only used for profile prefs, not local state prefs.
43 // See the Register*Pref methods for profile prefs below.
44 enum PrefSyncStatus {
45 UNSYNCABLE_PREF,
46 SYNCABLE_PREF
47 };
48
49 // Interface to a single preference.
50 class Preference {
51 public:
52 virtual ~Preference() {}
53
54 // Returns the name of the Preference (i.e., the key, e.g.,
55 // browser.window_placement).
56 virtual const std::string name() const = 0;
57
58 // Returns the registered type of the preference.
59 virtual base::Value::Type GetType() const = 0;
60
61 // Returns the value of the Preference, falling back to the registered
62 // default value if no other has been set.
63 virtual const base::Value* GetValue() const = 0;
64
65 // Returns the value recommended by the admin, if any.
66 virtual const base::Value* GetRecommendedValue() const = 0;
67
68 // Returns true if the Preference is managed, i.e. set by an admin policy.
69 // Since managed prefs have the highest priority, this also indicates
70 // whether the pref is actually being controlled by the policy setting.
71 virtual bool IsManaged() const = 0;
72
73 // Returns true if the Preference is recommended, i.e. set by an admin
74 // policy but the user is allowed to change it.
75 virtual bool IsRecommended() const = 0;
76
77 // Returns true if the Preference has a value set by an extension, even if
78 // that value is being overridden by a higher-priority source.
79 virtual bool HasExtensionSetting() const = 0;
80
81 // Returns true if the Preference has a user setting, even if that value is
82 // being overridden by a higher-priority source.
83 virtual bool HasUserSetting() const = 0;
84
85 // Returns true if the Preference value is currently being controlled by an
86 // extension, and not by any higher-priority source.
87 virtual bool IsExtensionControlled() const = 0;
88
89 // Returns true if the Preference value is currently being controlled by a
90 // user setting, and not by any higher-priority source.
91 virtual bool IsUserControlled() const = 0;
92
93 // Returns true if the Preference is currently using its default value,
94 // and has not been set by any higher-priority source (even with the same
95 // value).
96 virtual bool IsDefaultValue() const = 0;
97
98 // Returns true if the user can change the Preference value, which is the
99 // case if no higher-priority source than the user store controls the
100 // Preference.
101 virtual bool IsUserModifiable() const = 0;
102
103 // Returns true if an extension can change the Preference value, which is
104 // the case if no higher-priority source than the extension store controls
105 // the Preference.
106 virtual bool IsExtensionModifiable() const = 0;
107 };
108
109 // Returns true if the preference for the given preference name is available
110 // and is managed.
111 virtual bool IsManagedPreference(const char* pref_name) const = 0;
112
113 // Returns |true| if a preference with the given name is available and its
114 // value can be changed by the user.
115 virtual bool IsUserModifiablePreference(const char* pref_name) const = 0;
116
117 // Make the PrefService aware of a pref.
118 // TODO(zea): split local state and profile prefs into their own subclasses.
119 // ---------- Local state prefs ----------
120 virtual void RegisterBooleanPref(const char* path,
121 bool default_value) = 0;
122 virtual void RegisterIntegerPref(const char* path,
123 int default_value) = 0;
124 virtual void RegisterDoublePref(const char* path,
125 double default_value) = 0;
126 virtual void RegisterStringPref(const char* path,
127 const std::string& default_value) = 0;
128 virtual void RegisterFilePathPref(const char* path,
129 const FilePath& default_value) = 0;
130 virtual void RegisterListPref(const char* path) = 0;
131 virtual void RegisterDictionaryPref(const char* path) = 0;
132 // These take ownership of the default_value:
133 virtual void RegisterListPref(const char* path,
134 base::ListValue* default_value) = 0;
135 virtual void RegisterDictionaryPref(
136 const char* path, base::DictionaryValue* default_value) = 0;
137 // These variants use a default value from the locale dll instead.
138 virtual void RegisterLocalizedBooleanPref(
139 const char* path, int locale_default_message_id) = 0;
140 virtual void RegisterLocalizedIntegerPref(
141 const char* path, int locale_default_message_id) = 0;
142 virtual void RegisterLocalizedDoublePref(
143 const char* path, int locale_default_message_id) = 0;
144 virtual void RegisterLocalizedStringPref(
145 const char* path, int locale_default_message_id) = 0;
146 virtual void RegisterInt64Pref(const char* path,
147 int64 default_value) = 0;
148
149 // ---------- Profile prefs ----------
150 // Profile prefs must specify whether the pref should be synchronized across
151 // machines or not (see PrefSyncStatus enum above).
152 virtual void RegisterBooleanPref(const char* path,
153 bool default_value,
154 PrefSyncStatus sync_status) = 0;
155 virtual void RegisterIntegerPref(const char* path,
156 int default_value,
157 PrefSyncStatus sync_status) = 0;
158 virtual void RegisterDoublePref(const char* path,
159 double default_value,
160 PrefSyncStatus sync_status) = 0;
161 virtual void RegisterStringPref(const char* path,
162 const std::string& default_value,
163 PrefSyncStatus sync_status) = 0;
164 virtual void RegisterFilePathPref(const char* path,
165 const FilePath& default_value,
166 PrefSyncStatus sync_status) = 0;
167 virtual void RegisterListPref(const char* path,
168 PrefSyncStatus sync_status) = 0;
169 virtual void RegisterDictionaryPref(const char* path,
170 PrefSyncStatus sync_status) = 0;
171 // These take ownership of the default_value:
172 virtual void RegisterListPref(const char* path,
173 base::ListValue* default_value,
174 PrefSyncStatus sync_status) = 0;
175 virtual void RegisterDictionaryPref(const char* path,
176 base::DictionaryValue* default_value,
177 PrefSyncStatus sync_status) = 0;
178 // These variants use a default value from the locale dll instead.
179 virtual void RegisterLocalizedBooleanPref(
180 const char* path,
181 int locale_default_message_id,
182 PrefSyncStatus sync_status) = 0;
183 virtual void RegisterLocalizedIntegerPref(
184 const char* path,
185 int locale_default_message_id,
186 PrefSyncStatus sync_status) = 0;
187 virtual void RegisterLocalizedDoublePref(
188 const char* path,
189 int locale_default_message_id,
190 PrefSyncStatus sync_status) = 0;
191 virtual void RegisterLocalizedStringPref(
192 const char* path,
193 int locale_default_message_id,
194 PrefSyncStatus sync_status) = 0;
195 virtual void RegisterInt64Pref(const char* path,
196 int64 default_value,
197 PrefSyncStatus sync_status) = 0;
198 virtual void RegisterUint64Pref(const char* path,
199 uint64 default_value,
200 PrefSyncStatus sync_status) = 0;
201 // Unregisters a preference.
202 virtual void UnregisterPreference(const char* path) = 0;
203
204 // Look up a preference. Returns NULL if the preference is not
205 // registered.
206 virtual const Preference* FindPreference(const char* pref_name) const = 0;
207
208 // If the path is valid and the value at the end of the path matches the type
209 // specified, it will return the specified value. Otherwise, the default
210 // value (set when the pref was registered) will be returned.
211 virtual bool GetBoolean(const char* path) const = 0;
212 virtual int GetInteger(const char* path) const = 0;
213 virtual double GetDouble(const char* path) const = 0;
214 virtual std::string GetString(const char* path) const = 0;
215 virtual FilePath GetFilePath(const char* path) const = 0;
216
217 // Returns the branch if it exists, or the registered default value otherwise.
218 // Note that |path| must point to a registered preference. In that case, these
219 // functions will never return NULL.
220 virtual const base::DictionaryValue* GetDictionary(
221 const char* path) const = 0;
222 virtual const base::ListValue* GetList(const char* path) const = 0;
223
224 // Removes a user pref and restores the pref to its default value.
225 virtual void ClearPref(const char* path) = 0;
226
227 // If the path is valid (i.e., registered), update the pref value in the user
228 // prefs.
229 // To set the value of dictionary or list values in the pref tree use
230 // Set(), but to modify the value of a dictionary or list use either
231 // ListPrefUpdate or DictionaryPrefUpdate from scoped_user_pref_update.h.
232 virtual void Set(const char* path, const base::Value& value) = 0;
233 virtual void SetBoolean(const char* path, bool value) = 0;
234 virtual void SetInteger(const char* path, int value) = 0;
235 virtual void SetDouble(const char* path, double value) = 0;
236 virtual void SetString(const char* path, const std::string& value) = 0;
237 virtual void SetFilePath(const char* path, const FilePath& value) = 0;
238
239 // Int64 helper methods that actually store the given value as a string.
240 // Note that if obtaining the named value via GetDictionary or GetList, the
241 // Value type will be TYPE_STRING.
242 virtual void SetInt64(const char* path, int64 value) = 0;
243 virtual int64 GetInt64(const char* path) const = 0;
244
245 // As above, but for unsigned values.
246 virtual void SetUint64(const char* path, uint64 value) = 0;
247 virtual uint64 GetUint64(const char* path) const = 0;
248
249 protected:
250 // Registration of pref change observers must be done using the
251 // PrefChangeRegistrar, which is declared as a friend here to grant it
252 // access to the otherwise protected members Add/RemovePrefObserver.
253 // PrefMember registers for preferences changes notification directly to
254 // avoid the storage overhead of the registrar, so its base class must be
255 // declared as a friend, too.
256 friend class PrefChangeRegistrar;
257 friend class subtle::PrefMemberBase;
258
259 // These are protected so they can only be accessed by the friend
260 // classes listed above.
261 //
262 // If the pref at the given path changes, we call the observer's Observe
263 // method with PREF_CHANGED. Note that observers should not call these methods
264 // directly but rather use a PrefChangeRegistrar to make sure the observer
265 // gets cleaned up properly.
266 virtual void AddPrefObserver(const char* path,
267 content::NotificationObserver* obs) = 0;
268 virtual void RemovePrefObserver(const char* path,
269 content::NotificationObserver* obs) = 0;
270 };
271
272 #endif // CHROME_BROWSER_API_PREFS_PREF_SERVICE_BASE_H_
OLDNEW
« no previous file with comments | « chrome/browser/api/prefs/pref_member.cc ('k') | chrome/browser/autofill/autocomplete_history_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698