Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: chrome/browser/prefs/pref_service_unittest.cc

Issue 5441002: Clean up pref change notification handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/default_pref_store.h" 15 #include "chrome/browser/prefs/default_pref_store.h"
16 #include "chrome/browser/prefs/dummy_pref_store.h" 16 #include "chrome/browser/prefs/testing_pref_store.h"
17 #include "chrome/browser/prefs/pref_change_registrar.h" 17 #include "chrome/browser/prefs/pref_change_registrar.h"
18 #include "chrome/browser/prefs/pref_value_store.h" 18 #include "chrome/browser/prefs/pref_value_store.h"
19 #include "chrome/common/chrome_paths.h" 19 #include "chrome/common/chrome_paths.h"
20 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
21 #include "chrome/common/notification_observer_mock.h" 21 #include "chrome/common/notification_details.h"
22 #include "chrome/common/notification_service.h" 22 #include "chrome/common/notification_observer.h"
23 #include "chrome/common/notification_source.h"
23 #include "chrome/common/notification_type.h" 24 #include "chrome/common/notification_type.h"
24 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
25 #include "chrome/test/testing_pref_service.h" 26 #include "chrome/test/testing_pref_service.h"
26 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
28 29
29 using testing::_; 30 using testing::_;
31 using testing::AllOf;
30 using testing::Mock; 32 using testing::Mock;
31 using testing::Pointee; 33 using testing::Pointee;
32 using testing::Property; 34 using testing::Property;
35 using testing::Truly;
33 36
34 namespace { 37 namespace {
35 38
39 MATCHER_P3(PrefValueMatches, prefs, pref_name, value, "") {
danno 2010/12/02 10:31:52 Add comment please.
Mattias Nissler (ping if slow) 2010/12/02 16:38:24 Done.
40 const PrefService::Preference* pref =
41 prefs->FindPreference(pref_name.c_str());
42 if (!pref)
43 return false;
44
45 const Value* actual_value = pref->GetValue();
46 if (!actual_value)
47 return value == NULL;
48 if (!value)
49 return actual_value == NULL;
50 return value->Equals(actual_value);
51 }
52
36 class TestPrefObserver : public NotificationObserver { 53 class TestPrefObserver : public NotificationObserver {
37 public: 54 public:
38 TestPrefObserver(const PrefService* prefs, 55 TestPrefObserver() {}
39 const std::string& pref_name,
40 const std::string& new_pref_value)
41 : observer_fired_(false),
42 prefs_(prefs),
43 pref_name_(pref_name),
44 new_pref_value_(new_pref_value) {}
45 virtual ~TestPrefObserver() {} 56 virtual ~TestPrefObserver() {}
46 57
47 virtual void Observe(NotificationType type, 58 MOCK_METHOD3(Observe, void(NotificationType type,
48 const NotificationSource& source, 59 const NotificationSource& source,
49 const NotificationDetails& details) { 60 const NotificationDetails& details));
50 EXPECT_EQ(type.value, NotificationType::PREF_CHANGED); 61
51 const PrefService* prefs_in = Source<PrefService>(source).ptr(); 62 void Expect(const PrefService* prefs,
52 EXPECT_EQ(prefs_in, prefs_); 63 const std::string& pref_name,
53 const std::string* pref_name_in = Details<std::string>(details).ptr(); 64 const Value* value) {
54 EXPECT_EQ(*pref_name_in, pref_name_); 65 EXPECT_CALL(*this, Observe(NotificationType(NotificationType::PREF_CHANGED),
55 EXPECT_EQ(new_pref_value_, prefs_in->GetString("homepage")); 66 Source<PrefService>(prefs),
56 observer_fired_ = true; 67 Property(&Details<std::string>::ptr,
68 Pointee(pref_name))))
69 .With(PrefValueMatches(prefs, pref_name, value));
57 } 70 }
58
59 bool observer_fired() { return observer_fired_; }
60
61 void Reset(const std::string& new_pref_value) {
62 observer_fired_ = false;
63 new_pref_value_ = new_pref_value;
64 }
65
66 private:
67 bool observer_fired_;
68 const PrefService* prefs_;
69 const std::string pref_name_;
70 std::string new_pref_value_;
71 }; 71 };
72 72
73 } // namespace 73 } // namespace
74 74
75 // TODO(port): port this test to POSIX. 75 // TODO(port): port this test to POSIX.
76 #if defined(OS_WIN) 76 #if defined(OS_WIN)
77 TEST(PrefServiceTest, LocalizedPrefs) { 77 TEST(PrefServiceTest, LocalizedPrefs) {
78 TestingPrefService prefs; 78 TestingPrefService prefs;
79 const char kBoolean[] = "boolean"; 79 const char kBoolean[] = "boolean";
80 const char kInteger[] = "integer"; 80 const char kInteger[] = "integer";
(...skipping 15 matching lines...) Expand all
96 EXPECT_EQ("foo", prefs.GetString(kString)); 96 EXPECT_EQ("foo", prefs.GetString(kString));
97 } 97 }
98 #endif 98 #endif
99 99
100 TEST(PrefServiceTest, NoObserverFire) { 100 TEST(PrefServiceTest, NoObserverFire) {
101 TestingPrefService prefs; 101 TestingPrefService prefs;
102 102
103 const char pref_name[] = "homepage"; 103 const char pref_name[] = "homepage";
104 prefs.RegisterStringPref(pref_name, std::string()); 104 prefs.RegisterStringPref(pref_name, std::string());
105 105
106 const std::string new_pref_value("http://www.google.com/"); 106 const char new_pref_value[] = "http://www.google.com/";
107 TestPrefObserver obs(&prefs, pref_name, new_pref_value); 107 TestPrefObserver obs;
108
109 PrefChangeRegistrar registrar; 108 PrefChangeRegistrar registrar;
110 registrar.Init(&prefs); 109 registrar.Init(&prefs);
111 registrar.Add(pref_name, &obs); 110 registrar.Add(pref_name, &obs);
111
112 // This should fire the checks in TestPrefObserver::Observe. 112 // This should fire the checks in TestPrefObserver::Observe.
113 StringValue expected_value(new_pref_value);
114 obs.Expect(&prefs, pref_name, &expected_value);
113 prefs.SetString(pref_name, new_pref_value); 115 prefs.SetString(pref_name, new_pref_value);
114 116 Mock::VerifyAndClearExpectations(&obs);
115 // Make sure the observer was actually fired.
116 EXPECT_TRUE(obs.observer_fired());
117 117
118 // Setting the pref to the same value should not set the pref value a second 118 // Setting the pref to the same value should not set the pref value a second
119 // time. 119 // time.
120 obs.Reset(new_pref_value); 120 EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
121 prefs.SetString(pref_name, new_pref_value); 121 prefs.SetString(pref_name, new_pref_value);
122 EXPECT_FALSE(obs.observer_fired()); 122 Mock::VerifyAndClearExpectations(&obs);
123 123
124 // Clearing the pref should cause the pref to fire. 124 // Clearing the pref should cause the pref to fire.
125 obs.Reset(std::string()); 125 StringValue expected_default_value("");
126 obs.Expect(&prefs, pref_name, &expected_default_value);
126 prefs.ClearPref(pref_name); 127 prefs.ClearPref(pref_name);
127 EXPECT_TRUE(obs.observer_fired()); 128 Mock::VerifyAndClearExpectations(&obs);
128 129
129 // Clearing the pref again should not cause the pref to fire. 130 // Clearing the pref again should not cause the pref to fire.
130 obs.Reset(std::string()); 131 EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
131 prefs.ClearPref(pref_name); 132 prefs.ClearPref(pref_name);
132 EXPECT_FALSE(obs.observer_fired()); 133 Mock::VerifyAndClearExpectations(&obs);
133 } 134 }
134 135
135 TEST(PrefServiceTest, HasPrefPath) { 136 TEST(PrefServiceTest, HasPrefPath) {
136 TestingPrefService prefs; 137 TestingPrefService prefs;
137 138
138 const char path[] = "fake.path"; 139 const char path[] = "fake.path";
139 140
140 // Shouldn't initially have a path. 141 // Shouldn't initially have a path.
141 EXPECT_FALSE(prefs.HasPrefPath(path)); 142 EXPECT_FALSE(prefs.HasPrefPath(path));
142 143
143 // Register the path. This doesn't set a value, so the path still shouldn't 144 // Register the path. This doesn't set a value, so the path still shouldn't
144 // exist. 145 // exist.
145 prefs.RegisterStringPref(path, std::string()); 146 prefs.RegisterStringPref(path, std::string());
146 EXPECT_FALSE(prefs.HasPrefPath(path)); 147 EXPECT_FALSE(prefs.HasPrefPath(path));
147 148
148 // Set a value and make sure we have a path. 149 // Set a value and make sure we have a path.
149 prefs.SetString(path, "blah"); 150 prefs.SetString(path, "blah");
150 EXPECT_TRUE(prefs.HasPrefPath(path)); 151 EXPECT_TRUE(prefs.HasPrefPath(path));
151 } 152 }
152 153
153 TEST(PrefServiceTest, Observers) { 154 TEST(PrefServiceTest, Observers) {
154 const char pref_name[] = "homepage"; 155 const char pref_name[] = "homepage";
155 156
156 TestingPrefService prefs; 157 TestingPrefService prefs;
157 prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); 158 prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com"));
158 prefs.RegisterStringPref(pref_name, std::string()); 159 prefs.RegisterStringPref(pref_name, std::string());
159 160
160 const std::string new_pref_value("http://www.google.com/"); 161 const char new_pref_value[] = "http://www.google.com/";
161 TestPrefObserver obs(&prefs, pref_name, new_pref_value); 162 StringValue expected_new_pref_value(new_pref_value);
163 TestPrefObserver obs;
162 PrefChangeRegistrar registrar; 164 PrefChangeRegistrar registrar;
163 registrar.Init(&prefs); 165 registrar.Init(&prefs);
164 registrar.Add(pref_name, &obs); 166 registrar.Add(pref_name, &obs);
167
165 // This should fire the checks in TestPrefObserver::Observe. 168 // This should fire the checks in TestPrefObserver::Observe.
169 obs.Expect(&prefs, pref_name, &expected_new_pref_value);
166 prefs.SetString(pref_name, new_pref_value); 170 prefs.SetString(pref_name, new_pref_value);
167 171 Mock::VerifyAndClearExpectations(&obs);
168 // Make sure the tests were actually run.
169 EXPECT_TRUE(obs.observer_fired());
170 172
171 // Now try adding a second pref observer. 173 // Now try adding a second pref observer.
172 const std::string new_pref_value2("http://www.youtube.com/"); 174 const char new_pref_value2[] = "http://www.youtube.com/";
173 obs.Reset(new_pref_value2); 175 StringValue expected_new_pref_value2(new_pref_value2);
174 TestPrefObserver obs2(&prefs, pref_name, new_pref_value2); 176 TestPrefObserver obs2;
177 obs.Expect(&prefs, pref_name, &expected_new_pref_value2);
178 obs2.Expect(&prefs, pref_name, &expected_new_pref_value2);
175 registrar.Add(pref_name, &obs2); 179 registrar.Add(pref_name, &obs2);
176 // This should fire the checks in obs and obs2. 180 // This should fire the checks in obs and obs2.
177 prefs.SetString(pref_name, new_pref_value2); 181 prefs.SetString(pref_name, new_pref_value2);
178 EXPECT_TRUE(obs.observer_fired()); 182 Mock::VerifyAndClearExpectations(&obs);
179 EXPECT_TRUE(obs2.observer_fired()); 183 Mock::VerifyAndClearExpectations(&obs2);
180 184
181 // Make sure obs2 still works after removing obs. 185 // Make sure obs2 still works after removing obs.
182 registrar.Remove(pref_name, &obs); 186 registrar.Remove(pref_name, &obs);
183 obs.Reset(std::string()); 187 EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
184 obs2.Reset(new_pref_value); 188 obs2.Expect(&prefs, pref_name, &expected_new_pref_value);
185 // This should only fire the observer in obs2. 189 // This should only fire the observer in obs2.
186 prefs.SetString(pref_name, new_pref_value); 190 prefs.SetString(pref_name, new_pref_value);
187 EXPECT_FALSE(obs.observer_fired()); 191 Mock::VerifyAndClearExpectations(&obs);
188 EXPECT_TRUE(obs2.observer_fired()); 192 Mock::VerifyAndClearExpectations(&obs2);
189 } 193 }
190 194
191 TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) { 195 TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) {
192 CommandLine command_line(CommandLine::NO_PROGRAM); 196 CommandLine command_line(CommandLine::NO_PROGRAM);
193 command_line.AppendSwitch(switches::kProxyAutoDetect); 197 command_line.AppendSwitch(switches::kProxyAutoDetect);
194 TestingPrefService prefs(NULL, NULL, &command_line); 198 TestingPrefService prefs(NULL, NULL, &command_line);
195 browser::RegisterUserPrefs(&prefs); 199 browser::RegisterUserPrefs(&prefs);
196 EXPECT_TRUE(prefs.GetBoolean(prefs::kProxyAutoDetect)); 200 EXPECT_TRUE(prefs.GetBoolean(prefs::kProxyAutoDetect));
197 const PrefService::Preference* pref = 201 const PrefService::Preference* pref =
198 prefs.FindPreference(prefs::kProxyAutoDetect); 202 prefs.FindPreference(prefs::kProxyAutoDetect);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyPacUrl)); 338 EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyPacUrl));
335 EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyBypassList)); 339 EXPECT_EQ(std::string(), prefs2.GetString(prefs::kProxyBypassList));
336 } 340 }
337 341
338 class PrefServiceSetValueTest : public testing::Test { 342 class PrefServiceSetValueTest : public testing::Test {
339 protected: 343 protected:
340 static const char kName[]; 344 static const char kName[];
341 static const char kValue[]; 345 static const char kValue[];
342 346
343 PrefServiceSetValueTest() 347 PrefServiceSetValueTest()
344 : name_string_(kName), 348 : null_value_(Value::CreateNullValue()) {}
345 null_value_(Value::CreateNullValue()) {}
346
347 void SetExpectNoNotification() {
348 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
349 }
350
351 void SetExpectPrefChanged() {
352 EXPECT_CALL(observer_,
353 Observe(NotificationType(NotificationType::PREF_CHANGED), _,
354 Property(&Details<std::string>::ptr,
355 Pointee(name_string_))));
356 }
357 349
358 TestingPrefService prefs_; 350 TestingPrefService prefs_;
359 std::string name_string_;
360 scoped_ptr<Value> null_value_; 351 scoped_ptr<Value> null_value_;
361 NotificationObserverMock observer_; 352 TestPrefObserver observer_;
362 }; 353 };
363 354
364 const char PrefServiceSetValueTest::kName[] = "name"; 355 const char PrefServiceSetValueTest::kName[] = "name";
365 const char PrefServiceSetValueTest::kValue[] = "value"; 356 const char PrefServiceSetValueTest::kValue[] = "value";
366 357
367 TEST_F(PrefServiceSetValueTest, SetStringValue) { 358 TEST_F(PrefServiceSetValueTest, SetStringValue) {
368 const char default_string[] = "default"; 359 const char default_string[] = "default";
369 const scoped_ptr<Value> default_value( 360 StringValue default_value(default_string);
370 Value::CreateStringValue(default_string));
371 prefs_.RegisterStringPref(kName, default_string); 361 prefs_.RegisterStringPref(kName, default_string);
372 362
373 PrefChangeRegistrar registrar; 363 PrefChangeRegistrar registrar;
374 registrar.Init(&prefs_); 364 registrar.Init(&prefs_);
375 registrar.Add(kName, &observer_); 365 registrar.Add(kName, &observer_);
376 366
377 // Changing the controlling store from default to user triggers notification. 367 // Changing the controlling store from default to user triggers notification.
378 SetExpectPrefChanged(); 368 observer_.Expect(&prefs_, kName, &default_value);
379 prefs_.Set(kName, *default_value); 369 prefs_.Set(kName, default_value);
380 Mock::VerifyAndClearExpectations(&observer_); 370 Mock::VerifyAndClearExpectations(&observer_);
381 371
382 SetExpectNoNotification(); 372 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
383 prefs_.Set(kName, *default_value); 373 prefs_.Set(kName, default_value);
384 Mock::VerifyAndClearExpectations(&observer_); 374 Mock::VerifyAndClearExpectations(&observer_);
385 375
386 const scoped_ptr<Value> new_value(Value::CreateStringValue(kValue)); 376 StringValue new_value(kValue);
387 SetExpectPrefChanged(); 377 observer_.Expect(&prefs_, kName, &new_value);
388 prefs_.Set(kName, *new_value); 378 prefs_.Set(kName, new_value);
389 EXPECT_EQ(kValue, prefs_.GetString(kName)); 379 Mock::VerifyAndClearExpectations(&observer_);
390 } 380 }
391 381
392 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { 382 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
393 prefs_.RegisterDictionaryPref(kName); 383 prefs_.RegisterDictionaryPref(kName);
394 PrefChangeRegistrar registrar; 384 PrefChangeRegistrar registrar;
395 registrar.Init(&prefs_); 385 registrar.Init(&prefs_);
396 registrar.Add(kName, &observer_); 386 registrar.Add(kName, &observer_);
397 387
398 // Dictionary values are special: setting one to NULL is the same as clearing 388 // Dictionary values are special: setting one to NULL is the same as clearing
399 // the user value, allowing the NULL default to take (or keep) control. 389 // the user value, allowing the NULL default to take (or keep) control.
400 SetExpectNoNotification(); 390 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
401 prefs_.Set(kName, *null_value_); 391 prefs_.Set(kName, *null_value_);
402 Mock::VerifyAndClearExpectations(&observer_); 392 Mock::VerifyAndClearExpectations(&observer_);
403 393
404 DictionaryValue new_value; 394 DictionaryValue new_value;
405 new_value.SetString(kName, kValue); 395 new_value.SetString(kName, kValue);
406 SetExpectPrefChanged(); 396 observer_.Expect(&prefs_, kName, &new_value);
407 prefs_.Set(kName, new_value);
408 Mock::VerifyAndClearExpectations(&observer_);
409 DictionaryValue* dict = prefs_.GetMutableDictionary(kName);
410 EXPECT_EQ(1U, dict->size());
411 std::string out_value;
412 dict->GetString(kName, &out_value);
413 EXPECT_EQ(kValue, out_value);
414
415 SetExpectNoNotification();
416 prefs_.Set(kName, new_value); 397 prefs_.Set(kName, new_value);
417 Mock::VerifyAndClearExpectations(&observer_); 398 Mock::VerifyAndClearExpectations(&observer_);
418 399
419 SetExpectPrefChanged(); 400 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
401 prefs_.Set(kName, new_value);
402 Mock::VerifyAndClearExpectations(&observer_);
403
404 observer_.Expect(&prefs_, kName, null_value_.get());
420 prefs_.Set(kName, *null_value_); 405 prefs_.Set(kName, *null_value_);
421 Mock::VerifyAndClearExpectations(&observer_); 406 Mock::VerifyAndClearExpectations(&observer_);
422 dict = prefs_.GetMutableDictionary(kName);
423 EXPECT_EQ(0U, dict->size());
424 } 407 }
425 408
426 TEST_F(PrefServiceSetValueTest, SetListValue) { 409 TEST_F(PrefServiceSetValueTest, SetListValue) {
427 prefs_.RegisterListPref(kName); 410 prefs_.RegisterListPref(kName);
428 PrefChangeRegistrar registrar; 411 PrefChangeRegistrar registrar;
429 registrar.Init(&prefs_); 412 registrar.Init(&prefs_);
430 registrar.Add(kName, &observer_); 413 registrar.Add(kName, &observer_);
431 414
432 // List values are special: setting one to NULL is the same as clearing the 415 // List values are special: setting one to NULL is the same as clearing the
433 // user value, allowing the NULL default to take (or keep) control. 416 // user value, allowing the NULL default to take (or keep) control.
434 SetExpectNoNotification(); 417 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
435 prefs_.Set(kName, *null_value_); 418 prefs_.Set(kName, *null_value_);
436 Mock::VerifyAndClearExpectations(&observer_); 419 Mock::VerifyAndClearExpectations(&observer_);
437 420
438 ListValue new_value; 421 ListValue new_value;
439 new_value.Append(Value::CreateStringValue(kValue)); 422 new_value.Append(Value::CreateStringValue(kValue));
440 SetExpectPrefChanged(); 423 observer_.Expect(&prefs_, kName, &new_value);
441 prefs_.Set(kName, new_value);
442 Mock::VerifyAndClearExpectations(&observer_);
443 const ListValue* list = prefs_.GetMutableList(kName);
444 ASSERT_EQ(1U, list->GetSize());
445 std::string out_value;
446 list->GetString(0, &out_value);
447 EXPECT_EQ(kValue, out_value);
448
449 SetExpectNoNotification();
450 prefs_.Set(kName, new_value); 424 prefs_.Set(kName, new_value);
451 Mock::VerifyAndClearExpectations(&observer_); 425 Mock::VerifyAndClearExpectations(&observer_);
452 426
453 SetExpectPrefChanged(); 427 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
428 prefs_.Set(kName, new_value);
429 Mock::VerifyAndClearExpectations(&observer_);
430
431 observer_.Expect(&prefs_, kName, null_value_.get());
454 prefs_.Set(kName, *null_value_); 432 prefs_.Set(kName, *null_value_);
455 Mock::VerifyAndClearExpectations(&observer_); 433 Mock::VerifyAndClearExpectations(&observer_);
456 list = prefs_.GetMutableList(kName);
457 EXPECT_EQ(0U, list->GetSize());
458 } 434 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698