| Index: chrome/browser/prefs/pref_service_unittest.cc
 | 
| diff --git a/chrome/browser/prefs/pref_service_unittest.cc b/chrome/browser/prefs/pref_service_unittest.cc
 | 
| index 7fc46082e4aba560d96da5e0b8c5a1eeb523b9ef..6575bdf3907a611ed4c5b9bbc8afd6c3a3d2b81a 100644
 | 
| --- a/chrome/browser/prefs/pref_service_unittest.cc
 | 
| +++ b/chrome/browser/prefs/pref_service_unittest.cc
 | 
| @@ -12,14 +12,12 @@
 | 
|  #include "chrome/browser/policy/mock_configuration_policy_provider.h"
 | 
|  #include "chrome/browser/prefs/browser_prefs.h"
 | 
|  #include "chrome/browser/prefs/command_line_pref_store.h"
 | 
| -#include "chrome/browser/prefs/dummy_pref_store.h"
 | 
| +#include "chrome/browser/prefs/testing_pref_store.h"
 | 
|  #include "chrome/browser/prefs/pref_change_registrar.h"
 | 
| +#include "chrome/browser/prefs/pref_observer_mock.h"
 | 
|  #include "chrome/browser/prefs/pref_value_store.h"
 | 
|  #include "chrome/common/chrome_paths.h"
 | 
|  #include "chrome/common/chrome_switches.h"
 | 
| -#include "chrome/common/notification_observer_mock.h"
 | 
| -#include "chrome/common/notification_service.h"
 | 
| -#include "chrome/common/notification_type.h"
 | 
|  #include "chrome/common/pref_names.h"
 | 
|  #include "chrome/test/testing_pref_service.h"
 | 
|  #include "testing/gmock/include/gmock/gmock.h"
 | 
| @@ -27,49 +25,6 @@
 | 
|  
 | 
|  using testing::_;
 | 
|  using testing::Mock;
 | 
| -using testing::Pointee;
 | 
| -using testing::Property;
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -class TestPrefObserver : public NotificationObserver {
 | 
| - public:
 | 
| -  TestPrefObserver(const PrefService* prefs,
 | 
| -                   const std::string& pref_name,
 | 
| -                   const std::string& new_pref_value)
 | 
| -      : observer_fired_(false),
 | 
| -        prefs_(prefs),
 | 
| -        pref_name_(pref_name),
 | 
| -        new_pref_value_(new_pref_value) {}
 | 
| -  virtual ~TestPrefObserver() {}
 | 
| -
 | 
| -  virtual void Observe(NotificationType type,
 | 
| -                       const NotificationSource& source,
 | 
| -                       const NotificationDetails& details) {
 | 
| -    EXPECT_EQ(type.value, NotificationType::PREF_CHANGED);
 | 
| -    const PrefService* prefs_in = Source<PrefService>(source).ptr();
 | 
| -    EXPECT_EQ(prefs_in, prefs_);
 | 
| -    const std::string* pref_name_in = Details<std::string>(details).ptr();
 | 
| -    EXPECT_EQ(*pref_name_in, pref_name_);
 | 
| -    EXPECT_EQ(new_pref_value_, prefs_in->GetString("homepage"));
 | 
| -    observer_fired_ = true;
 | 
| -  }
 | 
| -
 | 
| -  bool observer_fired() { return observer_fired_; }
 | 
| -
 | 
| -  void Reset(const std::string& new_pref_value) {
 | 
| -    observer_fired_ = false;
 | 
| -    new_pref_value_ = new_pref_value;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  bool observer_fired_;
 | 
| -  const PrefService* prefs_;
 | 
| -  const std::string pref_name_;
 | 
| -  std::string new_pref_value_;
 | 
| -};
 | 
| -
 | 
| -}  // namespace
 | 
|  
 | 
|  // TODO(port): port this test to POSIX.
 | 
|  #if defined(OS_WIN)
 | 
