| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include <string> | 5 #include <string> | 
| 6 | 6 | 
| 7 #include "app/test/data/resource.h" | 7 #include "app/test/data/resource.h" | 
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" | 
| 9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" | 
| 10 #include "base/values.h" | 10 #include "base/values.h" | 
| 11 #include "chrome/browser/policy/configuration_policy_pref_store.h" | 11 #include "chrome/browser/policy/configuration_policy_pref_store.h" | 
| 12 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | 12 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | 
| 13 #include "chrome/browser/prefs/browser_prefs.h" | 13 #include "chrome/browser/prefs/browser_prefs.h" | 
| 14 #include "chrome/browser/prefs/command_line_pref_store.h" | 14 #include "chrome/browser/prefs/command_line_pref_store.h" | 
| 15 #include "chrome/browser/prefs/dummy_pref_store.h" | 15 #include "chrome/browser/prefs/testing_pref_store.h" | 
| 16 #include "chrome/browser/prefs/pref_change_registrar.h" | 16 #include "chrome/browser/prefs/pref_change_registrar.h" | 
|  | 17 #include "chrome/browser/prefs/pref_observer_mock.h" | 
| 17 #include "chrome/browser/prefs/pref_value_store.h" | 18 #include "chrome/browser/prefs/pref_value_store.h" | 
| 18 #include "chrome/common/chrome_paths.h" | 19 #include "chrome/common/chrome_paths.h" | 
| 19 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" | 
| 20 #include "chrome/common/notification_observer_mock.h" |  | 
| 21 #include "chrome/common/notification_service.h" |  | 
| 22 #include "chrome/common/notification_type.h" |  | 
| 23 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" | 
| 24 #include "chrome/test/testing_pref_service.h" | 22 #include "chrome/test/testing_pref_service.h" | 
| 25 #include "testing/gmock/include/gmock/gmock.h" | 23 #include "testing/gmock/include/gmock/gmock.h" | 
| 26 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" | 
| 27 | 25 | 
| 28 using testing::_; | 26 using testing::_; | 
| 29 using testing::Mock; | 27 using testing::Mock; | 
| 30 using testing::Pointee; |  | 
| 31 using testing::Property; |  | 
| 32 |  | 
| 33 namespace { |  | 
| 34 |  | 
| 35 class TestPrefObserver : public NotificationObserver { |  | 
| 36  public: |  | 
| 37   TestPrefObserver(const PrefService* prefs, |  | 
| 38                    const std::string& pref_name, |  | 
| 39                    const std::string& new_pref_value) |  | 
| 40       : observer_fired_(false), |  | 
| 41         prefs_(prefs), |  | 
| 42         pref_name_(pref_name), |  | 
| 43         new_pref_value_(new_pref_value) {} |  | 
| 44   virtual ~TestPrefObserver() {} |  | 
| 45 |  | 
| 46   virtual void Observe(NotificationType type, |  | 
| 47                        const NotificationSource& source, |  | 
| 48                        const NotificationDetails& details) { |  | 
| 49     EXPECT_EQ(type.value, NotificationType::PREF_CHANGED); |  | 
| 50     const PrefService* prefs_in = Source<PrefService>(source).ptr(); |  | 
| 51     EXPECT_EQ(prefs_in, prefs_); |  | 
| 52     const std::string* pref_name_in = Details<std::string>(details).ptr(); |  | 
| 53     EXPECT_EQ(*pref_name_in, pref_name_); |  | 
| 54     EXPECT_EQ(new_pref_value_, prefs_in->GetString("homepage")); |  | 
| 55     observer_fired_ = true; |  | 
| 56   } |  | 
| 57 |  | 
| 58   bool observer_fired() { return observer_fired_; } |  | 
| 59 |  | 
| 60   void Reset(const std::string& new_pref_value) { |  | 
| 61     observer_fired_ = false; |  | 
| 62     new_pref_value_ = new_pref_value; |  | 
| 63   } |  | 
| 64 |  | 
| 65  private: |  | 
| 66   bool observer_fired_; |  | 
| 67   const PrefService* prefs_; |  | 
| 68   const std::string pref_name_; |  | 
| 69   std::string new_pref_value_; |  | 
| 70 }; |  | 
| 71 |  | 
| 72 }  // namespace |  | 
| 73 | 28 | 
| 74 // TODO(port): port this test to POSIX. | 29 // TODO(port): port this test to POSIX. | 
| 75 #if defined(OS_WIN) | 30 #if defined(OS_WIN) | 
| 76 TEST(PrefServiceTest, LocalizedPrefs) { | 31 TEST(PrefServiceTest, LocalizedPrefs) { | 
| 77   TestingPrefService prefs; | 32   TestingPrefService prefs; | 
| 78   const char kBoolean[] = "boolean"; | 33   const char kBoolean[] = "boolean"; | 
| 79   const char kInteger[] = "integer"; | 34   const char kInteger[] = "integer"; | 
| 80   const char kString[] = "string"; | 35   const char kString[] = "string"; | 
| 81   prefs.RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL); | 36   prefs.RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL); | 
| 82   prefs.RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT); | 37   prefs.RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 95   EXPECT_EQ("foo", prefs.GetString(kString)); | 50   EXPECT_EQ("foo", prefs.GetString(kString)); | 
| 96 } | 51 } | 
| 97 #endif | 52 #endif | 
| 98 | 53 | 
| 99 TEST(PrefServiceTest, NoObserverFire) { | 54 TEST(PrefServiceTest, NoObserverFire) { | 
| 100   TestingPrefService prefs; | 55   TestingPrefService prefs; | 
| 101 | 56 | 
| 102   const char pref_name[] = "homepage"; | 57   const char pref_name[] = "homepage"; | 
| 103   prefs.RegisterStringPref(pref_name, std::string()); | 58   prefs.RegisterStringPref(pref_name, std::string()); | 
| 104 | 59 | 
| 105   const std::string new_pref_value("http://www.google.com/"); | 60   const char new_pref_value[] = "http://www.google.com/"; | 
| 106   TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 61   PrefObserverMock obs; | 
| 107 |  | 
| 108   PrefChangeRegistrar registrar; | 62   PrefChangeRegistrar registrar; | 
| 109   registrar.Init(&prefs); | 63   registrar.Init(&prefs); | 
| 110   registrar.Add(pref_name, &obs); | 64   registrar.Add(pref_name, &obs); | 
| 111   // This should fire the checks in TestPrefObserver::Observe. | 65 | 
|  | 66   // This should fire the checks in PrefObserverMock::Observe. | 
|  | 67   const StringValue expected_value(new_pref_value); | 
|  | 68   obs.Expect(&prefs, pref_name, &expected_value); | 
| 112   prefs.SetString(pref_name, new_pref_value); | 69   prefs.SetString(pref_name, new_pref_value); | 
| 113 | 70   Mock::VerifyAndClearExpectations(&obs); | 
| 114   // Make sure the observer was actually fired. |  | 
| 115   EXPECT_TRUE(obs.observer_fired()); |  | 
| 116 | 71 | 
| 117   // Setting the pref to the same value should not set the pref value a second | 72   // Setting the pref to the same value should not set the pref value a second | 
| 118   // time. | 73   // time. | 
| 119   obs.Reset(new_pref_value); | 74   EXPECT_CALL(obs, Observe(_, _, _)).Times(0); | 
| 120   prefs.SetString(pref_name, new_pref_value); | 75   prefs.SetString(pref_name, new_pref_value); | 
| 121   EXPECT_FALSE(obs.observer_fired()); | 76   Mock::VerifyAndClearExpectations(&obs); | 
| 122 | 77 | 
| 123   // Clearing the pref should cause the pref to fire. | 78   // Clearing the pref should cause the pref to fire. | 
| 124   obs.Reset(std::string()); | 79   const StringValue expected_default_value(""); | 
|  | 80   obs.Expect(&prefs, pref_name, &expected_default_value); | 
| 125   prefs.ClearPref(pref_name); | 81   prefs.ClearPref(pref_name); | 
| 126   EXPECT_TRUE(obs.observer_fired()); | 82   Mock::VerifyAndClearExpectations(&obs); | 
| 127 | 83 | 
| 128   // Clearing the pref again should not cause the pref to fire. | 84   // Clearing the pref again should not cause the pref to fire. | 
| 129   obs.Reset(std::string()); | 85   EXPECT_CALL(obs, Observe(_, _, _)).Times(0); | 
| 130   prefs.ClearPref(pref_name); | 86   prefs.ClearPref(pref_name); | 
| 131   EXPECT_FALSE(obs.observer_fired()); | 87   Mock::VerifyAndClearExpectations(&obs); | 
| 132 } | 88 } | 
| 133 | 89 | 
| 134 TEST(PrefServiceTest, HasPrefPath) { | 90 TEST(PrefServiceTest, HasPrefPath) { | 
| 135   TestingPrefService prefs; | 91   TestingPrefService prefs; | 
| 136 | 92 | 
| 137   const char path[] = "fake.path"; | 93   const char path[] = "fake.path"; | 
| 138 | 94 | 
| 139   // Shouldn't initially have a path. | 95   // Shouldn't initially have a path. | 
| 140   EXPECT_FALSE(prefs.HasPrefPath(path)); | 96   EXPECT_FALSE(prefs.HasPrefPath(path)); | 
| 141 | 97 | 
| 142   // Register the path. This doesn't set a value, so the path still shouldn't | 98   // Register the path. This doesn't set a value, so the path still shouldn't | 
| 143   // exist. | 99   // exist. | 
| 144   prefs.RegisterStringPref(path, std::string()); | 100   prefs.RegisterStringPref(path, std::string()); | 
| 145   EXPECT_FALSE(prefs.HasPrefPath(path)); | 101   EXPECT_FALSE(prefs.HasPrefPath(path)); | 
| 146 | 102 | 
| 147   // Set a value and make sure we have a path. | 103   // Set a value and make sure we have a path. | 
| 148   prefs.SetString(path, "blah"); | 104   prefs.SetString(path, "blah"); | 
| 149   EXPECT_TRUE(prefs.HasPrefPath(path)); | 105   EXPECT_TRUE(prefs.HasPrefPath(path)); | 
| 150 } | 106 } | 
| 151 | 107 | 
| 152 TEST(PrefServiceTest, Observers) { | 108 TEST(PrefServiceTest, Observers) { | 
| 153   const char pref_name[] = "homepage"; | 109   const char pref_name[] = "homepage"; | 
| 154 | 110 | 
| 155   TestingPrefService prefs; | 111   TestingPrefService prefs; | 
| 156   prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); | 112   prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); | 
| 157   prefs.RegisterStringPref(pref_name, std::string()); | 113   prefs.RegisterStringPref(pref_name, std::string()); | 
| 158 | 114 | 
| 159   const std::string new_pref_value("http://www.google.com/"); | 115   const char new_pref_value[] = "http://www.google.com/"; | 
| 160   TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 116   const StringValue expected_new_pref_value(new_pref_value); | 
|  | 117   PrefObserverMock obs; | 
| 161   PrefChangeRegistrar registrar; | 118   PrefChangeRegistrar registrar; | 
| 162   registrar.Init(&prefs); | 119   registrar.Init(&prefs); | 
| 163   registrar.Add(pref_name, &obs); | 120   registrar.Add(pref_name, &obs); | 
| 164   // This should fire the checks in TestPrefObserver::Observe. | 121 | 
|  | 122   // This should fire the checks in PrefObserverMock::Observe. | 
|  | 123   obs.Expect(&prefs, pref_name, &expected_new_pref_value); | 
| 165   prefs.SetString(pref_name, new_pref_value); | 124   prefs.SetString(pref_name, new_pref_value); | 
| 166 | 125   Mock::VerifyAndClearExpectations(&obs); | 
| 167   // Make sure the tests were actually run. |  | 
| 168   EXPECT_TRUE(obs.observer_fired()); |  | 
| 169 | 126 | 
| 170   // Now try adding a second pref observer. | 127   // Now try adding a second pref observer. | 
| 171   const std::string new_pref_value2("http://www.youtube.com/"); | 128   const char new_pref_value2[] = "http://www.youtube.com/"; | 
| 172   obs.Reset(new_pref_value2); | 129   const StringValue expected_new_pref_value2(new_pref_value2); | 
| 173   TestPrefObserver obs2(&prefs, pref_name, new_pref_value2); | 130   PrefObserverMock obs2; | 
|  | 131   obs.Expect(&prefs, pref_name, &expected_new_pref_value2); | 
|  | 132   obs2.Expect(&prefs, pref_name, &expected_new_pref_value2); | 
| 174   registrar.Add(pref_name, &obs2); | 133   registrar.Add(pref_name, &obs2); | 
| 175   // This should fire the checks in obs and obs2. | 134   // This should fire the checks in obs and obs2. | 
| 176   prefs.SetString(pref_name, new_pref_value2); | 135   prefs.SetString(pref_name, new_pref_value2); | 
| 177   EXPECT_TRUE(obs.observer_fired()); | 136   Mock::VerifyAndClearExpectations(&obs); | 
| 178   EXPECT_TRUE(obs2.observer_fired()); | 137   Mock::VerifyAndClearExpectations(&obs2); | 
| 179 | 138 | 
| 180   // Make sure obs2 still works after removing obs. | 139   // Make sure obs2 still works after removing obs. | 
| 181   registrar.Remove(pref_name, &obs); | 140   registrar.Remove(pref_name, &obs); | 
| 182   obs.Reset(std::string()); | 141   EXPECT_CALL(obs, Observe(_, _, _)).Times(0); | 
| 183   obs2.Reset(new_pref_value); | 142   obs2.Expect(&prefs, pref_name, &expected_new_pref_value); | 
| 184   // This should only fire the observer in obs2. | 143   // This should only fire the observer in obs2. | 
| 185   prefs.SetString(pref_name, new_pref_value); | 144   prefs.SetString(pref_name, new_pref_value); | 
| 186   EXPECT_FALSE(obs.observer_fired()); | 145   Mock::VerifyAndClearExpectations(&obs); | 
| 187   EXPECT_TRUE(obs2.observer_fired()); | 146   Mock::VerifyAndClearExpectations(&obs2); | 
| 188 } | 147 } | 
| 189 | 148 | 
| 190 TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) { | 149 TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) { | 
| 191   CommandLine command_line(CommandLine::NO_PROGRAM); | 150   CommandLine command_line(CommandLine::NO_PROGRAM); | 
| 192   command_line.AppendSwitch(switches::kProxyAutoDetect); | 151   command_line.AppendSwitch(switches::kProxyAutoDetect); | 
| 193   TestingPrefService prefs(NULL, NULL, &command_line); | 152   TestingPrefService prefs(NULL, NULL, &command_line); | 
| 194   browser::RegisterUserPrefs(&prefs); | 153   browser::RegisterUserPrefs(&prefs); | 
| 195   EXPECT_TRUE(prefs.GetBoolean(prefs::kProxyAutoDetect)); | 154   EXPECT_TRUE(prefs.GetBoolean(prefs::kProxyAutoDetect)); | 
| 196   const PrefService::Preference* pref = | 155   const PrefService::Preference* pref = | 
| 197       prefs.FindPreference(prefs::kProxyAutoDetect); | 156       prefs.FindPreference(prefs::kProxyAutoDetect); | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 333   EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyPacUrl)); | 292   EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyPacUrl)); | 
| 334   EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyBypassList)); | 293   EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyBypassList)); | 
| 335 } | 294 } | 
| 336 | 295 | 
| 337 class PrefServiceSetValueTest : public testing::Test { | 296 class PrefServiceSetValueTest : public testing::Test { | 
| 338  protected: | 297  protected: | 
| 339   static const char kName[]; | 298   static const char kName[]; | 
| 340   static const char kValue[]; | 299   static const char kValue[]; | 
| 341 | 300 | 
| 342   PrefServiceSetValueTest() | 301   PrefServiceSetValueTest() | 
| 343       : name_string_(kName), | 302       : null_value_(Value::CreateNullValue()) {} | 
| 344         null_value_(Value::CreateNullValue()) {} |  | 
| 345 |  | 
| 346   void SetExpectNoNotification() { |  | 
| 347     EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |  | 
| 348   } |  | 
| 349 |  | 
| 350   void SetExpectPrefChanged() { |  | 
| 351     EXPECT_CALL(observer_, |  | 
| 352                 Observe(NotificationType(NotificationType::PREF_CHANGED), _, |  | 
| 353                         Property(&Details<std::string>::ptr, |  | 
| 354                                  Pointee(name_string_)))); |  | 
| 355   } |  | 
| 356 | 303 | 
| 357   TestingPrefService prefs_; | 304   TestingPrefService prefs_; | 
| 358   std::string name_string_; |  | 
| 359   scoped_ptr<Value> null_value_; | 305   scoped_ptr<Value> null_value_; | 
| 360   NotificationObserverMock observer_; | 306   PrefObserverMock observer_; | 
| 361 }; | 307 }; | 
| 362 | 308 | 
| 363 const char PrefServiceSetValueTest::kName[] = "name"; | 309 const char PrefServiceSetValueTest::kName[] = "name"; | 
| 364 const char PrefServiceSetValueTest::kValue[] = "value"; | 310 const char PrefServiceSetValueTest::kValue[] = "value"; | 
| 365 | 311 | 
| 366 TEST_F(PrefServiceSetValueTest, SetStringValue) { | 312 TEST_F(PrefServiceSetValueTest, SetStringValue) { | 
| 367   const char default_string[] = "default"; | 313   const char default_string[] = "default"; | 
| 368   const scoped_ptr<Value> default_value( | 314   const StringValue default_value(default_string); | 
| 369       Value::CreateStringValue(default_string)); |  | 
| 370   prefs_.RegisterStringPref(kName, default_string); | 315   prefs_.RegisterStringPref(kName, default_string); | 
| 371 | 316 | 
| 372   PrefChangeRegistrar registrar; | 317   PrefChangeRegistrar registrar; | 
| 373   registrar.Init(&prefs_); | 318   registrar.Init(&prefs_); | 
| 374   registrar.Add(kName, &observer_); | 319   registrar.Add(kName, &observer_); | 
| 375 | 320 | 
| 376   // Changing the controlling store from default to user triggers notification. | 321   // Changing the controlling store from default to user triggers notification. | 
| 377   SetExpectPrefChanged(); | 322   observer_.Expect(&prefs_, kName, &default_value); | 
| 378   prefs_.Set(kName, *default_value); | 323   prefs_.Set(kName, default_value); | 
| 379   Mock::VerifyAndClearExpectations(&observer_); | 324   Mock::VerifyAndClearExpectations(&observer_); | 
| 380 | 325 | 
| 381   SetExpectNoNotification(); | 326   EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 
| 382   prefs_.Set(kName, *default_value); | 327   prefs_.Set(kName, default_value); | 
| 383   Mock::VerifyAndClearExpectations(&observer_); | 328   Mock::VerifyAndClearExpectations(&observer_); | 
| 384 | 329 | 
| 385   const scoped_ptr<Value> new_value(Value::CreateStringValue(kValue)); | 330   StringValue new_value(kValue); | 
| 386   SetExpectPrefChanged(); | 331   observer_.Expect(&prefs_, kName, &new_value); | 
| 387   prefs_.Set(kName, *new_value); | 332   prefs_.Set(kName, new_value); | 
| 388   EXPECT_EQ(kValue, prefs_.GetString(kName)); | 333   Mock::VerifyAndClearExpectations(&observer_); | 
| 389 } | 334 } | 
| 390 | 335 | 
| 391 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { | 336 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { | 
| 392   prefs_.RegisterDictionaryPref(kName); | 337   prefs_.RegisterDictionaryPref(kName); | 
| 393   PrefChangeRegistrar registrar; | 338   PrefChangeRegistrar registrar; | 
| 394   registrar.Init(&prefs_); | 339   registrar.Init(&prefs_); | 
| 395   registrar.Add(kName, &observer_); | 340   registrar.Add(kName, &observer_); | 
| 396 | 341 | 
| 397   // Dictionary values are special: setting one to NULL is the same as clearing | 342   // Dictionary values are special: setting one to NULL is the same as clearing | 
| 398   // the user value, allowing the NULL default to take (or keep) control. | 343   // the user value, allowing the NULL default to take (or keep) control. | 
| 399   SetExpectNoNotification(); | 344   EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 
| 400   prefs_.Set(kName, *null_value_); | 345   prefs_.Set(kName, *null_value_); | 
| 401   Mock::VerifyAndClearExpectations(&observer_); | 346   Mock::VerifyAndClearExpectations(&observer_); | 
| 402 | 347 | 
| 403   DictionaryValue new_value; | 348   DictionaryValue new_value; | 
| 404   new_value.SetString(kName, kValue); | 349   new_value.SetString(kName, kValue); | 
| 405   SetExpectPrefChanged(); | 350   observer_.Expect(&prefs_, kName, &new_value); | 
| 406   prefs_.Set(kName, new_value); |  | 
| 407   Mock::VerifyAndClearExpectations(&observer_); |  | 
| 408   DictionaryValue* dict = prefs_.GetMutableDictionary(kName); |  | 
| 409   EXPECT_EQ(1U, dict->size()); |  | 
| 410   std::string out_value; |  | 
| 411   dict->GetString(kName, &out_value); |  | 
| 412   EXPECT_EQ(kValue, out_value); |  | 
| 413 |  | 
| 414   SetExpectNoNotification(); |  | 
| 415   prefs_.Set(kName, new_value); | 351   prefs_.Set(kName, new_value); | 
| 416   Mock::VerifyAndClearExpectations(&observer_); | 352   Mock::VerifyAndClearExpectations(&observer_); | 
| 417 | 353 | 
| 418   SetExpectPrefChanged(); | 354   EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 
|  | 355   prefs_.Set(kName, new_value); | 
|  | 356   Mock::VerifyAndClearExpectations(&observer_); | 
|  | 357 | 
|  | 358   observer_.Expect(&prefs_, kName, null_value_.get()); | 
| 419   prefs_.Set(kName, *null_value_); | 359   prefs_.Set(kName, *null_value_); | 
| 420   Mock::VerifyAndClearExpectations(&observer_); | 360   Mock::VerifyAndClearExpectations(&observer_); | 
| 421   dict = prefs_.GetMutableDictionary(kName); |  | 
| 422   EXPECT_EQ(0U, dict->size()); |  | 
| 423 } | 361 } | 
| 424 | 362 | 
| 425 TEST_F(PrefServiceSetValueTest, SetListValue) { | 363 TEST_F(PrefServiceSetValueTest, SetListValue) { | 
| 426   prefs_.RegisterListPref(kName); | 364   prefs_.RegisterListPref(kName); | 
| 427   PrefChangeRegistrar registrar; | 365   PrefChangeRegistrar registrar; | 
| 428   registrar.Init(&prefs_); | 366   registrar.Init(&prefs_); | 
| 429   registrar.Add(kName, &observer_); | 367   registrar.Add(kName, &observer_); | 
| 430 | 368 | 
| 431   // List values are special: setting one to NULL is the same as clearing the | 369   // List values are special: setting one to NULL is the same as clearing the | 
| 432   // user value, allowing the NULL default to take (or keep) control. | 370   // user value, allowing the NULL default to take (or keep) control. | 
| 433   SetExpectNoNotification(); | 371   EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 
| 434   prefs_.Set(kName, *null_value_); | 372   prefs_.Set(kName, *null_value_); | 
| 435   Mock::VerifyAndClearExpectations(&observer_); | 373   Mock::VerifyAndClearExpectations(&observer_); | 
| 436 | 374 | 
| 437   ListValue new_value; | 375   ListValue new_value; | 
| 438   new_value.Append(Value::CreateStringValue(kValue)); | 376   new_value.Append(Value::CreateStringValue(kValue)); | 
| 439   SetExpectPrefChanged(); | 377   observer_.Expect(&prefs_, kName, &new_value); | 
| 440   prefs_.Set(kName, new_value); |  | 
| 441   Mock::VerifyAndClearExpectations(&observer_); |  | 
| 442   const ListValue* list = prefs_.GetMutableList(kName); |  | 
| 443   ASSERT_EQ(1U, list->GetSize()); |  | 
| 444   std::string out_value; |  | 
| 445   list->GetString(0, &out_value); |  | 
| 446   EXPECT_EQ(kValue, out_value); |  | 
| 447 |  | 
| 448   SetExpectNoNotification(); |  | 
| 449   prefs_.Set(kName, new_value); | 378   prefs_.Set(kName, new_value); | 
| 450   Mock::VerifyAndClearExpectations(&observer_); | 379   Mock::VerifyAndClearExpectations(&observer_); | 
| 451 | 380 | 
| 452   SetExpectPrefChanged(); | 381   EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 
|  | 382   prefs_.Set(kName, new_value); | 
|  | 383   Mock::VerifyAndClearExpectations(&observer_); | 
|  | 384 | 
|  | 385   observer_.Expect(&prefs_, kName, null_value_.get()); | 
| 453   prefs_.Set(kName, *null_value_); | 386   prefs_.Set(kName, *null_value_); | 
| 454   Mock::VerifyAndClearExpectations(&observer_); | 387   Mock::VerifyAndClearExpectations(&observer_); | 
| 455   list = prefs_.GetMutableList(kName); |  | 
| 456   EXPECT_EQ(0U, list->GetSize()); |  | 
| 457 } | 388 } | 
| OLD | NEW | 
|---|