OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ | 5 #ifndef CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ |
6 #define CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ | 6 #define CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
14 #include "base/callback.h" | 14 #include "base/callback.h" |
15 #include "base/gtest_prod_util.h" | 15 #include "base/gtest_prod_util.h" |
16 #include "base/ref_counted.h" | 16 #include "base/ref_counted.h" |
17 #include "base/scoped_ptr.h" | 17 #include "base/scoped_ptr.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "chrome/browser/browser_thread.h" | 19 #include "chrome/browser/browser_thread.h" |
20 #include "chrome/browser/prefs/pref_notifier.h" | 20 #include "chrome/common/notification_observer.h" |
21 #include "chrome/common/notification_registrar.h" | |
21 #include "chrome/common/pref_store.h" | 22 #include "chrome/common/pref_store.h" |
22 | 23 |
23 class FilePath; | 24 class FilePath; |
25 class PrefNotifier; | |
24 class PrefStore; | 26 class PrefStore; |
25 class Profile; | 27 class Profile; |
26 | 28 |
27 // The PrefValueStore manages various sources of values for Preferences | 29 // The PrefValueStore manages various sources of values for Preferences |
28 // (e.g., configuration policies, extensions, and user settings). It returns | 30 // (e.g., configuration policies, extensions, and user settings). It returns |
29 // the value of a Preference from the source with the highest priority, and | 31 // the value of a Preference from the source with the highest priority, and |
30 // allows setting user-defined values for preferences that are not managed. | 32 // allows setting user-defined values for preferences that are not managed. |
31 // See PrefNotifier for a list of the available preference sources (PrefStores) | |
32 // and their descriptions. | |
33 // | 33 // |
34 // Unless otherwise explicitly noted, all of the methods of this class must | 34 // Unless otherwise explicitly noted, all of the methods of this class must |
35 // be called on the UI thread. | 35 // be called on the UI thread. |
36 class PrefValueStore : public base::RefCountedThreadSafe<PrefValueStore> { | 36 class PrefValueStore : public base::RefCountedThreadSafe<PrefValueStore>, |
37 public NotificationObserver { | |
37 public: | 38 public: |
38 // Returns a new PrefValueStore with all applicable PrefStores. The | 39 // In decreasing order of precedence: |
39 // |pref_filename| points to the user preference file. The |profile| is the | 40 // |managed_platform_prefs| contains all managed platform (non-cloud policy) |
40 // one to which these preferences apply; it may be NULL if we're dealing | 41 // preference values. |
41 // with the local state. If |pref_filename| is empty, the user PrefStore will | 42 // |device_management_prefs| contains all device management (cloud policy) |
42 // not be created. If |user_only| is true, no PrefStores will be created | 43 // preference values. |
43 // other than the user and default PrefStores. This should not normally be | 44 // |extension_prefs| contains preference values set by extensions. |
44 // called directly: the usual way to create a PrefValueStore is by creating a | 45 // |command_line_prefs| contains preference values set by command-line |
45 // PrefService. | 46 // switches. |
46 static PrefValueStore* CreatePrefValueStore(const FilePath& pref_filename, | 47 // |user_prefs| contains all user-set preference values. |
47 Profile* profile, | 48 // |recommended_prefs| contains all recommended (policy) preference values. |
48 bool user_only); | 49 // |default_prefs| contains application-default preference values. It must |
49 | 50 // be non-null if any preferences are to be registered. |
50 ~PrefValueStore(); | 51 // |
52 // |pref_notifier| facilitates broadcasting preference change notifications | |
53 // to the world. | |
54 // | |
55 // The |profile| parameter is used to construct a replacement device | |
56 // management pref store. This is done after policy refresh when we swap out | |
57 // the policy pref stores for new ones, so the |profile| pointer needs to be | |
58 // kept around for then. It is safe to pass a NULL pointer for local state | |
59 // preferences. | |
60 // | |
61 // TODO(mnissler, danno): Refactor the pref store interface and refresh logic | |
62 // so refreshes can be handled by the pref store itself without swapping | |
63 // stores. This way we can get rid of the profile pointer here. | |
64 PrefValueStore(PrefStore* managed_platform_prefs, | |
65 PrefStore* device_management_prefs, | |
66 PrefStore* extension_prefs, | |
67 PrefStore* command_line_prefs, | |
68 PrefStore* user_prefs, | |
69 PrefStore* recommended_prefs, | |
70 PrefStore* default_prefs, | |
71 PrefNotifier* pref_notifier, | |
72 Profile* profile); | |
73 virtual ~PrefValueStore(); | |
51 | 74 |
52 // Gets the value for the given preference name that has a valid value type; | 75 // Gets the value for the given preference name that has a valid value type; |
53 // that is, the same type the preference was registered with, or NULL for | 76 // that is, the same type the preference was registered with, or NULL for |
54 // default values of Dictionaries and Lists. Returns true if a valid value | 77 // default values of Dictionaries and Lists. Returns true if a valid value |
55 // was found in any of the available PrefStores. Most callers should use | 78 // was found in any of the available PrefStores. Most callers should use |
56 // Preference::GetValue() instead of calling this method directly. | 79 // Preference::GetValue() instead of calling this method directly. |
57 bool GetValue(const std::string& name, Value** out_value) const; | 80 bool GetValue(const std::string& name, Value** out_value) const; |
58 | 81 |
59 // Same as GetValue but only searches USER_STORE. | 82 // Same as GetValue but only searches the user store. |
60 bool GetUserValue(const std::string& name, Value** out_value) const; | 83 bool GetUserValue(const std::string& name, Value** out_value) const; |
61 | 84 |
62 // Adds a preference to the mapping of names to types. | 85 // Adds a preference to the mapping of names to types. |
63 void RegisterPreferenceType(const std::string& name, Value::ValueType type); | 86 void RegisterPreferenceType(const std::string& name, Value::ValueType type); |
64 | 87 |
65 // Gets the registered value type for the given preference name. Returns | 88 // Gets the registered value type for the given preference name. Returns |
66 // Value::TYPE_NULL if the preference has never been registered. | 89 // Value::TYPE_NULL if the preference has never been registered. |
67 Value::ValueType GetRegisteredType(const std::string& name) const; | 90 Value::ValueType GetRegisteredType(const std::string& name) const; |
68 | 91 |
69 // Read preference values into the three PrefStores so that they are available | 92 // Read preference values into the three PrefStores so that they are available |
(...skipping 10 matching lines...) Expand all Loading... | |
80 // the user prefs are expected to be written out. | 103 // the user prefs are expected to be written out. |
81 void ScheduleWritePrefs(); | 104 void ScheduleWritePrefs(); |
82 | 105 |
83 // Returns true if the PrefValueStore contains the given preference (i.e., | 106 // Returns true if the PrefValueStore contains the given preference (i.e., |
84 // it's been registered), and a value with the correct type has been actively | 107 // it's been registered), and a value with the correct type has been actively |
85 // set in some pref store. The application default specified when the pref was | 108 // set in some pref store. The application default specified when the pref was |
86 // registered does not count as an "actively set" value, but another pref | 109 // registered does not count as an "actively set" value, but another pref |
87 // store setting a value that happens to be equal to the default does. | 110 // store setting a value that happens to be equal to the default does. |
88 bool HasPrefPath(const char* name) const; | 111 bool HasPrefPath(const char* name) const; |
89 | 112 |
90 // Called by the PrefNotifier when the value of the preference at |path| has | |
91 // changed, been added, or been removed in one of the PrefStores. The | |
92 // |new_store| is the PrefStoreType of the caller. Returns true if the | |
93 // effective value of the preference has changed, or if the store controlling | |
94 // the pref has changed. Virtual so it can be mocked for a unit test. | |
95 virtual bool PrefHasChanged(const char* path, | |
96 PrefNotifier::PrefStoreType new_store); | |
97 | |
98 // Returns true if the PrefValueStore is read-only. Because the managed | 113 // Returns true if the PrefValueStore is read-only. Because the managed |
99 // platform, device management and recommended PrefStores are always | 114 // platform, device management and recommended PrefStores are always |
100 // read-only, the PrefValueStore as a whole is read-only if the PrefStore | 115 // read-only, the PrefValueStore as a whole is read-only if the PrefStore |
101 // containing the user preferences is read-only. | 116 // containing the user preferences is read-only. |
102 bool ReadOnly(); | 117 bool ReadOnly(); |
battre (please use the other)
2010/12/02 11:51:34
Can we make this const?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
103 | 118 |
104 // Alters the user-defined value of a preference. Even if the preference is | 119 // Alters the user-defined value of a preference. Even if the preference is |
105 // managed this method allows the user-defined value of the preference to be | 120 // managed this method allows the user-defined value of the preference to be |
106 // set. But GetValue calls will not return this value as long as the | 121 // set. However, GetValue calls will not return this value as long as the |
107 // preference is managed. Instead GetValue will return the managed value | 122 // preference is overriden by a store of higher precedence. Note that the |
108 // of the preference. Note that the PrefValueStore takes the ownership of | 123 // PrefValueStore takes the ownership of the value referenced by |in_value|. |
109 // the value referenced by |in_value|. It is an error to call this when no | 124 // It is an error to call this when no user PrefStore has been set. Triggers |
110 // user PrefStore has been set. Returns true if the user-set value of the | 125 // notifications if the user-visible value changes. |
111 // preference was newly added or changed. | 126 void SetUserPrefValue(const char* name, Value* in_value); |
112 bool SetUserPrefValue(const char* name, Value* in_value); | |
113 | 127 |
114 // Removes a value from the user PrefStore. If a preference is managed | 128 // Like SetUserPrefValue, but silently puts the value without triggering |
115 // this function should have no visible effect. Returns true if there was a | 129 // notifications. |
116 // user-set value to be removed. | 130 void PutUserPrefValue(const char* name, Value* in_value); |
battre (please use the other)
2010/12/02 10:41:19
How about SetUserPrefValueSilently? Put and Set so
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
117 bool RemoveUserPrefValue(const char* name); | |
118 | 131 |
119 // Sets a value in the DefaultPrefStore, which takes ownership of the Value. | 132 // Removes a value from the user PrefStore. If a preference is overriden by a |
120 void SetDefaultPrefValue(const char* name, Value* in_value); | 133 // store of higher precedence, this function will have no immediately visible |
134 // effect. Triggers notifications if the user-visible value changes. | |
135 void RemoveUserPrefValue(const char* name); | |
121 | 136 |
122 // These methods return true if a preference with the given name is in the | 137 // These methods return true if a preference with the given name is in the |
123 // indicated pref store, even if that value is currently being overridden by | 138 // indicated pref store, even if that value is currently being overridden by |
124 // a higher-priority source. | 139 // a higher-priority source. |
125 bool PrefValueInManagedPlatformStore(const char* name) const; | 140 bool PrefValueInManagedPlatformStore(const char* name) const; |
126 bool PrefValueInDeviceManagementStore(const char* name) const; | 141 bool PrefValueInDeviceManagementStore(const char* name) const; |
127 bool PrefValueInExtensionStore(const char* name) const; | 142 bool PrefValueInExtensionStore(const char* name) const; |
128 bool PrefValueInUserStore(const char* name) const; | 143 bool PrefValueInUserStore(const char* name) const; |
129 | 144 |
130 // Returns true if a preference has an explicit value in any of the | |
131 // stores in the range specified by |first_checked_store| and | |
132 // |last_checked_store|, even if that value is currently being | |
133 // overridden by a higher-priority store. | |
134 bool PrefValueInStoreRange(const char* name, | |
135 PrefNotifier::PrefStoreType first_checked_store, | |
136 PrefNotifier::PrefStoreType last_checked_store); | |
137 | |
138 // These methods return true if a preference with the given name is actually | 145 // These methods return true if a preference with the given name is actually |
139 // being controlled by the indicated pref store and not being overridden by | 146 // being controlled by the indicated pref store and not being overridden by |
140 // a higher-priority source. | 147 // a higher-priority source. |
141 bool PrefValueFromExtensionStore(const char* name) const; | 148 bool PrefValueFromExtensionStore(const char* name) const; |
142 bool PrefValueFromUserStore(const char* name) const; | 149 bool PrefValueFromUserStore(const char* name) const; |
143 bool PrefValueFromDefaultStore(const char* name) const; | 150 bool PrefValueFromDefaultStore(const char* name) const; |
144 | 151 |
145 // Check whether a Preference value is modifiable by the user, i.e. whether | 152 // Check whether a Preference value is modifiable by the user, i.e. whether |
146 // there is no higher-priority source controlling it. | 153 // there is no higher-priority source controlling it. |
147 bool PrefValueUserModifiable(const char* name) const; | 154 bool PrefValueUserModifiable(const char* name) const; |
battre (please use the other)
2010/12/02 11:51:34
Can we make this const?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
148 | 155 |
149 // Returns the pref store type identifying the source that controls the | |
150 // Preference identified by |name|. If none of the sources has a value, | |
151 // PrefNotifier::INVALID_STORE is returned. In practice, the default PrefStore | |
152 // should always have a value for any registered preferencem, so INVALID_STORE | |
153 // indicates an error. | |
154 PrefNotifier::PrefStoreType ControllingPrefStoreForPref( | |
155 const char* name) const; | |
156 | |
157 // Signature of callback triggered after policy refresh. Parameter is not | |
158 // passed as reference to prevent passing along a pointer to a set whose | |
159 // lifecycle is managed in another thread. | |
160 typedef Callback1<std::vector<std::string> >::Type AfterRefreshCallback; | |
161 | |
162 // Called as a result of a notification of policy change. Triggers a reload of | |
163 // managed platform, device management and recommended preferences from policy | |
164 // from a Task on the FILE thread. The Task will take ownership of the | |
165 // |callback|. |callback| is called with the set of preferences changed by the | |
166 // policy refresh. |callback| is called on the caller's thread as a Task | |
167 // after RefreshPolicyPrefs has returned. | |
168 void RefreshPolicyPrefs(AfterRefreshCallback* callback); | |
169 | |
170 // Returns true if there are proxy preferences in user-modifiable | 156 // Returns true if there are proxy preferences in user-modifiable |
171 // preference stores (e.g. CommandLinePrefStore, ExtensionPrefStore) | 157 // preference stores (e.g. CommandLinePrefStore, ExtensionPrefStore) |
172 // that conflict with proxy settings specified by proxy policy. | 158 // that conflict with proxy settings specified by proxy policy. |
173 bool HasPolicyConflictingUserProxySettings(); | 159 bool HasPolicyConflictingUserProxySettings(); |
battre (please use the other)
2010/12/02 11:51:34
Can we make this const?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
174 | 160 |
175 protected: | 161 protected: |
176 // In decreasing order of precedence: | 162 // PrefStores must be listed here in order from highest to lowest priority. |
danno
2010/12/02 10:31:52
Can these be private?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
177 // |managed_platform_prefs| contains all managed platform (non-cloud policy) | 163 // MANAGED_PLATFORM contains all managed preference values that are |
178 // preference values. | 164 // provided by a platform-specific policy mechanism (e.g. Windows |
179 // |device_management_prefs| contains all device management (cloud policy) | 165 // Group Policy). |
180 // preference values. | 166 // DEVICE_MANAGEMENT contains all managed preference values supplied |
181 // |extension_prefs| contains preference values set by extensions. | 167 // by the device management server (cloud policy). |
182 // |command_line_prefs| contains preference values set by command-line | 168 // EXTENSION contains preference values set by extensions. |
183 // switches. | 169 // COMMAND_LINE contains preference values set by command-line switches. |
184 // |user_prefs| contains all user-set preference values. | 170 // USER contains all user-set preference values. |
185 // |recommended_prefs| contains all recommended (policy) preference values. | 171 // RECOMMENDED contains all recommended (policy) preference values. |
186 // |default_prefs| contains application-default preference values. It must | 172 // DEFAULT contains all application default preference values. |
187 // be non-null if any preferences are to be registered. | 173 enum PrefStoreType { |
188 // | 174 // INVALID_STORE is not associated with an actual PrefStore but used as |
189 // The |profile| parameter is used to construct a replacement device | 175 // an invalid marker, e.g. as a return value. |
190 // management pref store. This is done after policy refresh when we swap out | 176 INVALID_STORE = -1, |
191 // the policy pref stores for new ones, so the |profile| pointer needs to be | 177 MANAGED_PLATFORM_STORE = 0, |
192 // kept around for then. It is safe to pass a NULL pointer for local state | 178 DEVICE_MANAGEMENT_STORE, |
193 // preferences. | 179 EXTENSION_STORE, |
194 // | 180 COMMAND_LINE_STORE, |
195 // TODO(mnissler, danno): Refactor the pref store interface and refresh logic | 181 USER_STORE, |
196 // so refreshes can be handled by the pref store itself without swapping | 182 RECOMMENDED_STORE, |
197 // stores. This way we can get rid of the profile pointer here. | 183 DEFAULT_STORE, |
198 // | 184 PREF_STORE_TYPE_MAX = DEFAULT_STORE |
199 // This constructor should only be used internally, or by subclasses in | 185 }; |
200 // testing. The usual way to create a PrefValueStore is by creating a | |
201 // PrefService. | |
202 PrefValueStore(PrefStore* managed_platform_prefs, | |
203 PrefStore* device_management_prefs, | |
204 PrefStore* extension_prefs, | |
205 PrefStore* command_line_prefs, | |
206 PrefStore* user_prefs, | |
207 PrefStore* recommended_prefs, | |
208 PrefStore* default_prefs, | |
209 Profile* profile); | |
210 | 186 |
211 private: | 187 private: |
188 // Keeps a PrefStore reference on behalf of the PrefValueStore and monitors | |
189 // the PrefStore for changes, forwarding notifications to PrefValueStore. This | |
190 // indirection is here for the sake of disambiguating notifications from the | |
191 // individual PrefStores. | |
192 class PrefStoreKeeper : public PrefStore::ObserverInterface { | |
193 public: | |
194 PrefStoreKeeper(); | |
195 virtual ~PrefStoreKeeper(); | |
196 | |
197 // Takes ownership of |pref_store|. | |
198 void Initialize(PrefValueStore* store, | |
199 PrefStore* pref_store, | |
200 PrefStoreType type); | |
201 | |
202 PrefStore* store() { return pref_store_.get(); } | |
203 const PrefStore* store() const { return pref_store_.get(); } | |
204 | |
205 private: | |
206 // PrefStore::ObserverInterface implementation. | |
207 virtual void OnPrefValueChanged(const std::string& key); | |
208 virtual void OnInitializationCompleted(); | |
209 | |
210 // PrefValueStore this keeper is part of. | |
211 PrefValueStore* pref_value_store_; | |
212 | |
213 // The PrefStore managed by this keeper. | |
214 scoped_ptr<PrefStore> pref_store_; | |
215 | |
216 // Type of the pref store. | |
217 PrefStoreType type_; | |
218 | |
219 DISALLOW_COPY_AND_ASSIGN(PrefStoreKeeper); | |
220 }; | |
221 | |
212 typedef std::map<std::string, Value::ValueType> PrefTypeMap; | 222 typedef std::map<std::string, Value::ValueType> PrefTypeMap; |
213 | 223 |
214 friend class PrefValueStoreTest; | 224 friend class PrefValueStoreTest; |
225 FRIEND_TEST_ALL_PREFIXES(PrefValueStoreTest, TestPolicyRefresh); | |
215 FRIEND_TEST_ALL_PREFIXES(PrefValueStoreTest, | 226 FRIEND_TEST_ALL_PREFIXES(PrefValueStoreTest, |
216 TestRefreshPolicyPrefsCompletion); | 227 TestRefreshPolicyPrefsCompletion); |
228 FRIEND_TEST_ALL_PREFIXES(PrefValueStoreTest, | |
229 TestConcurrentPolicyRefresh); | |
230 | |
231 // Returns true if the actual value is a valid type for the expected type when | |
battre (please use the other)
2010/12/02 11:51:34
actual value? This description is not quite clear
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Changed to "actual type".
| |
232 // found in the given store. | |
233 static bool IsValidType(Value::ValueType expected, | |
234 Value::ValueType actual, | |
235 PrefStoreType store); | |
217 | 236 |
218 // Returns true if the preference with the given name has a value in the | 237 // Returns true if the preference with the given name has a value in the |
219 // given PrefStoreType, of the same value type as the preference was | 238 // given PrefStoreType, of the same value type as the preference was |
220 // registered with. | 239 // registered with. |
221 bool PrefValueInStore(const char* name, | 240 bool PrefValueInStore(const char* name, PrefStoreType store) const; |
222 PrefNotifier::PrefStoreType store) const; | 241 |
242 // Returns true if a preference has an explicit value in any of the | |
243 // stores in the range specified by |first_checked_store| and | |
244 // |last_checked_store|, even if that value is currently being | |
245 // overridden by a higher-priority store. | |
246 bool PrefValueInStoreRange(const char* name, | |
247 PrefStoreType first_checked_store, | |
248 PrefStoreType last_checked_store); | |
battre (please use the other)
2010/12/02 11:51:34
can we make this const?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
249 | |
250 // Returns the pref store type identifying the source that controls the | |
251 // Preference identified by |name|. If none of the sources has a value, | |
252 // INVALID_STORE is returned. In practice, the default PrefStore | |
253 // should always have a value for any registered preferencem, so INVALID_STORE | |
254 // indicates an error. | |
255 PrefStoreType ControllingPrefStoreForPref(const char* name) const; | |
223 | 256 |
224 // Get a value from the specified store type. | 257 // Get a value from the specified store type. |
225 bool GetValueFromStore(const char* name, | 258 bool GetValueFromStore(const char* name, |
226 PrefNotifier::PrefStoreType store, | 259 PrefStoreType store, |
227 Value** out_value) const; | 260 Value** out_value) const; |
228 | 261 |
262 // Called upon changes in individual pref stores in order to determine whether | |
263 // the user-visible pref value has changed. Triggers the change notification | |
264 // if the effective value of the preference has changed, or if the store | |
265 // controlling the pref has changed. | |
266 void NotifyPrefChanged(const char* path, PrefStoreType new_store); | |
danno
2010/12/02 10:31:52
OnPrefValueChanged?
battre (please use the other)
2010/12/02 11:51:34
can we make this const?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Sending a notification has side effects. So making
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
As discussed, we want to keep this since it hosts
| |
267 | |
268 // Called as a result of a notification of policy change. Triggers a reload of | |
269 // managed platform, device management and recommended preferences from policy | |
270 // from a Task on the FILE thread. | |
271 void RefreshPolicyPrefs(); | |
272 | |
229 // Called during policy refresh after ReadPrefs completes on the thread | 273 // Called during policy refresh after ReadPrefs completes on the thread |
230 // that initiated the policy refresh. RefreshPolicyPrefsCompletion takes | 274 // that initiated the policy refresh. RefreshPolicyPrefsCompletion takes |
231 // ownership of the |callback| object. | 275 // ownership of the |callback| object. |
232 void RefreshPolicyPrefsCompletion( | 276 void RefreshPolicyPrefsCompletion( |
233 PrefStore* new_managed_platform_pref_store, | 277 PrefStore* new_managed_platform_pref_store, |
234 PrefStore* new_device_management_pref_store, | 278 PrefStore* new_device_management_pref_store, |
235 PrefStore* new_recommended_pref_store, | 279 PrefStore* new_recommended_pref_store); |
236 AfterRefreshCallback* callback); | |
237 | 280 |
238 // Called during policy refresh to do the ReadPrefs on the FILE thread. | 281 // Called during policy refresh to do the ReadPrefs on the FILE thread. |
239 // RefreshPolicyPrefsOnFileThread takes ownership of the |callback| object. | 282 // RefreshPolicyPrefsOnFileThread takes ownership of the |callback| object. |
240 void RefreshPolicyPrefsOnFileThread( | 283 void RefreshPolicyPrefsOnFileThread( |
241 BrowserThread::ID calling_thread_id, | 284 BrowserThread::ID calling_thread_id, |
242 PrefStore* new_managed_platform_pref_store, | 285 PrefStore* new_managed_platform_pref_store, |
243 PrefStore* new_device_management_pref_store, | 286 PrefStore* new_device_management_pref_store, |
244 PrefStore* new_recommended_pref_store, | 287 PrefStore* new_recommended_pref_store); |
245 AfterRefreshCallback* callback); | |
246 | 288 |
247 scoped_ptr<PrefStore> pref_stores_[PrefNotifier::PREF_STORE_TYPE_MAX + 1]; | 289 // NotificationObserver methods: |
290 virtual void Observe(NotificationType type, | |
291 const NotificationSource& source, | |
292 const NotificationDetails& details); | |
293 | |
294 // Called from the PrefStoreKeeper implementation when a pref value for |key| | |
295 // changed in the pref store for |type|. | |
296 void PrefValueChangedInStore(const std::string& key, PrefStoreType type); | |
danno
2010/12/02 10:31:52
Is this not the same as NotifyPrefChanged?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
No, it's the handler for OnPrefValueChanged notifi
| |
297 | |
298 // Handle the event that the store for |type| has completed initialization. | |
299 void InitializationCompleteForStore(PrefStoreType type); | |
danno
2010/12/02 10:31:52
OnInitializedCompleted?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
300 | |
301 // Initializes a pref store keeper. Sets up a PrefStoreKeeper that will take | |
302 // ownership of the passed |pref_store|. | |
303 void InitPrefStore(PrefStoreType type, PrefStore* pref_store); | |
304 | |
305 // Checks whether initialization is completed and tells the notifier if that | |
306 // is the case. | |
307 void CheckInitializationCompleted(); | |
308 | |
309 // Get the PrefStore pointer for the given type. May return NULL if there is | |
310 // no PrefStore for that type. | |
311 PrefStore* GetPrefStore(PrefStoreType type); | |
danno
2010/12/02 10:31:52
inline?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
312 const PrefStore* GetPrefStore(PrefStoreType type) const; | |
danno
2010/12/02 10:31:52
inline?
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
313 | |
314 // Keeps the PrefStore references in order of precedence. | |
315 PrefStoreKeeper pref_stores_[PREF_STORE_TYPE_MAX + 1]; | |
316 | |
317 // Used for generation PREF_CHANGED notifications. This is a weak reference, | |
battre (please use the other)
2010/12/02 11:51:34
nit: "for generating" or "for generation of"
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
318 // since the notifier is owned by the corresponding PrefService. | |
danno
2010/12/02 10:31:52
Add initialization completed comment.
Mattias Nissler (ping if slow)
2010/12/02 16:38:24
Done.
| |
319 PrefNotifier* pref_notifier_; | |
248 | 320 |
249 // A mapping of preference names to their registered types. | 321 // A mapping of preference names to their registered types. |
250 PrefTypeMap pref_types_; | 322 PrefTypeMap pref_types_; |
251 | 323 |
252 // The associated profile, in case this value store is associated with a | 324 // The associated profile, in case this value store is associated with a |
253 // profile pref service. Used for recreating the device management pref store | 325 // profile pref service. Used for recreating the device management pref store |
254 // upon policy refresh. | 326 // upon policy refresh. |
255 Profile* profile_; | 327 Profile* profile_; |
256 | 328 |
329 // TODO(mnissler): Remove this after cleaning up policy refresh handling. | |
330 NotificationRegistrar registrar_; | |
331 | |
257 DISALLOW_COPY_AND_ASSIGN(PrefValueStore); | 332 DISALLOW_COPY_AND_ASSIGN(PrefValueStore); |
258 }; | 333 }; |
259 | 334 |
260 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ | 335 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ |
OLD | NEW |