15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/default_pref_store.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Value;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultPrefStore::DefaultPrefStore() {}
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool DefaultPrefStore::GetValue(const std::string& key,
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                const Value** result) const {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs_.GetValue(key, result);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DefaultPrefStore::AddObserver(PrefStore::Observer* observer) {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observers_.AddObserver(observer);
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DefaultPrefStore::RemoveObserver(PrefStore::Observer* observer) {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observers_.RemoveObserver(observer);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool DefaultPrefStore::HasObservers() const {
26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return observers_.might_have_observers();
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DefaultPrefStore::SetDefaultValue(const std::string& key,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       scoped_ptr<Value> value) {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(!GetValue(key, NULL));
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs_.SetValue(key, value.release());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DefaultPrefStore::ReplaceDefaultValue(const std::string& key,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                           scoped_ptr<Value> value) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Value* old_value = NULL;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetValue(key, &old_value);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool notify = !old_value->Equals(value.get());
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  prefs_.SetValue(key, value.release());
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (notify)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultPrefStore::const_iterator DefaultPrefStore::begin() const {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs_.begin();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultPrefStore::const_iterator DefaultPrefStore::end() const {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs_.end();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultPrefStore::~DefaultPrefStore() {}
54