1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_PREFS_DEFAULT_PREF_STORE_H_
6#define BASE_PREFS_DEFAULT_PREF_STORE_H_
7
8#include <string>
9
10#include "base/observer_list.h"
11#include "base/prefs/base_prefs_export.h"
12#include "base/prefs/pref_store.h"
13#include "base/prefs/pref_value_map.h"
14#include "base/values.h"
15
16// Used within a PrefRegistry to keep track of default preference values.
17class BASE_PREFS_EXPORT DefaultPrefStore : public PrefStore {
18 public:
19  typedef PrefValueMap::const_iterator const_iterator;
20
21  DefaultPrefStore();
22
23  // PrefStore implementation:
24  virtual bool GetValue(const std::string& key,
25                        const base::Value** result) const OVERRIDE;
26  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
27  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
28  virtual bool HasObservers() const OVERRIDE;
29
30  // Sets a |value| for |key|. Should only be called if a value has not been
31  // set yet; otherwise call ReplaceDefaultValue().
32  void SetDefaultValue(const std::string& key, scoped_ptr<base::Value> value);
33
34  // Replaces the the value for |key| with a new value. Should only be called
35  // if a value has alreday been set; otherwise call SetDefaultValue().
36  void ReplaceDefaultValue(const std::string& key,
37                           scoped_ptr<base::Value> value);
38
39  const_iterator begin() const;
40  const_iterator end() const;
41
42 private:
43  virtual ~DefaultPrefStore();
44
45  PrefValueMap prefs_;
46
47  ObserverList<PrefStore::Observer, true> observers_;
48
49  DISALLOW_COPY_AND_ASSIGN(DefaultPrefStore);
50};
51
52#endif  // BASE_PREFS_DEFAULT_PREF_STORE_H_
53