xref: /aosp_15_r20/external/cronet/components/prefs/testing_pref_service.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_PREFS_TESTING_PREF_SERVICE_H_
6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_PREFS_TESTING_PREF_SERVICE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker #include <utility>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/memory/ref_counted.h"
12*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_registry.h"
13*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_service.h"
14*6777b538SAndroid Build Coastguard Worker #include "components/prefs/testing_pref_store.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker class PrefNotifierImpl;
17*6777b538SAndroid Build Coastguard Worker class PrefRegistrySimple;
18*6777b538SAndroid Build Coastguard Worker class TestingPrefStore;
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker // A PrefService subclass for testing. It operates totally in memory and
21*6777b538SAndroid Build Coastguard Worker // provides additional API for manipulating preferences at the different levels
22*6777b538SAndroid Build Coastguard Worker // (managed, extension, user) conveniently.
23*6777b538SAndroid Build Coastguard Worker //
24*6777b538SAndroid Build Coastguard Worker // Use this via its specializations, e.g. TestingPrefServiceSimple.
25*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
26*6777b538SAndroid Build Coastguard Worker class TestingPrefServiceBase : public SuperPrefService {
27*6777b538SAndroid Build Coastguard Worker  public:
28*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceBase(const TestingPrefServiceBase&) = delete;
29*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceBase& operator=(const TestingPrefServiceBase&) = delete;
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   virtual ~TestingPrefServiceBase();
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   // Reads the value of a preference from the managed layer. Returns NULL if the
34*6777b538SAndroid Build Coastguard Worker   // preference is not defined at the managed layer.
35*6777b538SAndroid Build Coastguard Worker   const base::Value* GetManagedPref(const std::string& path) const;
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   // Sets a preference on the managed layer and fires observers if the
38*6777b538SAndroid Build Coastguard Worker   // preference changed.
39*6777b538SAndroid Build Coastguard Worker   void SetManagedPref(const std::string& path,
40*6777b538SAndroid Build Coastguard Worker                       std::unique_ptr<base::Value> value);
41*6777b538SAndroid Build Coastguard Worker   void SetManagedPref(const std::string& path, base::Value value);
42*6777b538SAndroid Build Coastguard Worker   void SetManagedPref(const std::string& path, base::Value::Dict dict);
43*6777b538SAndroid Build Coastguard Worker   void SetManagedPref(const std::string& path, base::Value::List list);
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   // Clears the preference on the managed layer and fire observers if the
46*6777b538SAndroid Build Coastguard Worker   // preference has been defined previously.
47*6777b538SAndroid Build Coastguard Worker   void RemoveManagedPref(const std::string& path);
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   // Similar to the above, but for supervised user preferences.
50*6777b538SAndroid Build Coastguard Worker   const base::Value* GetSupervisedUserPref(const std::string& path) const;
51*6777b538SAndroid Build Coastguard Worker   void SetSupervisedUserPref(const std::string& path,
52*6777b538SAndroid Build Coastguard Worker                              std::unique_ptr<base::Value> value);
53*6777b538SAndroid Build Coastguard Worker   void SetSupervisedUserPref(const std::string& path, base::Value value);
54*6777b538SAndroid Build Coastguard Worker   void SetSupervisedUserPref(const std::string& path, base::Value::Dict dict);
55*6777b538SAndroid Build Coastguard Worker   void SetSupervisedUserPref(const std::string& path, base::Value::List list);
56*6777b538SAndroid Build Coastguard Worker   void RemoveSupervisedUserPref(const std::string& path);
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Similar to the above, but for extension preferences.
59*6777b538SAndroid Build Coastguard Worker   // Does not really know about extensions and their order of installation.
60*6777b538SAndroid Build Coastguard Worker   // Useful in tests that only check that a preference is overridden by an
61*6777b538SAndroid Build Coastguard Worker   // extension.
62*6777b538SAndroid Build Coastguard Worker   const base::Value* GetExtensionPref(const std::string& path) const;
63*6777b538SAndroid Build Coastguard Worker   void SetExtensionPref(const std::string& path,
64*6777b538SAndroid Build Coastguard Worker                         std::unique_ptr<base::Value> value);
65*6777b538SAndroid Build Coastguard Worker   void SetExtensionPref(const std::string& path, base::Value value);
66*6777b538SAndroid Build Coastguard Worker   void SetExtensionPref(const std::string& path, base::Value::Dict dict);
67*6777b538SAndroid Build Coastguard Worker   void SetExtensionPref(const std::string& path, base::Value::List list);
68*6777b538SAndroid Build Coastguard Worker   void RemoveExtensionPref(const std::string& path);
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker   // Similar to the above, but for user preferences.
71*6777b538SAndroid Build Coastguard Worker   const base::Value* GetUserPref(const std::string& path) const;
72*6777b538SAndroid Build Coastguard Worker   void SetUserPref(const std::string& path, std::unique_ptr<base::Value> value);
73*6777b538SAndroid Build Coastguard Worker   void SetUserPref(const std::string& path, base::Value value);
74*6777b538SAndroid Build Coastguard Worker   void SetUserPref(const std::string& path, base::Value::Dict dict);
75*6777b538SAndroid Build Coastguard Worker   void SetUserPref(const std::string& path, base::Value::List list);
76*6777b538SAndroid Build Coastguard Worker   void RemoveUserPref(const std::string& path);
77*6777b538SAndroid Build Coastguard Worker 
78*6777b538SAndroid Build Coastguard Worker   // Similar to the above, but for recommended policy preferences.
79*6777b538SAndroid Build Coastguard Worker   const base::Value* GetRecommendedPref(const std::string& path) const;
80*6777b538SAndroid Build Coastguard Worker   void SetRecommendedPref(const std::string& path,
81*6777b538SAndroid Build Coastguard Worker                           std::unique_ptr<base::Value> value);
82*6777b538SAndroid Build Coastguard Worker   void SetRecommendedPref(const std::string& path, base::Value value);
83*6777b538SAndroid Build Coastguard Worker   void SetRecommendedPref(const std::string& path, base::Value::Dict dict);
84*6777b538SAndroid Build Coastguard Worker   void SetRecommendedPref(const std::string& path, base::Value::List list);
85*6777b538SAndroid Build Coastguard Worker   void RemoveRecommendedPref(const std::string& path);
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker   // Do-nothing implementation for TestingPrefService.
HandleReadError(PersistentPrefStore::PrefReadError error)88*6777b538SAndroid Build Coastguard Worker   static void HandleReadError(PersistentPrefStore::PrefReadError error) {}
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker   // Set initialization status of pref stores.
91*6777b538SAndroid Build Coastguard Worker   void SetInitializationCompleted();
92*6777b538SAndroid Build Coastguard Worker 
user_prefs_store()93*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> user_prefs_store() { return user_prefs_; }
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker  protected:
96*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceBase(
97*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> managed_prefs,
98*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> supervised_user_prefs,
99*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> extension_prefs,
100*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> standalone_browser_prefs,
101*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> user_prefs,
102*6777b538SAndroid Build Coastguard Worker       scoped_refptr<TestingPrefStore> recommended_prefs,
103*6777b538SAndroid Build Coastguard Worker       scoped_refptr<ConstructionPrefRegistry> pref_registry,
104*6777b538SAndroid Build Coastguard Worker       // Takes ownership.
105*6777b538SAndroid Build Coastguard Worker       PrefNotifierImpl* pref_notifier);
106*6777b538SAndroid Build Coastguard Worker 
107*6777b538SAndroid Build Coastguard Worker  private:
108*6777b538SAndroid Build Coastguard Worker   // Reads the value of the preference indicated by |path| from |pref_store|.
109*6777b538SAndroid Build Coastguard Worker   // Returns NULL if the preference was not found.
110*6777b538SAndroid Build Coastguard Worker   const base::Value* GetPref(TestingPrefStore* pref_store,
111*6777b538SAndroid Build Coastguard Worker                              const std::string& path) const;
112*6777b538SAndroid Build Coastguard Worker 
113*6777b538SAndroid Build Coastguard Worker   // Sets the value for |path| in |pref_store|.
114*6777b538SAndroid Build Coastguard Worker   void SetPref(TestingPrefStore* pref_store,
115*6777b538SAndroid Build Coastguard Worker                const std::string& path,
116*6777b538SAndroid Build Coastguard Worker                std::unique_ptr<base::Value> value);
117*6777b538SAndroid Build Coastguard Worker 
118*6777b538SAndroid Build Coastguard Worker   // Removes the preference identified by |path| from |pref_store|.
119*6777b538SAndroid Build Coastguard Worker   void RemovePref(TestingPrefStore* pref_store, const std::string& path);
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker   // Pointers to the pref stores our value store uses.
122*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> managed_prefs_;
123*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> supervised_user_prefs_;
124*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> extension_prefs_;
125*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> standalone_browser_prefs_;
126*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> user_prefs_;
127*6777b538SAndroid Build Coastguard Worker   scoped_refptr<TestingPrefStore> recommended_prefs_;
128*6777b538SAndroid Build Coastguard Worker };
129*6777b538SAndroid Build Coastguard Worker 
130*6777b538SAndroid Build Coastguard Worker // Test version of PrefService.
131*6777b538SAndroid Build Coastguard Worker class TestingPrefServiceSimple
132*6777b538SAndroid Build Coastguard Worker     : public TestingPrefServiceBase<PrefService, PrefRegistry> {
133*6777b538SAndroid Build Coastguard Worker  public:
134*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceSimple();
135*6777b538SAndroid Build Coastguard Worker 
136*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceSimple(const TestingPrefServiceSimple&) = delete;
137*6777b538SAndroid Build Coastguard Worker   TestingPrefServiceSimple& operator=(const TestingPrefServiceSimple&) = delete;
138*6777b538SAndroid Build Coastguard Worker 
139*6777b538SAndroid Build Coastguard Worker   ~TestingPrefServiceSimple() override;
140*6777b538SAndroid Build Coastguard Worker 
141*6777b538SAndroid Build Coastguard Worker   // This is provided as a convenience for registering preferences on
142*6777b538SAndroid Build Coastguard Worker   // an existing TestingPrefServiceSimple instance. On a production
143*6777b538SAndroid Build Coastguard Worker   // PrefService you would do all registrations before constructing
144*6777b538SAndroid Build Coastguard Worker   // it, passing it a PrefRegistry via its constructor (or via
145*6777b538SAndroid Build Coastguard Worker   // e.g. PrefServiceFactory).
146*6777b538SAndroid Build Coastguard Worker   PrefRegistrySimple* registry();
147*6777b538SAndroid Build Coastguard Worker };
148*6777b538SAndroid Build Coastguard Worker 
149*6777b538SAndroid Build Coastguard Worker template <>
150*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<PrefService, PrefRegistry>::TestingPrefServiceBase(
151*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> managed_prefs,
152*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> supervised_user_prefs,
153*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> extension_prefs,
154*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> standalone_browser_prefs,
155*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> user_prefs,
156*6777b538SAndroid Build Coastguard Worker     scoped_refptr<TestingPrefStore> recommended_prefs,
157*6777b538SAndroid Build Coastguard Worker     scoped_refptr<PrefRegistry> pref_registry,
158*6777b538SAndroid Build Coastguard Worker     PrefNotifierImpl* pref_notifier);
159*6777b538SAndroid Build Coastguard Worker 
160*6777b538SAndroid Build Coastguard Worker template<class SuperPrefService, class ConstructionPrefRegistry>
161*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<
~TestingPrefServiceBase()162*6777b538SAndroid Build Coastguard Worker     SuperPrefService, ConstructionPrefRegistry>::~TestingPrefServiceBase() {
163*6777b538SAndroid Build Coastguard Worker }
164*6777b538SAndroid Build Coastguard Worker 
165*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
166*6777b538SAndroid Build Coastguard Worker const base::Value* TestingPrefServiceBase<
167*6777b538SAndroid Build Coastguard Worker     SuperPrefService,
GetManagedPref(const std::string & path)168*6777b538SAndroid Build Coastguard Worker     ConstructionPrefRegistry>::GetManagedPref(const std::string& path) const {
169*6777b538SAndroid Build Coastguard Worker   return GetPref(managed_prefs_.get(), path);
170*6777b538SAndroid Build Coastguard Worker }
171*6777b538SAndroid Build Coastguard Worker 
172*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
173*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetManagedPref(const std::string & path,std::unique_ptr<base::Value> value)174*6777b538SAndroid Build Coastguard Worker     SetManagedPref(const std::string& path,
175*6777b538SAndroid Build Coastguard Worker                    std::unique_ptr<base::Value> value) {
176*6777b538SAndroid Build Coastguard Worker   SetPref(managed_prefs_.get(), path, std::move(value));
177*6777b538SAndroid Build Coastguard Worker }
178*6777b538SAndroid Build Coastguard Worker 
179*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
180*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetManagedPref(const std::string & path,base::Value value)181*6777b538SAndroid Build Coastguard Worker     SetManagedPref(const std::string& path, base::Value value) {
182*6777b538SAndroid Build Coastguard Worker   SetManagedPref(path, base::Value::ToUniquePtrValue(std::move(value)));
183*6777b538SAndroid Build Coastguard Worker }
184*6777b538SAndroid Build Coastguard Worker 
185*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
186*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetManagedPref(const std::string & path,base::Value::Dict dict)187*6777b538SAndroid Build Coastguard Worker     SetManagedPref(const std::string& path, base::Value::Dict dict) {
188*6777b538SAndroid Build Coastguard Worker   SetManagedPref(path, std::make_unique<base::Value>(std::move(dict)));
189*6777b538SAndroid Build Coastguard Worker }
190*6777b538SAndroid Build Coastguard Worker 
191*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
192*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetManagedPref(const std::string & path,base::Value::List list)193*6777b538SAndroid Build Coastguard Worker     SetManagedPref(const std::string& path, base::Value::List list) {
194*6777b538SAndroid Build Coastguard Worker   SetManagedPref(path, std::make_unique<base::Value>(std::move(list)));
195*6777b538SAndroid Build Coastguard Worker }
196*6777b538SAndroid Build Coastguard Worker 
197*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
198*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemoveManagedPref(const std::string & path)199*6777b538SAndroid Build Coastguard Worker     RemoveManagedPref(const std::string& path) {
200*6777b538SAndroid Build Coastguard Worker   RemovePref(managed_prefs_.get(), path);
201*6777b538SAndroid Build Coastguard Worker }
202*6777b538SAndroid Build Coastguard Worker 
203*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
204*6777b538SAndroid Build Coastguard Worker const base::Value*
205*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
GetSupervisedUserPref(const std::string & path)206*6777b538SAndroid Build Coastguard Worker     GetSupervisedUserPref(const std::string& path) const {
207*6777b538SAndroid Build Coastguard Worker   return GetPref(supervised_user_prefs_.get(), path);
208*6777b538SAndroid Build Coastguard Worker }
209*6777b538SAndroid Build Coastguard Worker 
210*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
211*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetSupervisedUserPref(const std::string & path,std::unique_ptr<base::Value> value)212*6777b538SAndroid Build Coastguard Worker     SetSupervisedUserPref(const std::string& path,
213*6777b538SAndroid Build Coastguard Worker                           std::unique_ptr<base::Value> value) {
214*6777b538SAndroid Build Coastguard Worker   SetPref(supervised_user_prefs_.get(), path, std::move(value));
215*6777b538SAndroid Build Coastguard Worker }
216*6777b538SAndroid Build Coastguard Worker 
217*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
218*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetSupervisedUserPref(const std::string & path,base::Value value)219*6777b538SAndroid Build Coastguard Worker     SetSupervisedUserPref(const std::string& path, base::Value value) {
220*6777b538SAndroid Build Coastguard Worker   SetSupervisedUserPref(path, base::Value::ToUniquePtrValue(std::move(value)));
221*6777b538SAndroid Build Coastguard Worker }
222*6777b538SAndroid Build Coastguard Worker 
223*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
224*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetSupervisedUserPref(const std::string & path,base::Value::Dict dict)225*6777b538SAndroid Build Coastguard Worker     SetSupervisedUserPref(const std::string& path, base::Value::Dict dict) {
226*6777b538SAndroid Build Coastguard Worker   SetSupervisedUserPref(path, std::make_unique<base::Value>(std::move(dict)));
227*6777b538SAndroid Build Coastguard Worker }
228*6777b538SAndroid Build Coastguard Worker 
229*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
230*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetSupervisedUserPref(const std::string & path,base::Value::List list)231*6777b538SAndroid Build Coastguard Worker     SetSupervisedUserPref(const std::string& path, base::Value::List list) {
232*6777b538SAndroid Build Coastguard Worker   SetSupervisedUserPref(path, std::make_unique<base::Value>(std::move(list)));
233*6777b538SAndroid Build Coastguard Worker }
234*6777b538SAndroid Build Coastguard Worker 
235*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
236*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemoveSupervisedUserPref(const std::string & path)237*6777b538SAndroid Build Coastguard Worker     RemoveSupervisedUserPref(const std::string& path) {
238*6777b538SAndroid Build Coastguard Worker   RemovePref(supervised_user_prefs_.get(), path);
239*6777b538SAndroid Build Coastguard Worker }
240*6777b538SAndroid Build Coastguard Worker 
241*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
242*6777b538SAndroid Build Coastguard Worker const base::Value* TestingPrefServiceBase<
243*6777b538SAndroid Build Coastguard Worker     SuperPrefService,
GetExtensionPref(const std::string & path)244*6777b538SAndroid Build Coastguard Worker     ConstructionPrefRegistry>::GetExtensionPref(const std::string& path) const {
245*6777b538SAndroid Build Coastguard Worker   return GetPref(extension_prefs_.get(), path);
246*6777b538SAndroid Build Coastguard Worker }
247*6777b538SAndroid Build Coastguard Worker 
248*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
249*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetExtensionPref(const std::string & path,std::unique_ptr<base::Value> value)250*6777b538SAndroid Build Coastguard Worker     SetExtensionPref(const std::string& path,
251*6777b538SAndroid Build Coastguard Worker                      std::unique_ptr<base::Value> value) {
252*6777b538SAndroid Build Coastguard Worker   SetPref(extension_prefs_.get(), path, std::move(value));
253*6777b538SAndroid Build Coastguard Worker }
254*6777b538SAndroid Build Coastguard Worker 
255*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
256*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetExtensionPref(const std::string & path,base::Value value)257*6777b538SAndroid Build Coastguard Worker     SetExtensionPref(const std::string& path, base::Value value) {
258*6777b538SAndroid Build Coastguard Worker   SetExtensionPref(path, base::Value::ToUniquePtrValue(std::move(value)));
259*6777b538SAndroid Build Coastguard Worker }
260*6777b538SAndroid Build Coastguard Worker 
261*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
262*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetExtensionPref(const std::string & path,base::Value::Dict dict)263*6777b538SAndroid Build Coastguard Worker     SetExtensionPref(const std::string& path, base::Value::Dict dict) {
264*6777b538SAndroid Build Coastguard Worker   SetExtensionPref(path, std::make_unique<base::Value>(std::move(dict)));
265*6777b538SAndroid Build Coastguard Worker }
266*6777b538SAndroid Build Coastguard Worker 
267*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
268*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetExtensionPref(const std::string & path,base::Value::List list)269*6777b538SAndroid Build Coastguard Worker     SetExtensionPref(const std::string& path, base::Value::List list) {
270*6777b538SAndroid Build Coastguard Worker   SetExtensionPref(path, std::make_unique<base::Value>(std::move(list)));
271*6777b538SAndroid Build Coastguard Worker }
272*6777b538SAndroid Build Coastguard Worker 
273*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
274*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemoveExtensionPref(const std::string & path)275*6777b538SAndroid Build Coastguard Worker     RemoveExtensionPref(const std::string& path) {
276*6777b538SAndroid Build Coastguard Worker   RemovePref(extension_prefs_.get(), path);
277*6777b538SAndroid Build Coastguard Worker }
278*6777b538SAndroid Build Coastguard Worker 
279*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
280*6777b538SAndroid Build Coastguard Worker const base::Value*
GetUserPref(const std::string & path)281*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::GetUserPref(
282*6777b538SAndroid Build Coastguard Worker     const std::string& path) const {
283*6777b538SAndroid Build Coastguard Worker   return GetPref(user_prefs_.get(), path);
284*6777b538SAndroid Build Coastguard Worker }
285*6777b538SAndroid Build Coastguard Worker 
286*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
287*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetUserPref(const std::string & path,std::unique_ptr<base::Value> value)288*6777b538SAndroid Build Coastguard Worker     SetUserPref(const std::string& path, std::unique_ptr<base::Value> value) {
289*6777b538SAndroid Build Coastguard Worker   SetPref(user_prefs_.get(), path, std::move(value));
290*6777b538SAndroid Build Coastguard Worker }
291*6777b538SAndroid Build Coastguard Worker 
292*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
293*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetUserPref(const std::string & path,base::Value value)294*6777b538SAndroid Build Coastguard Worker     SetUserPref(const std::string& path, base::Value value) {
295*6777b538SAndroid Build Coastguard Worker   SetUserPref(path, base::Value::ToUniquePtrValue(std::move(value)));
296*6777b538SAndroid Build Coastguard Worker }
297*6777b538SAndroid Build Coastguard Worker 
298*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
299*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetUserPref(const std::string & path,base::Value::Dict dict)300*6777b538SAndroid Build Coastguard Worker     SetUserPref(const std::string& path, base::Value::Dict dict) {
301*6777b538SAndroid Build Coastguard Worker   SetUserPref(path, std::make_unique<base::Value>(std::move(dict)));
302*6777b538SAndroid Build Coastguard Worker }
303*6777b538SAndroid Build Coastguard Worker 
304*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
305*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetUserPref(const std::string & path,base::Value::List list)306*6777b538SAndroid Build Coastguard Worker     SetUserPref(const std::string& path, base::Value::List list) {
307*6777b538SAndroid Build Coastguard Worker   SetUserPref(path, std::make_unique<base::Value>(std::move(list)));
308*6777b538SAndroid Build Coastguard Worker }
309*6777b538SAndroid Build Coastguard Worker 
310*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
311*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemoveUserPref(const std::string & path)312*6777b538SAndroid Build Coastguard Worker     RemoveUserPref(const std::string& path) {
313*6777b538SAndroid Build Coastguard Worker   RemovePref(user_prefs_.get(), path);
314*6777b538SAndroid Build Coastguard Worker }
315*6777b538SAndroid Build Coastguard Worker 
316*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
317*6777b538SAndroid Build Coastguard Worker const base::Value*
318*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
GetRecommendedPref(const std::string & path)319*6777b538SAndroid Build Coastguard Worker     GetRecommendedPref(const std::string& path) const {
320*6777b538SAndroid Build Coastguard Worker   return GetPref(recommended_prefs_, path);
321*6777b538SAndroid Build Coastguard Worker }
322*6777b538SAndroid Build Coastguard Worker 
323*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
324*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetRecommendedPref(const std::string & path,std::unique_ptr<base::Value> value)325*6777b538SAndroid Build Coastguard Worker     SetRecommendedPref(const std::string& path,
326*6777b538SAndroid Build Coastguard Worker                        std::unique_ptr<base::Value> value) {
327*6777b538SAndroid Build Coastguard Worker   SetPref(recommended_prefs_.get(), path, std::move(value));
328*6777b538SAndroid Build Coastguard Worker }
329*6777b538SAndroid Build Coastguard Worker 
330*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
331*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetRecommendedPref(const std::string & path,base::Value value)332*6777b538SAndroid Build Coastguard Worker     SetRecommendedPref(const std::string& path, base::Value value) {
333*6777b538SAndroid Build Coastguard Worker   SetPref(recommended_prefs_.get(), path,
334*6777b538SAndroid Build Coastguard Worker           base::Value::ToUniquePtrValue(std::move(value)));
335*6777b538SAndroid Build Coastguard Worker }
336*6777b538SAndroid Build Coastguard Worker 
337*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
338*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetRecommendedPref(const std::string & path,base::Value::Dict dict)339*6777b538SAndroid Build Coastguard Worker     SetRecommendedPref(const std::string& path, base::Value::Dict dict) {
340*6777b538SAndroid Build Coastguard Worker   SetRecommendedPref(path, std::make_unique<base::Value>(std::move(dict)));
341*6777b538SAndroid Build Coastguard Worker }
342*6777b538SAndroid Build Coastguard Worker 
343*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
344*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetRecommendedPref(const std::string & path,base::Value::List list)345*6777b538SAndroid Build Coastguard Worker     SetRecommendedPref(const std::string& path, base::Value::List list) {
346*6777b538SAndroid Build Coastguard Worker   SetRecommendedPref(path, std::make_unique<base::Value>(std::move(list)));
347*6777b538SAndroid Build Coastguard Worker }
348*6777b538SAndroid Build Coastguard Worker 
349*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
350*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemoveRecommendedPref(const std::string & path)351*6777b538SAndroid Build Coastguard Worker     RemoveRecommendedPref(const std::string& path) {
352*6777b538SAndroid Build Coastguard Worker   RemovePref(recommended_prefs_.get(), path);
353*6777b538SAndroid Build Coastguard Worker }
354*6777b538SAndroid Build Coastguard Worker 
355*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
356*6777b538SAndroid Build Coastguard Worker const base::Value*
GetPref(TestingPrefStore * pref_store,const std::string & path)357*6777b538SAndroid Build Coastguard Worker TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::GetPref(
358*6777b538SAndroid Build Coastguard Worker     TestingPrefStore* pref_store,
359*6777b538SAndroid Build Coastguard Worker     const std::string& path) const {
360*6777b538SAndroid Build Coastguard Worker   const base::Value* res;
361*6777b538SAndroid Build Coastguard Worker   return pref_store->GetValue(path, &res) ? res : NULL;
362*6777b538SAndroid Build Coastguard Worker }
363*6777b538SAndroid Build Coastguard Worker 
364*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
365*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetPref(TestingPrefStore * pref_store,const std::string & path,std::unique_ptr<base::Value> value)366*6777b538SAndroid Build Coastguard Worker     SetPref(TestingPrefStore* pref_store,
367*6777b538SAndroid Build Coastguard Worker             const std::string& path,
368*6777b538SAndroid Build Coastguard Worker             std::unique_ptr<base::Value> value) {
369*6777b538SAndroid Build Coastguard Worker   pref_store->SetValue(path, base::Value::FromUniquePtrValue(std::move(value)),
370*6777b538SAndroid Build Coastguard Worker                        WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
371*6777b538SAndroid Build Coastguard Worker }
372*6777b538SAndroid Build Coastguard Worker 
373*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
374*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
RemovePref(TestingPrefStore * pref_store,const std::string & path)375*6777b538SAndroid Build Coastguard Worker     RemovePref(TestingPrefStore* pref_store, const std::string& path) {
376*6777b538SAndroid Build Coastguard Worker   pref_store->RemoveValue(path, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
377*6777b538SAndroid Build Coastguard Worker }
378*6777b538SAndroid Build Coastguard Worker 
379*6777b538SAndroid Build Coastguard Worker template <class SuperPrefService, class ConstructionPrefRegistry>
380*6777b538SAndroid Build Coastguard Worker void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>::
SetInitializationCompleted()381*6777b538SAndroid Build Coastguard Worker     SetInitializationCompleted() {
382*6777b538SAndroid Build Coastguard Worker   managed_prefs_->SetInitializationCompleted();
383*6777b538SAndroid Build Coastguard Worker   supervised_user_prefs_->SetInitializationCompleted();
384*6777b538SAndroid Build Coastguard Worker   extension_prefs_->SetInitializationCompleted();
385*6777b538SAndroid Build Coastguard Worker   recommended_prefs_->SetInitializationCompleted();
386*6777b538SAndroid Build Coastguard Worker   // |user_prefs_| and |standalone_browser_prefs_| are initialized in
387*6777b538SAndroid Build Coastguard Worker   // PrefService constructor so no need to set initialization status again.
388*6777b538SAndroid Build Coastguard Worker }
389*6777b538SAndroid Build Coastguard Worker 
390*6777b538SAndroid Build Coastguard Worker #endif  // COMPONENTS_PREFS_TESTING_PREF_SERVICE_H_
391