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

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

Issue 6074003: Handle policy refresh internally in ConfigurationPolicyPrefStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nit Created 10 years 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
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"
15 #include "base/gtest_prod_util.h" 14 #include "base/gtest_prod_util.h"
16 #include "base/ref_counted.h" 15 #include "base/ref_counted.h"
17 #include "base/scoped_ptr.h" 16 #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"
21 #include "chrome/common/notification_registrar.h"
22 #include "chrome/common/pref_store.h" 19 #include "chrome/common/pref_store.h"
23 20
24 class FilePath; 21 class FilePath;
25 class PrefNotifier; 22 class PrefNotifier;
26 class PrefStore; 23 class PrefStore;
27 class Profile; 24 class Profile;
28 25
29 // TODO(danno, mnissler): Remove after policy refresh cleanup.
30 namespace policy {
31 class ConfigurationPolicyPrefStore;
32 }
33
34 // The PrefValueStore manages various sources of values for Preferences 26 // The PrefValueStore manages various sources of values for Preferences
35 // (e.g., configuration policies, extensions, and user settings). It returns 27 // (e.g., configuration policies, extensions, and user settings). It returns
36 // the value of a Preference from the source with the highest priority, and 28 // the value of a Preference from the source with the highest priority, and
37 // allows setting user-defined values for preferences that are not managed. 29 // allows setting user-defined values for preferences that are not managed.
38 // 30 //
39 // Unless otherwise explicitly noted, all of the methods of this class must 31 // Unless otherwise explicitly noted, all of the methods of this class must
40 // be called on the UI thread. 32 // be called on the UI thread.
41 class PrefValueStore : public base::RefCountedThreadSafe<PrefValueStore>, 33 class PrefValueStore : public base::RefCountedThreadSafe<PrefValueStore> {
42 public NotificationObserver {
43 public: 34 public:
44 // In decreasing order of precedence: 35 // In decreasing order of precedence:
45 // |managed_platform_prefs| contains all managed platform (non-cloud policy) 36 // |managed_platform_prefs| contains all managed platform (non-cloud policy)
46 // preference values. 37 // preference values.
47 // |device_management_prefs| contains all device management (cloud policy) 38 // |device_management_prefs| contains all device management (cloud policy)
48 // preference values. 39 // preference values.
49 // |extension_prefs| contains preference values set by extensions. 40 // |extension_prefs| contains preference values set by extensions.
50 // |command_line_prefs| contains preference values set by command-line 41 // |command_line_prefs| contains preference values set by command-line
51 // switches. 42 // switches.
52 // |user_prefs| contains all user-set preference values. 43 // |user_prefs| contains all user-set preference values.
53 // |recommended_prefs| contains all recommended (policy) preference values. 44 // |recommended_prefs| contains all recommended (policy) preference values.
54 // |default_prefs| contains application-default preference values. It must 45 // |default_prefs| contains application-default preference values. It must
55 // be non-null if any preferences are to be registered. 46 // be non-null if any preferences are to be registered.
56 // 47 //
57 // |pref_notifier| facilitates broadcasting preference change notifications 48 // |pref_notifier| facilitates broadcasting preference change notifications
58 // to the world. 49 // to the world.
59 // 50 //
60 // The |profile| parameter is used to construct a replacement device 51 // The |profile| parameter is used to construct a replacement device
61 // management pref store. This is done after policy refresh when we swap out 52 // 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 53 // 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 54 // kept around for then. It is safe to pass a NULL pointer for local state
64 // preferences. 55 // preferences.
65 //
66 // TODO(mnissler, danno): Refactor the pref store interface and refresh logic
67 // 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.
69 PrefValueStore(PrefStore* managed_platform_prefs, 56 PrefValueStore(PrefStore* managed_platform_prefs,
70 PrefStore* device_management_prefs, 57 PrefStore* device_management_prefs,
71 PrefStore* extension_prefs, 58 PrefStore* extension_prefs,
72 PrefStore* command_line_prefs, 59 PrefStore* command_line_prefs,
73 PrefStore* user_prefs, 60 PrefStore* user_prefs,
74 PrefStore* recommended_prefs, 61 PrefStore* recommended_prefs,
75 PrefStore* default_prefs, 62 PrefStore* default_prefs,
76 PrefNotifier* pref_notifier, 63 PrefNotifier* pref_notifier);
77 Profile* profile);
78 virtual ~PrefValueStore(); 64 virtual ~PrefValueStore();
79 65
80 // Gets the value for the given preference name that has a valid value type; 66 // Gets the value for the given preference name that has a valid value type;
81 // that is, the same type the preference was registered with, or NULL for 67 // that is, the same type the preference was registered with, or NULL for
82 // default values of Dictionaries and Lists. Returns true if a valid value 68 // default values of Dictionaries and Lists. Returns true if a valid value
83 // was found in any of the available PrefStores. Most callers should use 69 // was found in any of the available PrefStores. Most callers should use
84 // Preference::GetValue() instead of calling this method directly. 70 // Preference::GetValue() instead of calling this method directly.
85 bool GetValue(const std::string& name, Value** out_value) const; 71 bool GetValue(const std::string& name, Value** out_value) const;
86 72
87 // Adds a preference to the mapping of names to types. 73 // Adds a preference to the mapping of names to types.
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 bool GetValueFromStore(const char* name, 202 bool GetValueFromStore(const char* name,
217 PrefStoreType store, 203 PrefStoreType store,
218 Value** out_value) const; 204 Value** out_value) const;
219 205
220 // Called upon changes in individual pref stores in order to determine whether 206 // Called upon changes in individual pref stores in order to determine whether
221 // the user-visible pref value has changed. Triggers the change notification 207 // the user-visible pref value has changed. Triggers the change notification
222 // if the effective value of the preference has changed, or if the store 208 // if the effective value of the preference has changed, or if the store
223 // controlling the pref has changed. 209 // controlling the pref has changed.
224 void NotifyPrefChanged(const char* path, PrefStoreType new_store); 210 void NotifyPrefChanged(const char* path, PrefStoreType new_store);
225 211
226 // Called as a result of a notification of policy change. Triggers a reload of
227 // managed platform, device management and recommended preferences from policy
228 // from a Task on the FILE thread.
229 void RefreshPolicyPrefs();
230
231 // Called during policy refresh after ReadPrefs completes on the thread
232 // that initiated the policy refresh. RefreshPolicyPrefsCompletion takes
233 // ownership of the |callback| object.
234 void RefreshPolicyPrefsCompletion(
235 policy::ConfigurationPolicyPrefStore* new_managed_platform_pref_store,
236 policy::ConfigurationPolicyPrefStore* new_device_management_pref_store,
237 policy::ConfigurationPolicyPrefStore* new_recommended_pref_store);
238
239 // Called during policy refresh to do the ReadPrefs on the FILE thread.
240 // RefreshPolicyPrefsOnFileThread takes ownership of the |callback| object.
241 void RefreshPolicyPrefsOnFileThread(
242 BrowserThread::ID calling_thread_id,
243 policy::ConfigurationPolicyPrefStore* new_managed_platform_pref_store,
244 policy::ConfigurationPolicyPrefStore* new_device_management_pref_store,
245 policy::ConfigurationPolicyPrefStore* new_recommended_pref_store);
246
247 // NotificationObserver methods:
248 virtual void Observe(NotificationType type,
249 const NotificationSource& source,
250 const NotificationDetails& details);
251
252 // Called from the PrefStoreKeeper implementation when a pref value for |key| 212 // Called from the PrefStoreKeeper implementation when a pref value for |key|
253 // changed in the pref store for |type|. 213 // changed in the pref store for |type|.
254 void OnPrefValueChanged(PrefStoreType type, const std::string& key); 214 void OnPrefValueChanged(PrefStoreType type, const std::string& key);
255 215
256 // Handle the event that the store for |type| has completed initialization. 216 // Handle the event that the store for |type| has completed initialization.
257 void OnInitializationCompleted(PrefStoreType type); 217 void OnInitializationCompleted(PrefStoreType type);
258 218
259 // Initializes a pref store keeper. Sets up a PrefStoreKeeper that will take 219 // Initializes a pref store keeper. Sets up a PrefStoreKeeper that will take
260 // ownership of the passed |pref_store|. 220 // ownership of the passed |pref_store|.
261 void InitPrefStore(PrefStoreType type, PrefStore* pref_store); 221 void InitPrefStore(PrefStoreType type, PrefStore* pref_store);
(...skipping 15 matching lines...) Expand all
277 PrefStoreKeeper pref_stores_[PREF_STORE_TYPE_MAX + 1]; 237 PrefStoreKeeper pref_stores_[PREF_STORE_TYPE_MAX + 1];
278 238
279 // Used for generating PREF_CHANGED and PREF_INITIALIZATION_COMPLETED 239 // Used for generating PREF_CHANGED and PREF_INITIALIZATION_COMPLETED
280 // notifications. This is a weak reference, since the notifier is owned by the 240 // notifications. This is a weak reference, since the notifier is owned by the
281 // corresponding PrefService. 241 // corresponding PrefService.
282 PrefNotifier* pref_notifier_; 242 PrefNotifier* pref_notifier_;
283 243
284 // A mapping of preference names to their registered types. 244 // A mapping of preference names to their registered types.
285 PrefTypeMap pref_types_; 245 PrefTypeMap pref_types_;
286 246
287 // The associated profile, in case this value store is associated with a
288 // profile pref service. Used for recreating the device management pref store
289 // upon policy refresh.
290 Profile* profile_;
291
292 // TODO(mnissler): Remove this after cleaning up policy refresh handling.
293 NotificationRegistrar registrar_;
294
295 DISALLOW_COPY_AND_ASSIGN(PrefValueStore); 247 DISALLOW_COPY_AND_ASSIGN(PrefValueStore);
296 }; 248 };
297 249
298 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_ 250 #endif // CHROME_BROWSER_PREFS_PREF_VALUE_STORE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698