Add TriggerOnUninstalled to ExtensionRegistry.
[chromium-blink-merge.git] / base / prefs / testing_pref_service.h
bloba9ab937429b6bbd2165d1b0e884d48af645274ce
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.
5 #ifndef BASE_PREFS_TESTING_PREF_SERVICE_H_
6 #define BASE_PREFS_TESTING_PREF_SERVICE_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/prefs/pref_registry.h"
11 #include "base/prefs/pref_service.h"
12 #include "base/prefs/testing_pref_store.h"
14 class PrefNotifierImpl;
15 class PrefRegistrySimple;
16 class TestingPrefStore;
18 // A PrefService subclass for testing. It operates totally in memory and
19 // provides additional API for manipulating preferences at the different levels
20 // (managed, extension, user) conveniently.
22 // Use this via its specializations, e.g. TestingPrefServiceSimple.
23 template <class SuperPrefService, class ConstructionPrefRegistry>
24 class TestingPrefServiceBase : public SuperPrefService {
25 public:
26 virtual ~TestingPrefServiceBase();
28 // Read the value of a preference from the managed layer. Returns NULL if the
29 // preference is not defined at the managed layer.
30 const base::Value* GetManagedPref(const char* path) const;
32 // Set a preference on the managed layer and fire observers if the preference
33 // changed. Assumes ownership of |value|.
34 void SetManagedPref(const char* path, base::Value* value);
36 // Clear the preference on the managed layer and fire observers if the
37 // preference has been defined previously.
38 void RemoveManagedPref(const char* path);
40 // Similar to the above, but for user preferences.
41 const base::Value* GetUserPref(const char* path) const;
42 void SetUserPref(const char* path, base::Value* value);
43 void RemoveUserPref(const char* path);
45 // Similar to the above, but for recommended policy preferences.
46 const base::Value* GetRecommendedPref(const char* path) const;
47 void SetRecommendedPref(const char* path, base::Value* value);
48 void RemoveRecommendedPref(const char* path);
50 // Do-nothing implementation for TestingPrefService.
51 static void HandleReadError(PersistentPrefStore::PrefReadError error) {}
53 protected:
54 TestingPrefServiceBase(
55 TestingPrefStore* managed_prefs,
56 TestingPrefStore* user_prefs,
57 TestingPrefStore* recommended_prefs,
58 ConstructionPrefRegistry* pref_registry,
59 PrefNotifierImpl* pref_notifier);
61 private:
62 // Reads the value of the preference indicated by |path| from |pref_store|.
63 // Returns NULL if the preference was not found.
64 const base::Value* GetPref(TestingPrefStore* pref_store,
65 const char* path) const;
67 // Sets the value for |path| in |pref_store|.
68 void SetPref(TestingPrefStore* pref_store, const char* path,
69 base::Value* value);
71 // Removes the preference identified by |path| from |pref_store|.
72 void RemovePref(TestingPrefStore* pref_store, const char* path);
74 // Pointers to the pref stores our value store uses.
75 scoped_refptr<TestingPrefStore> managed_prefs_;
76 scoped_refptr<TestingPrefStore> user_prefs_;
77 scoped_refptr<TestingPrefStore> recommended_prefs_;
79 DISALLOW_COPY_AND_ASSIGN(TestingPrefServiceBase);
82 // Test version of PrefService.
83 class TestingPrefServiceSimple
84 : public TestingPrefServiceBase<PrefService, PrefRegistry> {
85 public:
86 TestingPrefServiceSimple();
87 virtual ~TestingPrefServiceSimple();
89 // This is provided as a convenience for registering preferences on
90 // an existing TestingPrefServiceSimple instance. On a production
91 // PrefService you would do all registrations before constructing
92 // it, passing it a PrefRegistry via its constructor (or via
93 // e.g. PrefServiceFactory).
94 PrefRegistrySimple* registry();
96 private:
97 DISALLOW_COPY_AND_ASSIGN(TestingPrefServiceSimple);
100 template<>
101 TestingPrefServiceBase<PrefService, PrefRegistry>::TestingPrefServiceBase(
102 TestingPrefStore* managed_prefs,
103 TestingPrefStore* user_prefs,
104 TestingPrefStore* recommended_prefs,
105 PrefRegistry* pref_registry,
106 PrefNotifierImpl* pref_notifier);
108 template<class SuperPrefService, class ConstructionPrefRegistry>
109 TestingPrefServiceBase<
110 SuperPrefService, ConstructionPrefRegistry>::~TestingPrefServiceBase() {
113 template<class SuperPrefService, class ConstructionPrefRegistry>
114 const base::Value* TestingPrefServiceBase<
115 SuperPrefService, ConstructionPrefRegistry>::GetManagedPref(
116 const char* path) const {
117 return GetPref(managed_prefs_.get(), path);
120 template<class SuperPrefService, class ConstructionPrefRegistry>
121 void TestingPrefServiceBase<
122 SuperPrefService, ConstructionPrefRegistry>::SetManagedPref(
123 const char* path, base::Value* value) {
124 SetPref(managed_prefs_.get(), path, value);
127 template<class SuperPrefService, class ConstructionPrefRegistry>
128 void TestingPrefServiceBase<
129 SuperPrefService, ConstructionPrefRegistry>::RemoveManagedPref(
130 const char* path) {
131 RemovePref(managed_prefs_.get(), path);
134 template<class SuperPrefService, class ConstructionPrefRegistry>
135 const base::Value* TestingPrefServiceBase<
136 SuperPrefService, ConstructionPrefRegistry>::GetUserPref(
137 const char* path) const {
138 return GetPref(user_prefs_.get(), path);
141 template<class SuperPrefService, class ConstructionPrefRegistry>
142 void TestingPrefServiceBase<
143 SuperPrefService, ConstructionPrefRegistry>::SetUserPref(
144 const char* path, base::Value* value) {
145 SetPref(user_prefs_.get(), path, value);
148 template<class SuperPrefService, class ConstructionPrefRegistry>
149 void TestingPrefServiceBase<
150 SuperPrefService, ConstructionPrefRegistry>::RemoveUserPref(
151 const char* path) {
152 RemovePref(user_prefs_.get(), path);
155 template<class SuperPrefService, class ConstructionPrefRegistry>
156 const base::Value* TestingPrefServiceBase<
157 SuperPrefService, ConstructionPrefRegistry>::GetRecommendedPref(
158 const char* path) const {
159 return GetPref(recommended_prefs_, path);
162 template<class SuperPrefService, class ConstructionPrefRegistry>
163 void TestingPrefServiceBase<
164 SuperPrefService, ConstructionPrefRegistry>::SetRecommendedPref(
165 const char* path, base::Value* value) {
166 SetPref(recommended_prefs_.get(), path, value);
169 template<class SuperPrefService, class ConstructionPrefRegistry>
170 void TestingPrefServiceBase<
171 SuperPrefService, ConstructionPrefRegistry>::RemoveRecommendedPref(
172 const char* path) {
173 RemovePref(recommended_prefs_.get(), path);
176 template<class SuperPrefService, class ConstructionPrefRegistry>
177 const base::Value* TestingPrefServiceBase<
178 SuperPrefService, ConstructionPrefRegistry>::GetPref(
179 TestingPrefStore* pref_store, const char* path) const {
180 const base::Value* res;
181 return pref_store->GetValue(path, &res) ? res : NULL;
184 template<class SuperPrefService, class ConstructionPrefRegistry>
185 void TestingPrefServiceBase<
186 SuperPrefService, ConstructionPrefRegistry>::SetPref(
187 TestingPrefStore* pref_store, const char* path, base::Value* value) {
188 pref_store->SetValue(path, value);
191 template<class SuperPrefService, class ConstructionPrefRegistry>
192 void TestingPrefServiceBase<
193 SuperPrefService, ConstructionPrefRegistry>::RemovePref(
194 TestingPrefStore* pref_store, const char* path) {
195 pref_store->RemoveValue(path);
198 #endif // BASE_PREFS_TESTING_PREF_SERVICE_H_