Chromium Code Reviews

Side by Side Diff: chrome/browser/prefs/pref_value_store.h

Issue 5915004: Introduce incognito preference settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Whitespaces + fixes for trybot Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
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"
18 #include "base/values.h" 17 #include "base/values.h"
19 #include "chrome/browser/browser_thread.h" 18 #include "chrome/browser/browser_thread.h"
20 #include "chrome/common/notification_observer.h" 19 #include "chrome/common/notification_observer.h"
21 #include "chrome/common/notification_registrar.h" 20 #include "chrome/common/notification_registrar.h"
22 #include "chrome/common/pref_store.h" 21 #include "chrome/common/pref_store.h"
23 22
24 class FilePath; 23 class FilePath;
25 class PrefNotifier; 24 class PrefNotifier;
26 class PrefStore; 25 class PrefStore;
27 class Profile; 26 class Profile;
(...skipping 31 matching lines...)
59 // 58 //
60 // The |profile| parameter is used to construct a replacement device 59 // The |profile| parameter is used to construct a replacement device
61 // management pref store. This is done after policy refresh when we swap out 60 // management pref store. This is done after policy refresh when we swap out
62 // the policy pref stores for new ones, so the |profile| pointer needs to be 61 // the policy pref stores for new ones, so the |profile| pointer needs to be
63 // kept around for then. It is safe to pass a NULL pointer for local state 62 // kept around for then. It is safe to pass a NULL pointer for local state
64 // preferences. 63 // preferences.
65 // 64 //
66 // TODO(mnissler, danno): Refactor the pref store interface and refresh logic 65 // TODO(mnissler, danno): Refactor the pref store interface and refresh logic
67 // so refreshes can be handled by the pref store itself without swapping 66 // so refreshes can be handled by the pref store itself without swapping
68 // stores. This way we can get rid of the profile pointer here. 67 // stores. This way we can get rid of the profile pointer here.
69 PrefValueStore(PrefStore* managed_platform_prefs, 68 PrefValueStore(scoped_refptr<PrefStore> managed_platform_prefs,
70 PrefStore* device_management_prefs, 69 scoped_refptr<PrefStore> device_management_prefs,
71 PrefStore* extension_prefs, 70 scoped_refptr<PrefStore> extension_prefs,
72 PrefStore* command_line_prefs, 71 scoped_refptr<PrefStore> command_line_prefs,
73 PrefStore* user_prefs, 72 scoped_refptr<PrefStore> user_prefs,
74 PrefStore* recommended_prefs, 73 scoped_refptr<PrefStore> recommended_prefs,
75 PrefStore* default_prefs, 74 scoped_refptr<PrefStore> default_prefs,
76 PrefNotifier* pref_notifier, 75 PrefNotifier* pref_notifier,
77 Profile* profile); 76 Profile* profile);
78 virtual ~PrefValueStore(); 77 virtual ~PrefValueStore();
79 78
80 // Gets the value for the given preference name that has a valid value type; 79 // Derives a new PrefValueStore that overrides the specified attributes.
81 // that is, the same type the preference was registered with, or NULL for 80 PrefValueStore* Derive(scoped_refptr<PrefStore> extension_prefs,
82 // default values of Dictionaries and Lists. Returns true if a valid value 81 scoped_refptr<PrefStore> user_prefs,
83 // was found in any of the available PrefStores. Most callers should use 82 PrefNotifier* pref_notifier);
84 // Preference::GetValue() instead of calling this method directly.
85 bool GetValue(const std::string& name, Value** out_value) const;
86 83
87 // Adds a preference to the mapping of names to types. 84 // Gets the value for the given preference name that has the specified value
88 void RegisterPreferenceType(const std::string& name, Value::ValueType type); 85 // type. Returns true if a valid value was found in any of the available
89 86 // PrefStores. Most callers should use Preference::GetValue() instead of
90 // Gets the registered value type for the given preference name. Returns 87 // calling this method directly.
91 // Value::TYPE_NULL if the preference has never been registered. 88 bool GetValue(const std::string& name,
92 Value::ValueType GetRegisteredType(const std::string& name) const; 89 Value::ValueType type,
93 90 Value** out_value) const;
94 // Returns true if the PrefValueStore contains the given preference (i.e.,
95 // it's been registered), and a value with the correct type has been actively
96 // set in some pref store. The application default specified when the pref was
97 // registered does not count as an "actively set" value, but another pref
98 // store setting a value that happens to be equal to the default does.
99 bool HasPrefPath(const char* name) const;
100 91
101 // These methods return true if a preference with the given name is in the 92 // These methods return true if a preference with the given name is in the
102 // indicated pref store, even if that value is currently being overridden by 93 // indicated pref store, even if that value is currently being overridden by
103 // a higher-priority source. 94 // a higher-priority source.
104 bool PrefValueInManagedPlatformStore(const char* name) const; 95 bool PrefValueInManagedPlatformStore(const char* name) const;
105 bool PrefValueInDeviceManagementStore(const char* name) const; 96 bool PrefValueInDeviceManagementStore(const char* name) const;
106 bool PrefValueInExtensionStore(const char* name) const; 97 bool PrefValueInExtensionStore(const char* name) const;
107 bool PrefValueInUserStore(const char* name) const; 98 bool PrefValueInUserStore(const char* name) const;
108 99
109 // These methods return true if a preference with the given name is actually 100 // These methods return true if a preference with the given name is actually
(...skipping 37 matching lines...)
147 // the PrefStore for changes, forwarding notifications to PrefValueStore. This 138 // the PrefStore for changes, forwarding notifications to PrefValueStore. This
148 // indirection is here for the sake of disambiguating notifications from the 139 // indirection is here for the sake of disambiguating notifications from the
149 // individual PrefStores. 140 // individual PrefStores.
150 class PrefStoreKeeper : public PrefStore::Observer { 141 class PrefStoreKeeper : public PrefStore::Observer {
151 public: 142 public:
152 PrefStoreKeeper(); 143 PrefStoreKeeper();
153 virtual ~PrefStoreKeeper(); 144 virtual ~PrefStoreKeeper();
154 145
155 // Takes ownership of |pref_store|. 146 // Takes ownership of |pref_store|.
156 void Initialize(PrefValueStore* store, 147 void Initialize(PrefValueStore* store,
157 PrefStore* pref_store, 148 scoped_refptr<PrefStore> pref_store,
158 PrefStoreType type); 149 PrefStoreType type);
159 150
160 PrefStore* store() { return pref_store_.get(); } 151 scoped_refptr<PrefStore> store() { return pref_store_; }
161 const PrefStore* store() const { return pref_store_.get(); } 152 const scoped_refptr<PrefStore> store() const { return pref_store_; }
162 153
163 private: 154 private:
164 // PrefStore::Observer implementation. 155 // PrefStore::Observer implementation.
165 virtual void OnPrefValueChanged(const std::string& key); 156 virtual void OnPrefValueChanged(const std::string& key);
166 virtual void OnInitializationCompleted(); 157 virtual void OnInitializationCompleted();
167 158
168 // PrefValueStore this keeper is part of. 159 // PrefValueStore this keeper is part of.
169 PrefValueStore* pref_value_store_; 160 PrefValueStore* pref_value_store_;
170 161
171 // The PrefStore managed by this keeper. 162 // The PrefStore managed by this keeper.
172 scoped_ptr<PrefStore> pref_store_; 163 scoped_refptr<PrefStore> pref_store_;
173 164
174 // Type of the pref store. 165 // Type of the pref store.
175 PrefStoreType type_; 166 PrefStoreType type_;
176 167
177 DISALLOW_COPY_AND_ASSIGN(PrefStoreKeeper); 168 DISALLOW_COPY_AND_ASSIGN(PrefStoreKeeper);
178 }; 169 };
179 170
180 typedef std::map<std::string, Value::ValueType> PrefTypeMap; 171 typedef std::map<std::string, Value::ValueType> PrefTypeMap;
181 172
182 friend class PrefValueStorePolicyRefreshTest; 173 friend class PrefValueStorePolicyRefreshTest;
183 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest, TestPolicyRefresh); 174 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest, TestPolicyRefresh);
184 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest, 175 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest,
185 TestRefreshPolicyPrefsCompletion); 176 TestRefreshPolicyPrefsCompletion);
186 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest, 177 FRIEND_TEST_ALL_PREFIXES(PrefValueStorePolicyRefreshTest,
187 TestConcurrentPolicyRefresh); 178 TestConcurrentPolicyRefresh);
188 179
189 // Returns true if the actual type is a valid type for the expected type when
190 // found in the given store.
191 static bool IsValidType(Value::ValueType expected,
192 Value::ValueType actual,
193 PrefStoreType store);
194
195 // Returns true if the preference with the given name has a value in the 180 // Returns true if the preference with the given name has a value in the
196 // given PrefStoreType, of the same value type as the preference was 181 // given PrefStoreType, of the same value type as the preference was
197 // registered with. 182 // registered with.
198 bool PrefValueInStore(const char* name, PrefStoreType store) const; 183 bool PrefValueInStore(const char* name, PrefStoreType store) const;
199 184
200 // Returns true if a preference has an explicit value in any of the 185 // Returns true if a preference has an explicit value in any of the
201 // stores in the range specified by |first_checked_store| and 186 // stores in the range specified by |first_checked_store| and
202 // |last_checked_store|, even if that value is currently being 187 // |last_checked_store|, even if that value is currently being
203 // overridden by a higher-priority store. 188 // overridden by a higher-priority store.
204 bool PrefValueInStoreRange(const char* name, 189 bool PrefValueInStoreRange(const char* name,
(...skipping 20 matching lines...)
225 210
226 // Called as a result of a notification of policy change. Triggers a reload of 211 // Called as a result of a notification of policy change. Triggers a reload of
227 // managed platform, device management and recommended preferences from policy 212 // managed platform, device management and recommended preferences from policy
228 // from a Task on the FILE thread. 213 // from a Task on the FILE thread.
229 void RefreshPolicyPrefs(); 214 void RefreshPolicyPrefs();
230 215
231 // Called during policy refresh after ReadPrefs completes on the thread 216 // Called during policy refresh after ReadPrefs completes on the thread
232 // that initiated the policy refresh. RefreshPolicyPrefsCompletion takes 217 // that initiated the policy refresh. RefreshPolicyPrefsCompletion takes
233 // ownership of the |callback| object. 218 // ownership of the |callback| object.
234 void RefreshPolicyPrefsCompletion( 219 void RefreshPolicyPrefsCompletion(
235 policy::ConfigurationPolicyPrefStore* new_managed_platform_pref_store, 220 scoped_refptr<policy::ConfigurationPolicyPrefStore>
236 policy::ConfigurationPolicyPrefStore* new_device_management_pref_store, 221 new_managed_platform_pref_store,
237 policy::ConfigurationPolicyPrefStore* new_recommended_pref_store); 222 scoped_refptr<policy::ConfigurationPolicyPrefStore>
223 new_device_management_pref_store,
224 scoped_refptr<policy::ConfigurationPolicyPrefStore>
225 new_recommended_pref_store);
238 226
239 // Called during policy refresh to do the ReadPrefs on the FILE thread. 227 // Called during policy refresh to do the ReadPrefs on the FILE thread.
240 // RefreshPolicyPrefsOnFileThread takes ownership of the |callback| object. 228 // RefreshPolicyPrefsOnFileThread takes ownership of the |callback| object.
241 void RefreshPolicyPrefsOnFileThread( 229 void RefreshPolicyPrefsOnFileThread(
242 BrowserThread::ID calling_thread_id, 230 BrowserThread::ID calling_thread_id,
243 policy::ConfigurationPolicyPrefStore* new_managed_platform_pref_store, 231 scoped_refptr<policy::ConfigurationPolicyPrefStore>
244 policy::ConfigurationPolicyPrefStore* new_device_management_pref_store, 232 new_managed_platform_pref_store,
245 policy::ConfigurationPolicyPrefStore* new_recommended_pref_store); 233 scoped_refptr<policy::ConfigurationPolicyPrefStore>
234 new_device_management_pref_store,
235 scoped_refptr<policy::ConfigurationPolicyPrefStore>
236 new_recommended_pref_store);
246 237
247 // NotificationObserver methods: 238 // NotificationObserver methods:
248 virtual void Observe(NotificationType type, 239 virtual void Observe(NotificationType type,
249 const NotificationSource& source, 240 const NotificationSource& source,
250 const NotificationDetails& details); 241 const NotificationDetails& details);
251 242
252 // Called from the PrefStoreKeeper implementation when a pref value for |key| 243 // Called from the PrefStoreKeeper implementation when a pref value for |key|
253 // changed in the pref store for |type|. 244 // changed in the pref store for |type|.
254 void OnPrefValueChanged(PrefStoreType type, const std::string& key); 245 void OnPrefValueChanged(PrefStoreType type, const std::string& key);
255 246
256 // Handle the event that the store for |type| has completed initialization. 247 // Handle the event that the store for |type| has completed initialization.
257 void OnInitializationCompleted(PrefStoreType type); 248 void OnInitializationCompleted(PrefStoreType type);
258 249
259 // Initializes a pref store keeper. Sets up a PrefStoreKeeper that will take 250 // Initializes a pref store keeper. Sets up a PrefStoreKeeper that will take
260 // ownership of the passed |pref_store|. 251 // ownership of the passed |pref_store|.
261 void InitPrefStore(PrefStoreType type, PrefStore* pref_store); 252 void InitPrefStore(PrefStoreType type, scoped_refptr<PrefStore> pref_store);
262 253
263 // Checks whether initialization is completed and tells the notifier if that 254 // Checks whether initialization is completed and tells the notifier if that
264 // is the case. 255 // is the case.
265 void CheckInitializationCompleted(); 256 void CheckInitializationCompleted();
266 257
267 // Get the PrefStore pointer for the given type. May return NULL if there is 258 // Get the PrefStore pointer for the given type. May return NULL if there is
268 // no PrefStore for that type. 259 // no PrefStore for that type.
269 PrefStore* GetPrefStore(PrefStoreType type) { 260 scoped_refptr<PrefStore> GetPrefStore(PrefStoreType type) {
270 return pref_stores_[type].store(); 261 return pref_stores_[type].store();
271 } 262 }
272 const PrefStore* GetPrefStore(PrefStoreType type) const { 263 const scoped_refptr<PrefStore> GetPrefStore(PrefStoreType type) const {
273 return pref_stores_[type].store(); 264 return pref_stores_[type].store();
274 } 265 }
275 266
276 // Keeps the PrefStore references in order of precedence. 267 // Keeps the PrefStore references in order of precedence.
277 PrefStoreKeeper pref_stores_[PREF_STORE_TYPE_MAX + 1]; 268 PrefStoreKeeper pref_stores_[PREF_STORE_TYPE_MAX + 1];
278 269
279 // Used for generating PREF_CHANGED and PREF_INITIALIZATION_COMPLETED 270 // Used for generating PREF_CHANGED and PREF_INITIALIZATION_COMPLETED
280 // notifications. This is a weak reference, since the notifier is owned by the 271 // notifications. This is a weak reference, since the notifier is owned by the
281 // corresponding PrefService. 272 // corresponding PrefService.
282 PrefNotifier* pref_notifier_; 273 PrefNotifier* pref_notifier_;
283 274
284 // A mapping of preference names to their registered types.
285 PrefTypeMap pref_types_;
286
287 // The associated profile, in case this value store is associated with a 275 // The associated profile, in case this value store is associated with a
288 // profile pref service. Used for recreating the device management pref store 276 // profile pref service. Used for recreating the device management pref store
289 // upon policy refresh. 277 // upon policy refresh.
290 Profile* profile_; 278 Profile* profile_;
291 279
292 // TODO(mnissler): Remove this after cleaning up policy refresh handling. 280 // TODO(mnissler): Remove this after cleaning up policy refresh handling.
293 NotificationRegistrar registrar_; 281 NotificationRegistrar registrar_;
294 282
295 DISALLOW_COPY_AND_ASSIGN(PrefValueStore); 283 DISALLOW_COPY_AND_ASSIGN(PrefValueStore);
296 }; 284 };
297 285
298 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ 286 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_
OLDNEW

Powered by Google App Engine