[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 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 | |||||
[email protected] | 3853a4c | 2013-02-11 17:15:57 | [diff] [blame] | 5 | #ifndef BASE_PREFS_PREF_REGISTRY_H_ |
6 | #define BASE_PREFS_PREF_REGISTRY_H_ | ||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 7 | |
8 | #include "base/callback.h" | ||||
9 | #include "base/memory/ref_counted.h" | ||||
[email protected] | 3853a4c | 2013-02-11 17:15:57 | [diff] [blame] | 10 | #include "base/prefs/base_prefs_export.h" |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 11 | #include "base/prefs/pref_value_map.h" |
12 | |||||
13 | namespace base { | ||||
14 | class Value; | ||||
15 | } | ||||
16 | |||||
17 | class DefaultPrefStore; | ||||
18 | class PrefStore; | ||||
19 | |||||
20 | // Preferences need to be registered with a type and default value | ||||
21 | // before they are used. | ||||
22 | // | ||||
23 | // The way you use a PrefRegistry is that you register all required | ||||
24 | // preferences on it (via one of its subclasses), then pass it as a | ||||
25 | // construction parameter to PrefService. | ||||
26 | // | ||||
27 | // Currently, registrations after constructing the PrefService will | ||||
28 | // also work, but this is being deprecated. | ||||
[email protected] | 3853a4c | 2013-02-11 17:15:57 | [diff] [blame] | 29 | class BASE_PREFS_EXPORT PrefRegistry : public base::RefCounted<PrefRegistry> { |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 30 | public: |
31 | typedef PrefValueMap::const_iterator const_iterator; | ||||
32 | typedef base::Callback<void(const char*, base::Value*)> RegistrationCallback; | ||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 33 | |
34 | PrefRegistry(); | ||||
35 | |||||
36 | // Gets the registered defaults. | ||||
37 | scoped_refptr<PrefStore> defaults(); | ||||
38 | |||||
39 | // Allows iteration over defaults. | ||||
40 | const_iterator begin() const; | ||||
41 | const_iterator end() const; | ||||
42 | |||||
[email protected] | 5879cef | 2013-03-02 17:02:25 | [diff] [blame] | 43 | // Changes the default value for a preference. Takes ownership of |value|. |
44 | // | ||||
45 | // |pref_name| must be a previously registered preference. | ||||
46 | void SetDefaultPrefValue(const char* pref_name, base::Value* value); | ||||
47 | |||||
[email protected] | eeec6ca | 2013-02-21 15:10:43 | [diff] [blame] | 48 | // Exactly one callback can be set for registration. The callback |
49 | // will be invoked each time registration has been performed on this | ||||
50 | // object. | ||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 51 | // |
[email protected] | eeec6ca | 2013-02-21 15:10:43 | [diff] [blame] | 52 | // Calling this method after a callback has already been set will |
53 | // make the object forget the previous callback and use the new one | ||||
54 | // instead. | ||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 55 | void SetRegistrationCallback(const RegistrationCallback& callback); |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 56 | |
57 | protected: | ||||
58 | friend class base::RefCounted<PrefRegistry>; | ||||
59 | virtual ~PrefRegistry(); | ||||
60 | |||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 61 | // Used by subclasses to register a default value for a preference. |
62 | void RegisterPreference(const char* path, base::Value* default_value); | ||||
63 | |||||
[email protected] | c753f14 | 2013-02-10 13:14:04 | [diff] [blame] | 64 | scoped_refptr<DefaultPrefStore> defaults_; |
65 | |||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 66 | private: |
67 | RegistrationCallback registration_callback_; | ||||
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 68 | |
69 | DISALLOW_COPY_AND_ASSIGN(PrefRegistry); | ||||
70 | }; | ||||
71 | |||||
[email protected] | 3853a4c | 2013-02-11 17:15:57 | [diff] [blame] | 72 | #endif // BASE_PREFS_PREF_REGISTRY_H_ |