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 #include <stddef.h>
6*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_helpers.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/values.h"
13*6777b538SAndroid Build Coastguard Worker #include "components/prefs/json_pref_store.h"
14*6777b538SAndroid Build Coastguard Worker #include "components/prefs/mock_pref_change_callback.h"
15*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_change_registrar.h"
16*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_notifier_impl.h"
17*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_registry_simple.h"
18*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_service_factory.h"
19*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_value_store.h"
20*6777b538SAndroid Build Coastguard Worker #include "components/prefs/testing_pref_service.h"
21*6777b538SAndroid Build Coastguard Worker #include "components/prefs/testing_pref_store.h"
22*6777b538SAndroid Build Coastguard Worker #include "testing/gmock/include/gmock/gmock.h"
23*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
24*6777b538SAndroid Build Coastguard Worker
25*6777b538SAndroid Build Coastguard Worker using testing::_;
26*6777b538SAndroid Build Coastguard Worker using testing::Mock;
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker namespace {
29*6777b538SAndroid Build Coastguard Worker
30*6777b538SAndroid Build Coastguard Worker const char kPrefName[] = "pref.name";
31*6777b538SAndroid Build Coastguard Worker const char kStandaloneBrowserPref[] = "standalone_browser_pref";
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard Worker } // namespace
34*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,NoObserverFire)35*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, NoObserverFire) {
36*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
37*6777b538SAndroid Build Coastguard Worker
38*6777b538SAndroid Build Coastguard Worker const char pref_name[] = "homepage";
39*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterStringPref(pref_name, std::string());
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Worker const char new_pref_value[] = "http://www.google.com/";
42*6777b538SAndroid Build Coastguard Worker MockPrefChangeCallback obs(&prefs);
43*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar;
44*6777b538SAndroid Build Coastguard Worker registrar.Init(&prefs);
45*6777b538SAndroid Build Coastguard Worker registrar.Add(pref_name, obs.GetCallback());
46*6777b538SAndroid Build Coastguard Worker
47*6777b538SAndroid Build Coastguard Worker // This should fire the checks in MockPrefChangeCallback::OnPreferenceChanged.
48*6777b538SAndroid Build Coastguard Worker const base::Value expected_value(new_pref_value);
49*6777b538SAndroid Build Coastguard Worker obs.Expect(pref_name, &expected_value);
50*6777b538SAndroid Build Coastguard Worker prefs.SetString(pref_name, new_pref_value);
51*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
52*6777b538SAndroid Build Coastguard Worker
53*6777b538SAndroid Build Coastguard Worker // Setting the pref to the same value should not set the pref value a second
54*6777b538SAndroid Build Coastguard Worker // time.
55*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
56*6777b538SAndroid Build Coastguard Worker prefs.SetString(pref_name, new_pref_value);
57*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker // Clearing the pref should cause the pref to fire.
60*6777b538SAndroid Build Coastguard Worker const base::Value expected_default_value((std::string()));
61*6777b538SAndroid Build Coastguard Worker obs.Expect(pref_name, &expected_default_value);
62*6777b538SAndroid Build Coastguard Worker prefs.ClearPref(pref_name);
63*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
64*6777b538SAndroid Build Coastguard Worker
65*6777b538SAndroid Build Coastguard Worker // Clearing the pref again should not cause the pref to fire.
66*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
67*6777b538SAndroid Build Coastguard Worker prefs.ClearPref(pref_name);
68*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
69*6777b538SAndroid Build Coastguard Worker }
70*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,HasPrefPath)71*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, HasPrefPath) {
72*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Worker const char path[] = "fake.path";
75*6777b538SAndroid Build Coastguard Worker
76*6777b538SAndroid Build Coastguard Worker // Shouldn't initially have a path.
77*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(prefs.HasPrefPath(path));
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Worker // Register the path. This doesn't set a value, so the path still shouldn't
80*6777b538SAndroid Build Coastguard Worker // exist.
81*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterStringPref(path, std::string());
82*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(prefs.HasPrefPath(path));
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Worker // Set a value and make sure we have a path.
85*6777b538SAndroid Build Coastguard Worker prefs.SetString(path, "blah");
86*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(prefs.HasPrefPath(path));
87*6777b538SAndroid Build Coastguard Worker }
88*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,Observers)89*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, Observers) {
90*6777b538SAndroid Build Coastguard Worker const char pref_name[] = "homepage";
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
93*6777b538SAndroid Build Coastguard Worker prefs.SetUserPref(pref_name, base::Value("http://www.cnn.com"));
94*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterStringPref(pref_name, std::string());
95*6777b538SAndroid Build Coastguard Worker
96*6777b538SAndroid Build Coastguard Worker const char new_pref_value[] = "http://www.google.com/";
97*6777b538SAndroid Build Coastguard Worker const base::Value expected_new_pref_value(new_pref_value);
98*6777b538SAndroid Build Coastguard Worker MockPrefChangeCallback obs(&prefs);
99*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar;
100*6777b538SAndroid Build Coastguard Worker registrar.Init(&prefs);
101*6777b538SAndroid Build Coastguard Worker registrar.Add(pref_name, obs.GetCallback());
102*6777b538SAndroid Build Coastguard Worker
103*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar_two;
104*6777b538SAndroid Build Coastguard Worker registrar_two.Init(&prefs);
105*6777b538SAndroid Build Coastguard Worker
106*6777b538SAndroid Build Coastguard Worker // This should fire the checks in MockPrefChangeCallback::OnPreferenceChanged.
107*6777b538SAndroid Build Coastguard Worker obs.Expect(pref_name, &expected_new_pref_value);
108*6777b538SAndroid Build Coastguard Worker prefs.SetString(pref_name, new_pref_value);
109*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
110*6777b538SAndroid Build Coastguard Worker
111*6777b538SAndroid Build Coastguard Worker // Now try adding a second pref observer.
112*6777b538SAndroid Build Coastguard Worker const char new_pref_value2[] = "http://www.youtube.com/";
113*6777b538SAndroid Build Coastguard Worker const base::Value expected_new_pref_value2(new_pref_value2);
114*6777b538SAndroid Build Coastguard Worker MockPrefChangeCallback obs2(&prefs);
115*6777b538SAndroid Build Coastguard Worker obs.Expect(pref_name, &expected_new_pref_value2);
116*6777b538SAndroid Build Coastguard Worker obs2.Expect(pref_name, &expected_new_pref_value2);
117*6777b538SAndroid Build Coastguard Worker registrar_two.Add(pref_name, obs2.GetCallback());
118*6777b538SAndroid Build Coastguard Worker // This should fire the checks in obs and obs2.
119*6777b538SAndroid Build Coastguard Worker prefs.SetString(pref_name, new_pref_value2);
120*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
121*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs2);
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Worker // Set a recommended value.
124*6777b538SAndroid Build Coastguard Worker const base::Value recommended_pref_value("http://www.gmail.com/");
125*6777b538SAndroid Build Coastguard Worker obs.Expect(pref_name, &expected_new_pref_value2);
126*6777b538SAndroid Build Coastguard Worker obs2.Expect(pref_name, &expected_new_pref_value2);
127*6777b538SAndroid Build Coastguard Worker // This should fire the checks in obs and obs2 but with an unchanged value
128*6777b538SAndroid Build Coastguard Worker // as the recommended value is being overridden by the user-set value.
129*6777b538SAndroid Build Coastguard Worker prefs.SetRecommendedPref(pref_name, recommended_pref_value.Clone());
130*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
131*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs2);
132*6777b538SAndroid Build Coastguard Worker
133*6777b538SAndroid Build Coastguard Worker // Make sure obs2 still works after removing obs.
134*6777b538SAndroid Build Coastguard Worker registrar.Remove(pref_name);
135*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
136*6777b538SAndroid Build Coastguard Worker obs2.Expect(pref_name, &expected_new_pref_value);
137*6777b538SAndroid Build Coastguard Worker // This should only fire the observer in obs2.
138*6777b538SAndroid Build Coastguard Worker prefs.SetString(pref_name, new_pref_value);
139*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs);
140*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&obs2);
141*6777b538SAndroid Build Coastguard Worker }
142*6777b538SAndroid Build Coastguard Worker
143*6777b538SAndroid Build Coastguard Worker // Make sure that if a preference changes type, so the wrong type is stored in
144*6777b538SAndroid Build Coastguard Worker // the user pref file, it uses the correct fallback value instead.
TEST(PrefServiceTest,GetValueChangedType)145*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, GetValueChangedType) {
146*6777b538SAndroid Build Coastguard Worker const int kTestValue = 10;
147*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
148*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterIntegerPref(kPrefName, kTestValue);
149*6777b538SAndroid Build Coastguard Worker
150*6777b538SAndroid Build Coastguard Worker // Check falling back to a recommended value.
151*6777b538SAndroid Build Coastguard Worker prefs.SetUserPref(kPrefName, base::Value("not an integer"));
152*6777b538SAndroid Build Coastguard Worker const PrefService::Preference* pref = prefs.FindPreference(kPrefName);
153*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(pref);
154*6777b538SAndroid Build Coastguard Worker const base::Value* value = pref->GetValue();
155*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
156*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
157*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
158*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kTestValue, value->GetInt());
159*6777b538SAndroid Build Coastguard Worker }
160*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,GetValueAndGetRecommendedValue)161*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, GetValueAndGetRecommendedValue) {
162*6777b538SAndroid Build Coastguard Worker const int kDefaultValue = 5;
163*6777b538SAndroid Build Coastguard Worker const int kUserValue = 10;
164*6777b538SAndroid Build Coastguard Worker const int kRecommendedValue = 15;
165*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
166*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterIntegerPref(kPrefName, kDefaultValue);
167*6777b538SAndroid Build Coastguard Worker
168*6777b538SAndroid Build Coastguard Worker // Create pref with a default value only.
169*6777b538SAndroid Build Coastguard Worker const PrefService::Preference* pref = prefs.FindPreference(kPrefName);
170*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(pref);
171*6777b538SAndroid Build Coastguard Worker
172*6777b538SAndroid Build Coastguard Worker // Check that GetValue() returns the default value.
173*6777b538SAndroid Build Coastguard Worker const base::Value* value = pref->GetValue();
174*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
175*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
176*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
177*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kDefaultValue, value->GetInt());
178*6777b538SAndroid Build Coastguard Worker
179*6777b538SAndroid Build Coastguard Worker // Check that GetRecommendedValue() returns no value.
180*6777b538SAndroid Build Coastguard Worker value = pref->GetRecommendedValue();
181*6777b538SAndroid Build Coastguard Worker ASSERT_FALSE(value);
182*6777b538SAndroid Build Coastguard Worker
183*6777b538SAndroid Build Coastguard Worker // Set a user-set value.
184*6777b538SAndroid Build Coastguard Worker prefs.SetUserPref(kPrefName, base::Value(kUserValue));
185*6777b538SAndroid Build Coastguard Worker
186*6777b538SAndroid Build Coastguard Worker // Check that GetValue() returns the user-set value.
187*6777b538SAndroid Build Coastguard Worker value = pref->GetValue();
188*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
189*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
190*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
191*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kUserValue, value->GetInt());
192*6777b538SAndroid Build Coastguard Worker
193*6777b538SAndroid Build Coastguard Worker // Check that GetRecommendedValue() returns no value.
194*6777b538SAndroid Build Coastguard Worker value = pref->GetRecommendedValue();
195*6777b538SAndroid Build Coastguard Worker ASSERT_FALSE(value);
196*6777b538SAndroid Build Coastguard Worker
197*6777b538SAndroid Build Coastguard Worker // Set a recommended value.
198*6777b538SAndroid Build Coastguard Worker prefs.SetRecommendedPref(kPrefName, base::Value(kRecommendedValue));
199*6777b538SAndroid Build Coastguard Worker
200*6777b538SAndroid Build Coastguard Worker // Check that GetValue() returns the user-set value.
201*6777b538SAndroid Build Coastguard Worker value = pref->GetValue();
202*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
203*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
204*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
205*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kUserValue, value->GetInt());
206*6777b538SAndroid Build Coastguard Worker
207*6777b538SAndroid Build Coastguard Worker // Check that GetRecommendedValue() returns the recommended value.
208*6777b538SAndroid Build Coastguard Worker value = pref->GetRecommendedValue();
209*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
210*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
211*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
212*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kRecommendedValue, value->GetInt());
213*6777b538SAndroid Build Coastguard Worker
214*6777b538SAndroid Build Coastguard Worker // Remove the user-set value.
215*6777b538SAndroid Build Coastguard Worker prefs.RemoveUserPref(kPrefName);
216*6777b538SAndroid Build Coastguard Worker
217*6777b538SAndroid Build Coastguard Worker // Check that GetValue() returns the recommended value.
218*6777b538SAndroid Build Coastguard Worker value = pref->GetValue();
219*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
220*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
221*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
222*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kRecommendedValue, value->GetInt());
223*6777b538SAndroid Build Coastguard Worker
224*6777b538SAndroid Build Coastguard Worker // Check that GetRecommendedValue() returns the recommended value.
225*6777b538SAndroid Build Coastguard Worker value = pref->GetRecommendedValue();
226*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value);
227*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value::Type::INTEGER, value->type());
228*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(value->is_int());
229*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kRecommendedValue, value->GetInt());
230*6777b538SAndroid Build Coastguard Worker }
231*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,SetTimeValue_RegularTime)232*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, SetTimeValue_RegularTime) {
233*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
234*6777b538SAndroid Build Coastguard Worker
235*6777b538SAndroid Build Coastguard Worker // Register a null time as the default.
236*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterTimePref(kPrefName, base::Time());
237*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(prefs.GetTime(kPrefName).is_null());
238*6777b538SAndroid Build Coastguard Worker
239*6777b538SAndroid Build Coastguard Worker // Set a time and make sure that we can read it without any loss of precision.
240*6777b538SAndroid Build Coastguard Worker const base::Time time = base::Time::Now();
241*6777b538SAndroid Build Coastguard Worker prefs.SetTime(kPrefName, time);
242*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(time, prefs.GetTime(kPrefName));
243*6777b538SAndroid Build Coastguard Worker }
244*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,SetTimeValue_NullTime)245*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, SetTimeValue_NullTime) {
246*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
247*6777b538SAndroid Build Coastguard Worker
248*6777b538SAndroid Build Coastguard Worker // Register a non-null time as the default.
249*6777b538SAndroid Build Coastguard Worker const base::Time default_time =
250*6777b538SAndroid Build Coastguard Worker base::Time::FromDeltaSinceWindowsEpoch(base::Microseconds(12345));
251*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterTimePref(kPrefName, default_time);
252*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(prefs.GetTime(kPrefName).is_null());
253*6777b538SAndroid Build Coastguard Worker
254*6777b538SAndroid Build Coastguard Worker // Set a null time and make sure that it remains null upon deserialization.
255*6777b538SAndroid Build Coastguard Worker prefs.SetTime(kPrefName, base::Time());
256*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(prefs.GetTime(kPrefName).is_null());
257*6777b538SAndroid Build Coastguard Worker }
258*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,SetTimeDeltaValue_RegularTimeDelta)259*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, SetTimeDeltaValue_RegularTimeDelta) {
260*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
261*6777b538SAndroid Build Coastguard Worker
262*6777b538SAndroid Build Coastguard Worker // Register a zero time delta as the default.
263*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterTimeDeltaPref(kPrefName, base::TimeDelta());
264*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(prefs.GetTimeDelta(kPrefName).is_zero());
265*6777b538SAndroid Build Coastguard Worker
266*6777b538SAndroid Build Coastguard Worker // Set a time delta and make sure that we can read it without any loss of
267*6777b538SAndroid Build Coastguard Worker // precision.
268*6777b538SAndroid Build Coastguard Worker const base::TimeDelta delta = base::Time::Now() - base::Time();
269*6777b538SAndroid Build Coastguard Worker prefs.SetTimeDelta(kPrefName, delta);
270*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(delta, prefs.GetTimeDelta(kPrefName));
271*6777b538SAndroid Build Coastguard Worker }
272*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,SetTimeDeltaValue_ZeroTimeDelta)273*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, SetTimeDeltaValue_ZeroTimeDelta) {
274*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs;
275*6777b538SAndroid Build Coastguard Worker
276*6777b538SAndroid Build Coastguard Worker // Register a non-zero time delta as the default.
277*6777b538SAndroid Build Coastguard Worker const base::TimeDelta default_delta = base::Microseconds(12345);
278*6777b538SAndroid Build Coastguard Worker prefs.registry()->RegisterTimeDeltaPref(kPrefName, default_delta);
279*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(prefs.GetTimeDelta(kPrefName).is_zero());
280*6777b538SAndroid Build Coastguard Worker
281*6777b538SAndroid Build Coastguard Worker // Set a zero time delta and make sure that it remains zero upon
282*6777b538SAndroid Build Coastguard Worker // deserialization.
283*6777b538SAndroid Build Coastguard Worker prefs.SetTimeDelta(kPrefName, base::TimeDelta());
284*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(prefs.GetTimeDelta(kPrefName).is_zero());
285*6777b538SAndroid Build Coastguard Worker }
286*6777b538SAndroid Build Coastguard Worker
287*6777b538SAndroid Build Coastguard Worker // A PrefStore which just stores the last write flags that were used to write
288*6777b538SAndroid Build Coastguard Worker // values to it.
289*6777b538SAndroid Build Coastguard Worker class WriteFlagChecker : public TestingPrefStore {
290*6777b538SAndroid Build Coastguard Worker public:
WriteFlagChecker()291*6777b538SAndroid Build Coastguard Worker WriteFlagChecker() {}
292*6777b538SAndroid Build Coastguard Worker
ReportValueChanged(const std::string & key,uint32_t flags)293*6777b538SAndroid Build Coastguard Worker void ReportValueChanged(const std::string& key, uint32_t flags) override {
294*6777b538SAndroid Build Coastguard Worker SetLastWriteFlags(flags);
295*6777b538SAndroid Build Coastguard Worker }
296*6777b538SAndroid Build Coastguard Worker
SetValue(const std::string & key,base::Value value,uint32_t flags)297*6777b538SAndroid Build Coastguard Worker void SetValue(const std::string& key,
298*6777b538SAndroid Build Coastguard Worker base::Value value,
299*6777b538SAndroid Build Coastguard Worker uint32_t flags) override {
300*6777b538SAndroid Build Coastguard Worker SetLastWriteFlags(flags);
301*6777b538SAndroid Build Coastguard Worker }
302*6777b538SAndroid Build Coastguard Worker
SetValueSilently(const std::string & key,base::Value value,uint32_t flags)303*6777b538SAndroid Build Coastguard Worker void SetValueSilently(const std::string& key,
304*6777b538SAndroid Build Coastguard Worker base::Value value,
305*6777b538SAndroid Build Coastguard Worker uint32_t flags) override {
306*6777b538SAndroid Build Coastguard Worker SetLastWriteFlags(flags);
307*6777b538SAndroid Build Coastguard Worker }
308*6777b538SAndroid Build Coastguard Worker
RemoveValue(const std::string & key,uint32_t flags)309*6777b538SAndroid Build Coastguard Worker void RemoveValue(const std::string& key, uint32_t flags) override {
310*6777b538SAndroid Build Coastguard Worker SetLastWriteFlags(flags);
311*6777b538SAndroid Build Coastguard Worker }
312*6777b538SAndroid Build Coastguard Worker
GetLastFlagsAndClear()313*6777b538SAndroid Build Coastguard Worker uint32_t GetLastFlagsAndClear() {
314*6777b538SAndroid Build Coastguard Worker CHECK(last_write_flags_set_);
315*6777b538SAndroid Build Coastguard Worker uint32_t result = last_write_flags_;
316*6777b538SAndroid Build Coastguard Worker last_write_flags_set_ = false;
317*6777b538SAndroid Build Coastguard Worker last_write_flags_ = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS;
318*6777b538SAndroid Build Coastguard Worker return result;
319*6777b538SAndroid Build Coastguard Worker }
320*6777b538SAndroid Build Coastguard Worker
last_write_flags_set()321*6777b538SAndroid Build Coastguard Worker bool last_write_flags_set() { return last_write_flags_set_; }
322*6777b538SAndroid Build Coastguard Worker
323*6777b538SAndroid Build Coastguard Worker private:
~WriteFlagChecker()324*6777b538SAndroid Build Coastguard Worker ~WriteFlagChecker() override {}
325*6777b538SAndroid Build Coastguard Worker
SetLastWriteFlags(uint32_t flags)326*6777b538SAndroid Build Coastguard Worker void SetLastWriteFlags(uint32_t flags) {
327*6777b538SAndroid Build Coastguard Worker CHECK(!last_write_flags_set_);
328*6777b538SAndroid Build Coastguard Worker last_write_flags_set_ = true;
329*6777b538SAndroid Build Coastguard Worker last_write_flags_ = flags;
330*6777b538SAndroid Build Coastguard Worker }
331*6777b538SAndroid Build Coastguard Worker
332*6777b538SAndroid Build Coastguard Worker bool last_write_flags_set_ = false;
333*6777b538SAndroid Build Coastguard Worker uint32_t last_write_flags_ = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS;
334*6777b538SAndroid Build Coastguard Worker };
335*6777b538SAndroid Build Coastguard Worker
TEST(PrefServiceTest,WriteablePrefStoreFlags)336*6777b538SAndroid Build Coastguard Worker TEST(PrefServiceTest, WriteablePrefStoreFlags) {
337*6777b538SAndroid Build Coastguard Worker scoped_refptr<WriteFlagChecker> flag_checker(new WriteFlagChecker);
338*6777b538SAndroid Build Coastguard Worker scoped_refptr<PrefRegistrySimple> registry(new PrefRegistrySimple);
339*6777b538SAndroid Build Coastguard Worker PrefServiceFactory factory;
340*6777b538SAndroid Build Coastguard Worker factory.set_user_prefs(flag_checker);
341*6777b538SAndroid Build Coastguard Worker std::unique_ptr<PrefService> prefs(factory.Create(registry.get()));
342*6777b538SAndroid Build Coastguard Worker
343*6777b538SAndroid Build Coastguard Worker // The first 8 bits of write flags are reserved for subclasses. Create a
344*6777b538SAndroid Build Coastguard Worker // custom flag in this range
345*6777b538SAndroid Build Coastguard Worker uint32_t kCustomRegistrationFlag = 1 << 2;
346*6777b538SAndroid Build Coastguard Worker
347*6777b538SAndroid Build Coastguard Worker // A map of the registration flags that will be tested and the write flags
348*6777b538SAndroid Build Coastguard Worker // they are expected to convert to.
349*6777b538SAndroid Build Coastguard Worker struct RegistrationToWriteFlags {
350*6777b538SAndroid Build Coastguard Worker const char* pref_name;
351*6777b538SAndroid Build Coastguard Worker uint32_t registration_flags;
352*6777b538SAndroid Build Coastguard Worker uint32_t write_flags;
353*6777b538SAndroid Build Coastguard Worker };
354*6777b538SAndroid Build Coastguard Worker const RegistrationToWriteFlags kRegistrationToWriteFlags[] = {
355*6777b538SAndroid Build Coastguard Worker {"none",
356*6777b538SAndroid Build Coastguard Worker PrefRegistry::NO_REGISTRATION_FLAGS,
357*6777b538SAndroid Build Coastguard Worker WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS},
358*6777b538SAndroid Build Coastguard Worker {"lossy",
359*6777b538SAndroid Build Coastguard Worker PrefRegistry::LOSSY_PREF,
360*6777b538SAndroid Build Coastguard Worker WriteablePrefStore::LOSSY_PREF_WRITE_FLAG},
361*6777b538SAndroid Build Coastguard Worker {"custom",
362*6777b538SAndroid Build Coastguard Worker kCustomRegistrationFlag,
363*6777b538SAndroid Build Coastguard Worker WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS},
364*6777b538SAndroid Build Coastguard Worker {"lossyandcustom",
365*6777b538SAndroid Build Coastguard Worker PrefRegistry::LOSSY_PREF | kCustomRegistrationFlag,
366*6777b538SAndroid Build Coastguard Worker WriteablePrefStore::LOSSY_PREF_WRITE_FLAG}};
367*6777b538SAndroid Build Coastguard Worker
368*6777b538SAndroid Build Coastguard Worker for (size_t i = 0; i < std::size(kRegistrationToWriteFlags); ++i) {
369*6777b538SAndroid Build Coastguard Worker RegistrationToWriteFlags entry = kRegistrationToWriteFlags[i];
370*6777b538SAndroid Build Coastguard Worker registry->RegisterDictionaryPref(entry.pref_name,
371*6777b538SAndroid Build Coastguard Worker entry.registration_flags);
372*6777b538SAndroid Build Coastguard Worker
373*6777b538SAndroid Build Coastguard Worker SCOPED_TRACE("Currently testing pref with name: " +
374*6777b538SAndroid Build Coastguard Worker std::string(entry.pref_name));
375*6777b538SAndroid Build Coastguard Worker
376*6777b538SAndroid Build Coastguard Worker prefs->GetMutableUserPref(entry.pref_name, base::Value::Type::DICT);
377*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(flag_checker->last_write_flags_set());
378*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
379*6777b538SAndroid Build Coastguard Worker
380*6777b538SAndroid Build Coastguard Worker prefs->ReportUserPrefChanged(entry.pref_name);
381*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(flag_checker->last_write_flags_set());
382*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
383*6777b538SAndroid Build Coastguard Worker
384*6777b538SAndroid Build Coastguard Worker prefs->ClearPref(entry.pref_name);
385*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(flag_checker->last_write_flags_set());
386*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
387*6777b538SAndroid Build Coastguard Worker
388*6777b538SAndroid Build Coastguard Worker prefs->SetUserPrefValue(entry.pref_name,
389*6777b538SAndroid Build Coastguard Worker base::Value(base::Value::Type::DICT));
390*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(flag_checker->last_write_flags_set());
391*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
392*6777b538SAndroid Build Coastguard Worker }
393*6777b538SAndroid Build Coastguard Worker }
394*6777b538SAndroid Build Coastguard Worker
395*6777b538SAndroid Build Coastguard Worker class PrefServiceSetValueTest : public testing::Test {
396*6777b538SAndroid Build Coastguard Worker protected:
397*6777b538SAndroid Build Coastguard Worker static const char kName[];
398*6777b538SAndroid Build Coastguard Worker static const char kValue[];
399*6777b538SAndroid Build Coastguard Worker
PrefServiceSetValueTest()400*6777b538SAndroid Build Coastguard Worker PrefServiceSetValueTest() : observer_(&prefs_) {}
401*6777b538SAndroid Build Coastguard Worker
402*6777b538SAndroid Build Coastguard Worker TestingPrefServiceSimple prefs_;
403*6777b538SAndroid Build Coastguard Worker MockPrefChangeCallback observer_;
404*6777b538SAndroid Build Coastguard Worker };
405*6777b538SAndroid Build Coastguard Worker
406*6777b538SAndroid Build Coastguard Worker const char PrefServiceSetValueTest::kName[] = "name";
407*6777b538SAndroid Build Coastguard Worker const char PrefServiceSetValueTest::kValue[] = "value";
408*6777b538SAndroid Build Coastguard Worker
TEST_F(PrefServiceSetValueTest,SetStringValue)409*6777b538SAndroid Build Coastguard Worker TEST_F(PrefServiceSetValueTest, SetStringValue) {
410*6777b538SAndroid Build Coastguard Worker const char default_string[] = "default";
411*6777b538SAndroid Build Coastguard Worker const base::Value default_value(default_string);
412*6777b538SAndroid Build Coastguard Worker prefs_.registry()->RegisterStringPref(kName, default_string);
413*6777b538SAndroid Build Coastguard Worker
414*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar;
415*6777b538SAndroid Build Coastguard Worker registrar.Init(&prefs_);
416*6777b538SAndroid Build Coastguard Worker registrar.Add(kName, observer_.GetCallback());
417*6777b538SAndroid Build Coastguard Worker
418*6777b538SAndroid Build Coastguard Worker // Changing the controlling store from default to user triggers notification.
419*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &default_value);
420*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, default_value);
421*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
422*6777b538SAndroid Build Coastguard Worker
423*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
424*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, default_value);
425*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
426*6777b538SAndroid Build Coastguard Worker
427*6777b538SAndroid Build Coastguard Worker base::Value new_value(kValue);
428*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &new_value);
429*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, new_value);
430*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
431*6777b538SAndroid Build Coastguard Worker }
432*6777b538SAndroid Build Coastguard Worker
TEST_F(PrefServiceSetValueTest,SetDictionaryValue)433*6777b538SAndroid Build Coastguard Worker TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
434*6777b538SAndroid Build Coastguard Worker prefs_.registry()->RegisterDictionaryPref(kName);
435*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar;
436*6777b538SAndroid Build Coastguard Worker registrar.Init(&prefs_);
437*6777b538SAndroid Build Coastguard Worker registrar.Add(kName, observer_.GetCallback());
438*6777b538SAndroid Build Coastguard Worker
439*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
440*6777b538SAndroid Build Coastguard Worker prefs_.RemoveUserPref(kName);
441*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
442*6777b538SAndroid Build Coastguard Worker
443*6777b538SAndroid Build Coastguard Worker base::Value::Dict new_value_dict;
444*6777b538SAndroid Build Coastguard Worker new_value_dict.Set(kName, kValue);
445*6777b538SAndroid Build Coastguard Worker base::Value new_value(std::move(new_value_dict));
446*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &new_value);
447*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, new_value);
448*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
449*6777b538SAndroid Build Coastguard Worker
450*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
451*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, new_value);
452*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
453*6777b538SAndroid Build Coastguard Worker
454*6777b538SAndroid Build Coastguard Worker base::Value empty((base::Value::Dict()));
455*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &empty);
456*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, empty);
457*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
458*6777b538SAndroid Build Coastguard Worker }
459*6777b538SAndroid Build Coastguard Worker
TEST_F(PrefServiceSetValueTest,SetListValue)460*6777b538SAndroid Build Coastguard Worker TEST_F(PrefServiceSetValueTest, SetListValue) {
461*6777b538SAndroid Build Coastguard Worker prefs_.registry()->RegisterListPref(kName);
462*6777b538SAndroid Build Coastguard Worker PrefChangeRegistrar registrar;
463*6777b538SAndroid Build Coastguard Worker registrar.Init(&prefs_);
464*6777b538SAndroid Build Coastguard Worker registrar.Add(kName, observer_.GetCallback());
465*6777b538SAndroid Build Coastguard Worker
466*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
467*6777b538SAndroid Build Coastguard Worker prefs_.RemoveUserPref(kName);
468*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
469*6777b538SAndroid Build Coastguard Worker
470*6777b538SAndroid Build Coastguard Worker base::Value::List new_value_list;
471*6777b538SAndroid Build Coastguard Worker new_value_list.Append(kValue);
472*6777b538SAndroid Build Coastguard Worker base::Value new_value(std::move(new_value_list));
473*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &new_value);
474*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, new_value);
475*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
476*6777b538SAndroid Build Coastguard Worker
477*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
478*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, new_value);
479*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
480*6777b538SAndroid Build Coastguard Worker
481*6777b538SAndroid Build Coastguard Worker base::Value empty((base::Value::List()));
482*6777b538SAndroid Build Coastguard Worker observer_.Expect(kName, &empty);
483*6777b538SAndroid Build Coastguard Worker prefs_.Set(kName, empty);
484*6777b538SAndroid Build Coastguard Worker Mock::VerifyAndClearExpectations(&observer_);
485*6777b538SAndroid Build Coastguard Worker }
486*6777b538SAndroid Build Coastguard Worker
487*6777b538SAndroid Build Coastguard Worker class PrefStandaloneBrowserPrefsTest : public testing::Test {
488*6777b538SAndroid Build Coastguard Worker protected:
PrefStandaloneBrowserPrefsTest()489*6777b538SAndroid Build Coastguard Worker PrefStandaloneBrowserPrefsTest()
490*6777b538SAndroid Build Coastguard Worker : user_pref_store_(base::MakeRefCounted<TestingPrefStore>()),
491*6777b538SAndroid Build Coastguard Worker standalone_browser_pref_store_(
492*6777b538SAndroid Build Coastguard Worker base::MakeRefCounted<TestingPrefStore>()),
493*6777b538SAndroid Build Coastguard Worker pref_registry_(base::MakeRefCounted<PrefRegistrySimple>()) {}
494*6777b538SAndroid Build Coastguard Worker
495*6777b538SAndroid Build Coastguard Worker ~PrefStandaloneBrowserPrefsTest() override = default;
496*6777b538SAndroid Build Coastguard Worker
SetUp()497*6777b538SAndroid Build Coastguard Worker void SetUp() override {
498*6777b538SAndroid Build Coastguard Worker auto pref_notifier = std::make_unique<PrefNotifierImpl>();
499*6777b538SAndroid Build Coastguard Worker auto pref_value_store = std::make_unique<PrefValueStore>(
500*6777b538SAndroid Build Coastguard Worker nullptr /* managed_prefs */, nullptr /* supervised_user_prefs */,
501*6777b538SAndroid Build Coastguard Worker nullptr /* extension_prefs */, standalone_browser_pref_store_.get(),
502*6777b538SAndroid Build Coastguard Worker new TestingPrefStore(), user_pref_store_.get(),
503*6777b538SAndroid Build Coastguard Worker nullptr /* recommended_prefs */, pref_registry_->defaults().get(),
504*6777b538SAndroid Build Coastguard Worker pref_notifier.get());
505*6777b538SAndroid Build Coastguard Worker pref_service_ = std::make_unique<PrefService>(
506*6777b538SAndroid Build Coastguard Worker std::move(pref_notifier), std::move(pref_value_store), user_pref_store_,
507*6777b538SAndroid Build Coastguard Worker standalone_browser_pref_store_, pref_registry_, base::DoNothing(),
508*6777b538SAndroid Build Coastguard Worker false);
509*6777b538SAndroid Build Coastguard Worker pref_registry_->RegisterIntegerPref(kStandaloneBrowserPref, 4);
510*6777b538SAndroid Build Coastguard Worker }
511*6777b538SAndroid Build Coastguard Worker
512*6777b538SAndroid Build Coastguard Worker std::unique_ptr<PrefService> pref_service_;
513*6777b538SAndroid Build Coastguard Worker scoped_refptr<TestingPrefStore> user_pref_store_;
514*6777b538SAndroid Build Coastguard Worker scoped_refptr<TestingPrefStore> standalone_browser_pref_store_;
515*6777b538SAndroid Build Coastguard Worker scoped_refptr<PrefRegistrySimple> pref_registry_;
516*6777b538SAndroid Build Coastguard Worker };
517*6777b538SAndroid Build Coastguard Worker
518*6777b538SAndroid Build Coastguard Worker // Check that the standalone browser pref store is correctly initialized,
519*6777b538SAndroid Build Coastguard Worker // written to, read, and has correct precedence.
TEST_F(PrefStandaloneBrowserPrefsTest,CheckStandaloneBrowserPref)520*6777b538SAndroid Build Coastguard Worker TEST_F(PrefStandaloneBrowserPrefsTest, CheckStandaloneBrowserPref) {
521*6777b538SAndroid Build Coastguard Worker const PrefService::Preference* preference =
522*6777b538SAndroid Build Coastguard Worker pref_service_->FindPreference(kStandaloneBrowserPref);
523*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(preference->IsDefaultValue());
524*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value(4), *(preference->GetValue()));
525*6777b538SAndroid Build Coastguard Worker user_pref_store_->SetInteger(kStandaloneBrowserPref, 11);
526*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value(11), *(preference->GetValue()));
527*6777b538SAndroid Build Coastguard Worker // The standalone_browser_pref_store has higher precedence.
528*6777b538SAndroid Build Coastguard Worker standalone_browser_pref_store_->SetInteger(kStandaloneBrowserPref, 10);
529*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(base::Value(10), *(preference->GetValue()));
530*6777b538SAndroid Build Coastguard Worker // Removing user_pref_store value shouldn't change the pref value.
531*6777b538SAndroid Build Coastguard Worker user_pref_store_->RemoveValue(kStandaloneBrowserPref,
532*6777b538SAndroid Build Coastguard Worker WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
533*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(base::Value(10), *(preference->GetValue()));
534*6777b538SAndroid Build Coastguard Worker // Now removing the standalone_browser_pref_store value should revert the
535*6777b538SAndroid Build Coastguard Worker // value to default.
536*6777b538SAndroid Build Coastguard Worker standalone_browser_pref_store_->RemoveValue(
537*6777b538SAndroid Build Coastguard Worker kStandaloneBrowserPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
538*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(base::Value(4), *(preference->GetValue()));
539*6777b538SAndroid Build Coastguard Worker }
540