blob: 77ecd199fc9c88ad4f4dd594f2b754d6bf8995e7 [file] [log] [blame]
[email protected]d3b05ea2012-01-24 22:57:051// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
avi9ef8bb02015-12-24 05:29:365#include <stddef.h>
6#include <stdint.h>
7
[email protected]ecde2742010-04-02 17:36:188#include <string>
9
avi9ef8bb02015-12-24 05:29:3610#include "base/macros.h"
[email protected]ecde2742010-04-02 17:36:1811#include "base/values.h"
brettwf00b9b42016-02-01 22:11:3812#include "components/prefs/json_pref_store.h"
13#include "components/prefs/mock_pref_change_callback.h"
14#include "components/prefs/pref_change_registrar.h"
15#include "components/prefs/pref_registry_simple.h"
16#include "components/prefs/pref_service_factory.h"
17#include "components/prefs/pref_value_store.h"
18#include "components/prefs/testing_pref_service.h"
19#include "components/prefs/testing_pref_store.h"
[email protected]ecde2742010-04-02 17:36:1820#include "testing/gmock/include/gmock/gmock.h"
initial.commit09911bf2008-07-26 23:55:2921#include "testing/gtest/include/gtest/gtest.h"
22
[email protected]ecde2742010-04-02 17:36:1823using testing::_;
24using testing::Mock;
[email protected]12a3c022010-11-03 10:24:1125
[email protected]aaa552312013-02-13 16:25:4026const char kPrefName[] = "pref.name";
27
[email protected]277404c22010-04-22 13:09:4528TEST(PrefServiceTest, NoObserverFire) {
[email protected]5b199522012-12-22 17:24:4429 TestingPrefServiceSimple prefs;
[email protected]7aa0a962010-04-21 17:24:4230
[email protected]57ecc4b2010-08-11 03:02:5131 const char pref_name[] = "homepage";
[email protected]b1de2c72013-02-06 02:45:4732 prefs.registry()->RegisterStringPref(pref_name, std::string());
[email protected]7aa0a962010-04-21 17:24:4233
[email protected]acd78969c2010-12-08 09:49:1134 const char new_pref_value[] = "http://www.google.com/";
[email protected]96a5c342012-12-04 18:14:0235 MockPrefChangeCallback obs(&prefs);
[email protected]2fb7dc982010-09-29 12:24:2836 PrefChangeRegistrar registrar;
37 registrar.Init(&prefs);
[email protected]96a5c342012-12-04 18:14:0238 registrar.Add(pref_name, obs.GetCallback());
[email protected]7aa0a962010-04-21 17:24:4239
[email protected]96a5c342012-12-04 18:14:0240 // This should fire the checks in MockPrefChangeCallback::OnPreferenceChanged.
[email protected]a43a667b2013-06-14 17:56:0841 const base::StringValue expected_value(new_pref_value);
[email protected]96a5c342012-12-04 18:14:0242 obs.Expect(pref_name, &expected_value);
[email protected]acd78969c2010-12-08 09:49:1143 prefs.SetString(pref_name, new_pref_value);
44 Mock::VerifyAndClearExpectations(&obs);
[email protected]7aa0a962010-04-21 17:24:4245
46 // Setting the pref to the same value should not set the pref value a second
47 // time.
[email protected]96a5c342012-12-04 18:14:0248 EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
[email protected]7aa0a962010-04-21 17:24:4249 prefs.SetString(pref_name, new_pref_value);
[email protected]acd78969c2010-12-08 09:49:1150 Mock::VerifyAndClearExpectations(&obs);
[email protected]7aa0a962010-04-21 17:24:4251
52 // Clearing the pref should cause the pref to fire.
[email protected]a43a667b2013-06-14 17:56:0853 const base::StringValue expected_default_value((std::string()));
[email protected]96a5c342012-12-04 18:14:0254 obs.Expect(pref_name, &expected_default_value);
[email protected]7aa0a962010-04-21 17:24:4255 prefs.ClearPref(pref_name);
[email protected]acd78969c2010-12-08 09:49:1156 Mock::VerifyAndClearExpectations(&obs);
[email protected]7aa0a962010-04-21 17:24:4257
58 // Clearing the pref again should not cause the pref to fire.
[email protected]96a5c342012-12-04 18:14:0259 EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
[email protected]7aa0a962010-04-21 17:24:4260 prefs.ClearPref(pref_name);
[email protected]acd78969c2010-12-08 09:49:1161 Mock::VerifyAndClearExpectations(&obs);
[email protected]7aa0a962010-04-21 17:24:4262}
63
[email protected]277404c22010-04-22 13:09:4564TEST(PrefServiceTest, HasPrefPath) {
[email protected]5b199522012-12-22 17:24:4465 TestingPrefServiceSimple prefs;
[email protected]7aa0a962010-04-21 17:24:4266
[email protected]57ecc4b2010-08-11 03:02:5167 const char path[] = "fake.path";
[email protected]7aa0a962010-04-21 17:24:4268
69 // Shouldn't initially have a path.
70 EXPECT_FALSE(prefs.HasPrefPath(path));
71
72 // Register the path. This doesn't set a value, so the path still shouldn't
73 // exist.
[email protected]b1de2c72013-02-06 02:45:4774 prefs.registry()->RegisterStringPref(path, std::string());
[email protected]7aa0a962010-04-21 17:24:4275 EXPECT_FALSE(prefs.HasPrefPath(path));
76
77 // Set a value and make sure we have a path.
[email protected]ddd231e2010-06-29 20:35:1978 prefs.SetString(path, "blah");
[email protected]7aa0a962010-04-21 17:24:4279 EXPECT_TRUE(prefs.HasPrefPath(path));
80}
81
[email protected]277404c22010-04-22 13:09:4582TEST(PrefServiceTest, Observers) {
[email protected]57ecc4b2010-08-11 03:02:5183 const char pref_name[] = "homepage";
[email protected]277404c22010-04-22 13:09:4584
[email protected]5b199522012-12-22 17:24:4485 TestingPrefServiceSimple prefs;
[email protected]a43a667b2013-06-14 17:56:0886 prefs.SetUserPref(pref_name,
[email protected]b54e6252014-01-30 10:32:4187 new base::StringValue("http://www.cnn.com"));
[email protected]b1de2c72013-02-06 02:45:4788 prefs.registry()->RegisterStringPref(pref_name, std::string());
[email protected]277404c22010-04-22 13:09:4589
[email protected]acd78969c2010-12-08 09:49:1190 const char new_pref_value[] = "http://www.google.com/";
[email protected]a43a667b2013-06-14 17:56:0891 const base::StringValue expected_new_pref_value(new_pref_value);
[email protected]96a5c342012-12-04 18:14:0292 MockPrefChangeCallback obs(&prefs);
[email protected]2fb7dc982010-09-29 12:24:2893 PrefChangeRegistrar registrar;
94 registrar.Init(&prefs);
[email protected]96a5c342012-12-04 18:14:0295 registrar.Add(pref_name, obs.GetCallback());
[email protected]277404c22010-04-22 13:09:4596
[email protected]54ffd94a2012-11-12 15:29:2097 PrefChangeRegistrar registrar_two;
98 registrar_two.Init(&prefs);
99
[email protected]96a5c342012-12-04 18:14:02100 // This should fire the checks in MockPrefChangeCallback::OnPreferenceChanged.
101 obs.Expect(pref_name, &expected_new_pref_value);
[email protected]acd78969c2010-12-08 09:49:11102 prefs.SetString(pref_name, new_pref_value);
103 Mock::VerifyAndClearExpectations(&obs);
[email protected]277404c22010-04-22 13:09:45104
105 // Now try adding a second pref observer.
[email protected]acd78969c2010-12-08 09:49:11106 const char new_pref_value2[] = "http://www.youtube.com/";
[email protected]a43a667b2013-06-14 17:56:08107 const base::StringValue expected_new_pref_value2(new_pref_value2);
[email protected]96a5c342012-12-04 18:14:02108 MockPrefChangeCallback obs2(&prefs);
109 obs.Expect(pref_name, &expected_new_pref_value2);
110 obs2.Expect(pref_name, &expected_new_pref_value2);
111 registrar_two.Add(pref_name, obs2.GetCallback());
[email protected]277404c22010-04-22 13:09:45112 // This should fire the checks in obs and obs2.
113 prefs.SetString(pref_name, new_pref_value2);
[email protected]acd78969c2010-12-08 09:49:11114 Mock::VerifyAndClearExpectations(&obs);
115 Mock::VerifyAndClearExpectations(&obs2);
[email protected]277404c22010-04-22 13:09:45116
[email protected]7ca0f362012-07-30 10:14:03117 // Set a recommended value.
[email protected]a43a667b2013-06-14 17:56:08118 const base::StringValue recommended_pref_value("http://www.gmail.com/");
[email protected]96a5c342012-12-04 18:14:02119 obs.Expect(pref_name, &expected_new_pref_value2);
120 obs2.Expect(pref_name, &expected_new_pref_value2);
[email protected]7ca0f362012-07-30 10:14:03121 // This should fire the checks in obs and obs2 but with an unchanged value
122 // as the recommended value is being overridden by the user-set value.
123 prefs.SetRecommendedPref(pref_name, recommended_pref_value.DeepCopy());
124 Mock::VerifyAndClearExpectations(&obs);
125 Mock::VerifyAndClearExpectations(&obs2);
126
[email protected]277404c22010-04-22 13:09:45127 // Make sure obs2 still works after removing obs.
[email protected]54ffd94a2012-11-12 15:29:20128 registrar.Remove(pref_name);
[email protected]96a5c342012-12-04 18:14:02129 EXPECT_CALL(obs, OnPreferenceChanged(_)).Times(0);
130 obs2.Expect(pref_name, &expected_new_pref_value);
[email protected]277404c22010-04-22 13:09:45131 // This should only fire the observer in obs2.
132 prefs.SetString(pref_name, new_pref_value);
[email protected]acd78969c2010-12-08 09:49:11133 Mock::VerifyAndClearExpectations(&obs);
134 Mock::VerifyAndClearExpectations(&obs2);
[email protected]277404c22010-04-22 13:09:45135}
136
[email protected]9a8c4022011-01-25 14:25:33137// Make sure that if a preference changes type, so the wrong type is stored in
138// the user pref file, it uses the correct fallback value instead.
139TEST(PrefServiceTest, GetValueChangedType) {
140 const int kTestValue = 10;
[email protected]5b199522012-12-22 17:24:44141 TestingPrefServiceSimple prefs;
[email protected]aaa552312013-02-13 16:25:40142 prefs.registry()->RegisterIntegerPref(kPrefName, kTestValue);
[email protected]9a8c4022011-01-25 14:25:33143
144 // Check falling back to a recommended value.
[email protected]a43a667b2013-06-14 17:56:08145 prefs.SetUserPref(kPrefName,
[email protected]b54e6252014-01-30 10:32:41146 new base::StringValue("not an integer"));
[email protected]aaa552312013-02-13 16:25:40147 const PrefService::Preference* pref = prefs.FindPreference(kPrefName);
[email protected]9a8c4022011-01-25 14:25:33148 ASSERT_TRUE(pref);
[email protected]a43a667b2013-06-14 17:56:08149 const base::Value* value = pref->GetValue();
[email protected]9a8c4022011-01-25 14:25:33150 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08151 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]9a8c4022011-01-25 14:25:33152 int actual_int_value = -1;
153 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
154 EXPECT_EQ(kTestValue, actual_int_value);
155}
156
[email protected]7ca0f362012-07-30 10:14:03157TEST(PrefServiceTest, GetValueAndGetRecommendedValue) {
158 const int kDefaultValue = 5;
159 const int kUserValue = 10;
160 const int kRecommendedValue = 15;
[email protected]5b199522012-12-22 17:24:44161 TestingPrefServiceSimple prefs;
[email protected]aaa552312013-02-13 16:25:40162 prefs.registry()->RegisterIntegerPref(kPrefName, kDefaultValue);
[email protected]7ca0f362012-07-30 10:14:03163
164 // Create pref with a default value only.
[email protected]aaa552312013-02-13 16:25:40165 const PrefService::Preference* pref = prefs.FindPreference(kPrefName);
[email protected]7ca0f362012-07-30 10:14:03166 ASSERT_TRUE(pref);
167
168 // Check that GetValue() returns the default value.
[email protected]a43a667b2013-06-14 17:56:08169 const base::Value* value = pref->GetValue();
[email protected]7ca0f362012-07-30 10:14:03170 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08171 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03172 int actual_int_value = -1;
173 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
174 EXPECT_EQ(kDefaultValue, actual_int_value);
175
176 // Check that GetRecommendedValue() returns no value.
177 value = pref->GetRecommendedValue();
178 ASSERT_FALSE(value);
179
180 // Set a user-set value.
[email protected]b54e6252014-01-30 10:32:41181 prefs.SetUserPref(kPrefName, new base::FundamentalValue(kUserValue));
[email protected]7ca0f362012-07-30 10:14:03182
183 // Check that GetValue() returns the user-set value.
184 value = pref->GetValue();
185 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08186 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03187 actual_int_value = -1;
188 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
189 EXPECT_EQ(kUserValue, actual_int_value);
190
191 // Check that GetRecommendedValue() returns no value.
192 value = pref->GetRecommendedValue();
193 ASSERT_FALSE(value);
194
195 // Set a recommended value.
[email protected]aaa552312013-02-13 16:25:40196 prefs.SetRecommendedPref(kPrefName,
[email protected]b54e6252014-01-30 10:32:41197 new base::FundamentalValue(kRecommendedValue));
[email protected]7ca0f362012-07-30 10:14:03198
199 // Check that GetValue() returns the user-set value.
200 value = pref->GetValue();
201 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08202 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03203 actual_int_value = -1;
204 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
205 EXPECT_EQ(kUserValue, actual_int_value);
206
207 // Check that GetRecommendedValue() returns the recommended value.
208 value = pref->GetRecommendedValue();
209 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08210 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03211 actual_int_value = -1;
212 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
213 EXPECT_EQ(kRecommendedValue, actual_int_value);
214
215 // Remove the user-set value.
[email protected]aaa552312013-02-13 16:25:40216 prefs.RemoveUserPref(kPrefName);
[email protected]7ca0f362012-07-30 10:14:03217
218 // Check that GetValue() returns the recommended value.
219 value = pref->GetValue();
220 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08221 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03222 actual_int_value = -1;
223 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
224 EXPECT_EQ(kRecommendedValue, actual_int_value);
225
226 // Check that GetRecommendedValue() returns the recommended value.
227 value = pref->GetRecommendedValue();
228 ASSERT_TRUE(value);
[email protected]a43a667b2013-06-14 17:56:08229 EXPECT_EQ(base::Value::TYPE_INTEGER, value->GetType());
[email protected]7ca0f362012-07-30 10:14:03230 actual_int_value = -1;
231 EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
232 EXPECT_EQ(kRecommendedValue, actual_int_value);
233}
234
raymesf3a929b02015-05-07 03:54:45235// A PrefStore which just stores the last write flags that were used to write
236// values to it.
237class WriteFlagChecker : public TestingPrefStore {
238 public:
239 WriteFlagChecker() {}
240
avi9ef8bb02015-12-24 05:29:36241 void ReportValueChanged(const std::string& key, uint32_t flags) override {
raymesf3a929b02015-05-07 03:54:45242 SetLastWriteFlags(flags);
243 }
244
245 void SetValue(const std::string& key,
estade0bd407f2015-06-26 18:16:18246 scoped_ptr<base::Value> value,
avi9ef8bb02015-12-24 05:29:36247 uint32_t flags) override {
raymesf3a929b02015-05-07 03:54:45248 SetLastWriteFlags(flags);
raymesf3a929b02015-05-07 03:54:45249 }
250
251 void SetValueSilently(const std::string& key,
estade0bd407f2015-06-26 18:16:18252 scoped_ptr<base::Value> value,
avi9ef8bb02015-12-24 05:29:36253 uint32_t flags) override {
raymesf3a929b02015-05-07 03:54:45254 SetLastWriteFlags(flags);
raymesf3a929b02015-05-07 03:54:45255 }
256
avi9ef8bb02015-12-24 05:29:36257 void RemoveValue(const std::string& key, uint32_t flags) override {
raymesf3a929b02015-05-07 03:54:45258 SetLastWriteFlags(flags);
259 }
260
avi9ef8bb02015-12-24 05:29:36261 uint32_t GetLastFlagsAndClear() {
raymesf3a929b02015-05-07 03:54:45262 CHECK(last_write_flags_set_);
avi9ef8bb02015-12-24 05:29:36263 uint32_t result = last_write_flags_;
raymesf3a929b02015-05-07 03:54:45264 last_write_flags_set_ = false;
265 last_write_flags_ = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS;
266 return result;
267 }
268
269 bool last_write_flags_set() { return last_write_flags_set_; }
270
271 private:
272 ~WriteFlagChecker() override {}
273
avi9ef8bb02015-12-24 05:29:36274 void SetLastWriteFlags(uint32_t flags) {
raymesf3a929b02015-05-07 03:54:45275 CHECK(!last_write_flags_set_);
276 last_write_flags_set_ = true;
277 last_write_flags_ = flags;
278 }
279
280 bool last_write_flags_set_ = false;
avi9ef8bb02015-12-24 05:29:36281 uint32_t last_write_flags_ = WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS;
raymesf3a929b02015-05-07 03:54:45282};
283
284TEST(PrefServiceTest, WriteablePrefStoreFlags) {
285 scoped_refptr<WriteFlagChecker> flag_checker(new WriteFlagChecker);
286 scoped_refptr<PrefRegistrySimple> registry(new PrefRegistrySimple);
brettw066508682016-02-03 08:22:02287 PrefServiceFactory factory;
raymesf3a929b02015-05-07 03:54:45288 factory.set_user_prefs(flag_checker);
289 scoped_ptr<PrefService> prefs(factory.Create(registry.get()));
290
291 // The first 8 bits of write flags are reserved for subclasses. Create a
292 // custom flag in this range
avi9ef8bb02015-12-24 05:29:36293 uint32_t kCustomRegistrationFlag = 1 << 2;
raymesf3a929b02015-05-07 03:54:45294
295 // A map of the registration flags that will be tested and the write flags
296 // they are expected to convert to.
297 struct RegistrationToWriteFlags {
298 const char* pref_name;
avi9ef8bb02015-12-24 05:29:36299 uint32_t registration_flags;
300 uint32_t write_flags;
raymesf3a929b02015-05-07 03:54:45301 };
302 const RegistrationToWriteFlags kRegistrationToWriteFlags[] = {
303 {"none",
304 PrefRegistry::NO_REGISTRATION_FLAGS,
305 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS},
306 {"lossy",
307 PrefRegistry::LOSSY_PREF,
308 WriteablePrefStore::LOSSY_PREF_WRITE_FLAG},
309 {"custom",
310 kCustomRegistrationFlag,
311 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS},
312 {"lossyandcustom",
313 PrefRegistry::LOSSY_PREF | kCustomRegistrationFlag,
314 WriteablePrefStore::LOSSY_PREF_WRITE_FLAG}};
315
316 for (size_t i = 0; i < arraysize(kRegistrationToWriteFlags); ++i) {
317 RegistrationToWriteFlags entry = kRegistrationToWriteFlags[i];
318 registry->RegisterDictionaryPref(
319 entry.pref_name, new base::DictionaryValue(), entry.registration_flags);
320
321 SCOPED_TRACE("Currently testing pref with name: " +
322 std::string(entry.pref_name));
323
324 prefs->GetMutableUserPref(entry.pref_name, base::Value::TYPE_DICTIONARY);
325 EXPECT_TRUE(flag_checker->last_write_flags_set());
326 EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
327
328 prefs->ReportUserPrefChanged(entry.pref_name);
329 EXPECT_TRUE(flag_checker->last_write_flags_set());
330 EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
331
332 prefs->ClearPref(entry.pref_name);
333 EXPECT_TRUE(flag_checker->last_write_flags_set());
334 EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
335
336 prefs->SetUserPrefValue(entry.pref_name, new base::DictionaryValue());
337 EXPECT_TRUE(flag_checker->last_write_flags_set());
338 EXPECT_EQ(entry.write_flags, flag_checker->GetLastFlagsAndClear());
339 }
340}
341
[email protected]ecde2742010-04-02 17:36:18342class PrefServiceSetValueTest : public testing::Test {
343 protected:
[email protected]12a3c022010-11-03 10:24:11344 static const char kName[];
345 static const char kValue[];
[email protected]ecde2742010-04-02 17:36:18346
[email protected]96a5c342012-12-04 18:14:02347 PrefServiceSetValueTest() : observer_(&prefs_) {}
348
[email protected]5b199522012-12-22 17:24:44349 TestingPrefServiceSimple prefs_;
[email protected]96a5c342012-12-04 18:14:02350 MockPrefChangeCallback observer_;
[email protected]ecde2742010-04-02 17:36:18351};
[email protected]ddd231e2010-06-29 20:35:19352
[email protected]12a3c022010-11-03 10:24:11353const char PrefServiceSetValueTest::kName[] = "name";
354const char PrefServiceSetValueTest::kValue[] = "value";
[email protected]ecde2742010-04-02 17:36:18355
356TEST_F(PrefServiceSetValueTest, SetStringValue) {
[email protected]20ce516d2010-06-18 02:20:04357 const char default_string[] = "default";
[email protected]a43a667b2013-06-14 17:56:08358 const base::StringValue default_value(default_string);
[email protected]b1de2c72013-02-06 02:45:47359 prefs_.registry()->RegisterStringPref(kName, default_string);
[email protected]2fb7dc982010-09-29 12:24:28360
361 PrefChangeRegistrar registrar;
362 registrar.Init(&prefs_);
[email protected]96a5c342012-12-04 18:14:02363 registrar.Add(kName, observer_.GetCallback());
[email protected]2fb7dc982010-09-29 12:24:28364
[email protected]c3b54f372010-09-14 08:25:07365 // Changing the controlling store from default to user triggers notification.
[email protected]96a5c342012-12-04 18:14:02366 observer_.Expect(kName, &default_value);
[email protected]acd78969c2010-12-08 09:49:11367 prefs_.Set(kName, default_value);
[email protected]c3b54f372010-09-14 08:25:07368 Mock::VerifyAndClearExpectations(&observer_);
369
[email protected]96a5c342012-12-04 18:14:02370 EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
[email protected]acd78969c2010-12-08 09:49:11371 prefs_.Set(kName, default_value);
[email protected]ecde2742010-04-02 17:36:18372 Mock::VerifyAndClearExpectations(&observer_);
373
[email protected]a43a667b2013-06-14 17:56:08374 base::StringValue new_value(kValue);
[email protected]96a5c342012-12-04 18:14:02375 observer_.Expect(kName, &new_value);
[email protected]acd78969c2010-12-08 09:49:11376 prefs_.Set(kName, new_value);
377 Mock::VerifyAndClearExpectations(&observer_);
[email protected]ecde2742010-04-02 17:36:18378}
379
380TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
[email protected]b1de2c72013-02-06 02:45:47381 prefs_.registry()->RegisterDictionaryPref(kName);
[email protected]2fb7dc982010-09-29 12:24:28382 PrefChangeRegistrar registrar;
383 registrar.Init(&prefs_);
[email protected]96a5c342012-12-04 18:14:02384 registrar.Add(kName, observer_.GetCallback());
[email protected]ecde2742010-04-02 17:36:18385
[email protected]96a5c342012-12-04 18:14:02386 EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
[email protected]9a8c4022011-01-25 14:25:33387 prefs_.RemoveUserPref(kName);
[email protected]ecde2742010-04-02 17:36:18388 Mock::VerifyAndClearExpectations(&observer_);
389
[email protected]a43a667b2013-06-14 17:56:08390 base::DictionaryValue new_value;
[email protected]12a3c022010-11-03 10:24:11391 new_value.SetString(kName, kValue);
[email protected]96a5c342012-12-04 18:14:02392 observer_.Expect(kName, &new_value);
[email protected]12a3c022010-11-03 10:24:11393 prefs_.Set(kName, new_value);
[email protected]ecde2742010-04-02 17:36:18394 Mock::VerifyAndClearExpectations(&observer_);
395
[email protected]96a5c342012-12-04 18:14:02396 EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
[email protected]acd78969c2010-12-08 09:49:11397 prefs_.Set(kName, new_value);
398 Mock::VerifyAndClearExpectations(&observer_);
399
[email protected]a43a667b2013-06-14 17:56:08400 base::DictionaryValue empty;
[email protected]96a5c342012-12-04 18:14:02401 observer_.Expect(kName, &empty);
[email protected]9a8c4022011-01-25 14:25:33402 prefs_.Set(kName, empty);
[email protected]ecde2742010-04-02 17:36:18403 Mock::VerifyAndClearExpectations(&observer_);
[email protected]ecde2742010-04-02 17:36:18404}
405
406TEST_F(PrefServiceSetValueTest, SetListValue) {
[email protected]b1de2c72013-02-06 02:45:47407 prefs_.registry()->RegisterListPref(kName);
[email protected]2fb7dc982010-09-29 12:24:28408 PrefChangeRegistrar registrar;
409 registrar.Init(&prefs_);
[email protected]96a5c342012-12-04 18:14:02410 registrar.Add(kName, observer_.GetCallback());
[email protected]ecde2742010-04-02 17:36:18411
[email protected]96a5c342012-12-04 18:14:02412 EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
[email protected]9a8c4022011-01-25 14:25:33413 prefs_.RemoveUserPref(kName);
[email protected]ecde2742010-04-02 17:36:18414 Mock::VerifyAndClearExpectations(&observer_);
415
[email protected]a43a667b2013-06-14 17:56:08416 base::ListValue new_value;
[email protected]b54e6252014-01-30 10:32:41417 new_value.Append(new base::StringValue(kValue));
[email protected]96a5c342012-12-04 18:14:02418 observer_.Expect(kName, &new_value);
[email protected]12a3c022010-11-03 10:24:11419 prefs_.Set(kName, new_value);
[email protected]ecde2742010-04-02 17:36:18420 Mock::VerifyAndClearExpectations(&observer_);
421
[email protected]96a5c342012-12-04 18:14:02422 EXPECT_CALL(observer_, OnPreferenceChanged(_)).Times(0);
[email protected]acd78969c2010-12-08 09:49:11423 prefs_.Set(kName, new_value);
424 Mock::VerifyAndClearExpectations(&observer_);
425
[email protected]a43a667b2013-06-14 17:56:08426 base::ListValue empty;
[email protected]96a5c342012-12-04 18:14:02427 observer_.Expect(kName, &empty);
[email protected]9a8c4022011-01-25 14:25:33428 prefs_.Set(kName, empty);
[email protected]ecde2742010-04-02 17:36:18429 Mock::VerifyAndClearExpectations(&observer_);
[email protected]ecde2742010-04-02 17:36:18430}