| @@ -102,33 +57,34 @@ TEST(PrefServiceTest, NoObserverFire) {
 | 
|    const char pref_name[] = "homepage";
 | 
|    prefs.RegisterStringPref(pref_name, std::string());
 | 
|  
 | 
| -  const std::string new_pref_value("http://www.google.com/");
 | 
| -  TestPrefObserver obs(&prefs, pref_name, new_pref_value);
 | 
| -
 | 
| +  const char new_pref_value[] = "http://www.google.com/";
 | 
| +  PrefObserverMock obs;
 | 
|    PrefChangeRegistrar registrar;
 | 
|    registrar.Init(&prefs);
 | 
|    registrar.Add(pref_name, &obs);
 | 
| -  // This should fire the checks in TestPrefObserver::Observe.
 | 
| -  prefs.SetString(pref_name, new_pref_value);
 | 
|  
 | 
| -  // Make sure the observer was actually fired.
 | 
| -  EXPECT_TRUE(obs.observer_fired());
 | 
| +  // This should fire the checks in PrefObserverMock::Observe.
 | 
| +  const StringValue expected_value(new_pref_value);
 | 
| +  obs.Expect(&prefs, pref_name, &expected_value);
 | 
| +  prefs.SetString(pref_name, new_pref_value);
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
|  
 | 
|    // Setting the pref to the same value should not set the pref value a second
 | 
|    // time.
 | 
| -  obs.Reset(new_pref_value);
 | 
| +  EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
 | 
|    prefs.SetString(pref_name, new_pref_value);
 | 
| -  EXPECT_FALSE(obs.observer_fired());
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
|  
 | 
|    // Clearing the pref should cause the pref to fire.
 | 
| -  obs.Reset(std::string());
 | 
| +  const StringValue expected_default_value("");
 | 
| +  obs.Expect(&prefs, pref_name, &expected_default_value);
 | 
|    prefs.ClearPref(pref_name);
 | 
| -  EXPECT_TRUE(obs.observer_fired());
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
|  
 | 
|    // Clearing the pref again should not cause the pref to fire.
 | 
| -  obs.Reset(std::string());
 | 
| +  EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
 | 
|    prefs.ClearPref(pref_name);
 | 
| -  EXPECT_FALSE(obs.observer_fired());
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
|  }
 | 
|  
 | 
