// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/prefs/mock_pref_change_callback.h"

#include "base/bind.h"

MockPrefChangeCallback::MockPrefChangeCallback(PrefService* prefs)
    : prefs_(prefs) {}

MockPrefChangeCallback::~MockPrefChangeCallback() {}

PrefChangeRegistrar::NamedChangeCallback MockPrefChangeCallback::GetCallback() {
  return base::Bind(&MockPrefChangeCallback::OnPreferenceChanged,
                    base::Unretained(this));
}

void MockPrefChangeCallback::Expect(const std::string& pref_name,
                                    const base::Value* value) {
  EXPECT_CALL(*this, OnPreferenceChanged(pref_name))
      .With(PrefValueMatches(prefs_, pref_name, value));
}