|  TEST(PrefServiceTest, HasPrefPath) {
 | 
| @@ -156,35 +112,38 @@ TEST(PrefServiceTest, Observers) {
 | 
|    prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com"));
 | 
|    prefs.RegisterStringPref(pref_name, std::string());
 | 
|  
 | 
| -  const std::string new_pref_value("http://www.google.com/");
 | 
| -  TestPrefObserver obs(&prefs, pref_name, new_pref_value);
 | 
| +  const char new_pref_value[] = "http://www.google.com/";
 | 
| +  const StringValue expected_new_pref_value(new_pref_value);
 | 
| +  PrefObserverMock obs;
 | 
|    PrefChangeRegistrar registrar;
 | 
|    registrar.Init(&prefs);
 | 
|    registrar.Add(pref_name, &obs);
 | 
| -  // This should fire the checks in TestPrefObserver::Observe.
 | 
| -  prefs.SetString(pref_name, new_pref_value);
 | 
|  
 | 
| -  // Make sure the tests were actually run.
 | 
| -  EXPECT_TRUE(obs.observer_fired());
 | 
| +  // This should fire the checks in PrefObserverMock::Observe.
 | 
| +  obs.Expect(&prefs, pref_name, &expected_new_pref_value);
 | 
| +  prefs.SetString(pref_name, new_pref_value);
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
|  
 | 
|    // Now try adding a second pref observer.
 | 
| -  const std::string new_pref_value2("http://www.youtube.com/");
 | 
| -  obs.Reset(new_pref_value2);
 | 
| -  TestPrefObserver obs2(&prefs, pref_name, new_pref_value2);
 | 
| +  const char new_pref_value2[] = "http://www.youtube.com/";
 | 
| +  const StringValue expected_new_pref_value2(new_pref_value2);
 | 
| +  PrefObserverMock obs2;
 | 
| +  obs.Expect(&prefs, pref_name, &expected_new_pref_value2);
 | 
| +  obs2.Expect(&prefs, pref_name, &expected_new_pref_value2);
 | 
|    registrar.Add(pref_name, &obs2);
 | 
|    // This should fire the checks in obs and obs2.
 | 
|    prefs.SetString(pref_name, new_pref_value2);
 | 
| -  EXPECT_TRUE(obs.observer_fired());
 | 
| -  EXPECT_TRUE(obs2.observer_fired());
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
| +  Mock::VerifyAndClearExpectations(&obs2);
 | 
|  
 | 
|    // Make sure obs2 still works after removing obs.
 | 
|    registrar.Remove(pref_name, &obs);
 | 
| -  obs.Reset(std::string());
 | 
| -  obs2.Reset(new_pref_value);
 | 
| +  EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
 | 
| +  obs2.Expect(&prefs, pref_name, &expected_new_pref_value);
 | 
|    // This should only fire the observer in obs2.
 | 
|    prefs.SetString(pref_name, new_pref_value);
 | 
| -  EXPECT_FALSE(obs.observer_fired());
 | 
| -  EXPECT_TRUE(obs2.observer_fired());
 | 
| +  Mock::VerifyAndClearExpectations(&obs);
 | 
| +  Mock::VerifyAndClearExpectations(&obs2);
 | 
|  }
 | 
|  
 | 
|  TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) {
 | 
| @@ -340,24 +299,11 @@ class PrefServiceSetValueTest : public testing::Test {
 | 
|    static const char kValue[];
 | 
|  
 | 
|    PrefServiceSetValueTest()
 | 
| -      : name_string_(kName),
 | 
| -        null_value_(Value::CreateNullValue()) {}
 | 
| -
 | 
| -  void SetExpectNoNotification() {
 | 
| -    EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
| -  }
 | 
| -
 | 
| -  void SetExpectPrefChanged() {
 | 
| -    EXPECT_CALL(observer_,
 | 
| -                Observe(NotificationType(NotificationType::PREF_CHANGED), _,
 | 
| -                        Property(&Details<std::string>::ptr,
 | 
| -                                 Pointee(name_string_))));
 | 
| -  }
 | 
| +      : null_value_(Value::CreateNullValue()) {}
 | 
|  
 | 
|    TestingPrefService prefs_;
 | 
| -  std::string name_string_;
 | 
|    scoped_ptr<Value> null_value_;
 | 
| -  NotificationObserverMock observer_;
 | 
| +  PrefObserverMock observer_;
 | 
|  };
 | 
|  
 | 
|  const char PrefServiceSetValueTest::kName[] = "name";
 | 
| @@ -365,8 +311,7 @@ const char PrefServiceSetValueTest::kValue[] = "value";
 | 
|  
 | 
|  TEST_F(PrefServiceSetValueTest, SetStringValue) {
 | 
|    const char default_string[] = "default";
 | 
| -  const scoped_ptr<Value> default_value(
 | 
| -      Value::CreateStringValue(default_string));
 | 
| +  const StringValue default_value(default_string);
 | 
|    prefs_.RegisterStringPref(kName, default_string);
 | 
|  
 | 
|    PrefChangeRegistrar registrar;
 | 
| @@ -374,18 +319,18 @@ TEST_F(PrefServiceSetValueTest, SetStringValue) {
 | 
|    registrar.Add(kName, &observer_);
 | 
|  
 | 
|    // Changing the controlling store from default to user triggers notification.
 | 
| -  SetExpectPrefChanged();
 | 
| -  prefs_.Set(kName, *default_value);
 | 
| +  observer_.Expect(&prefs_, kName, &default_value);
 | 
| +  prefs_.Set(kName, default_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
| -  SetExpectNoNotification();
 | 
| -  prefs_.Set(kName, *default_value);
 | 
| +  EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
| +  prefs_.Set(kName, default_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
| -  const scoped_ptr<Value> new_value(Value::CreateStringValue(kValue));
 | 
| -  SetExpectPrefChanged();
 | 
| -  prefs_.Set(kName, *new_value);
 | 
| -  EXPECT_EQ(kValue, prefs_.GetString(kName));
 | 
| +  StringValue new_value(kValue);
 | 
| +  observer_.Expect(&prefs_, kName, &new_value);
 | 
| +  prefs_.Set(kName, new_value);
 | 
| +  Mock::VerifyAndClearExpectations(&observer_);
 | 
|  }
 | 
|  
 | 
|  TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
 | 
| @@ -396,30 +341,23 @@ TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
 | 
|  
 | 
|    // Dictionary values are special: setting one to NULL is the same as clearing
 | 
|    // the user value, allowing the NULL default to take (or keep) control.
 | 
| -  SetExpectNoNotification();
 | 
| +  EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
|    prefs_.Set(kName, *null_value_);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
|    DictionaryValue new_value;
 | 
|    new_value.SetString(kName, kValue);
 | 
| -  SetExpectPrefChanged();
 | 
| +  observer_.Expect(&prefs_, kName, &new_value);
 | 
|    prefs_.Set(kName, new_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
| -  DictionaryValue* dict = prefs_.GetMutableDictionary(kName);
 | 
| -  EXPECT_EQ(1U, dict->size());
 | 
| -  std::string out_value;
 | 
| -  dict->GetString(kName, &out_value);
 | 
| -  EXPECT_EQ(kValue, out_value);
 | 
|  
 | 
| -  SetExpectNoNotification();
 | 
| +  EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
|    prefs_.Set(kName, new_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
| -  SetExpectPrefChanged();
 | 
| +  observer_.Expect(&prefs_, kName, null_value_.get());
 | 
|    prefs_.Set(kName, *null_value_);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
| -  dict = prefs_.GetMutableDictionary(kName);
 | 
| -  EXPECT_EQ(0U, dict->size());
 | 
|  }
 | 
|  
 | 
|  TEST_F(PrefServiceSetValueTest, SetListValue) {
 | 
| @@ -430,28 +368,21 @@ TEST_F(PrefServiceSetValueTest, SetListValue) {
 | 
|  
 | 
|    // List values are special: setting one to NULL is the same as clearing the
 | 
|    // user value, allowing the NULL default to take (or keep) control.
 | 
| -  SetExpectNoNotification();
 | 
| +  EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
|    prefs_.Set(kName, *null_value_);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
|    ListValue new_value;
 | 
|    new_value.Append(Value::CreateStringValue(kValue));
 | 
| -  SetExpectPrefChanged();
 | 
| +  observer_.Expect(&prefs_, kName, &new_value);
 | 
|    prefs_.Set(kName, new_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
| -  const ListValue* list = prefs_.GetMutableList(kName);
 | 
| -  ASSERT_EQ(1U, list->GetSize());
 | 
| -  std::string out_value;
 | 
| -  list->GetString(0, &out_value);
 | 
| -  EXPECT_EQ(kValue, out_value);
 | 
|  
 | 
| -  SetExpectNoNotification();
 | 
| +  EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
 | 
|    prefs_.Set(kName, new_value);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
|  
 | 
| -  SetExpectPrefChanged();
 | 
| +  observer_.Expect(&prefs_, kName, null_value_.get());
 | 
|    prefs_.Set(kName, *null_value_);
 | 
|    Mock::VerifyAndClearExpectations(&observer_);
 | 
| -  list = prefs_.GetMutableList(kName);
 | 
| -  EXPECT_EQ(0U, list->GetSize());
 | 
|  }
 | 
| 
 |