1// Copyright 2014 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 CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
6#define CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
7
8#include <string>
9
10#include "base/compiler_specific.h"
11#include "base/macros.h"
12#include "chrome/browser/prefs/tracked/hash_store_contents.h"
13
14class PrefRegistrySimple;
15class PrefService;
16
17// Implements HashStoreContents by storing hashes in a PrefService. Multiple
18// separate hash stores may coexist in the PrefService by using distinct hash
19// store IDs.
20// TODO(erikwright): This class is only used to recreate preference state as in
21// M35, to test migration behaviour. Remove this class when
22// ProfilePrefStoreManagerTest no longer depends on it.
23class PrefServiceHashStoreContents : public HashStoreContents {
24 public:
25  // Constructs a HashStoreContents that stores hashes in |pref_service|.
26  // Multiple hash stores can use the same |pref_service| with distinct
27  // |hash_store_id|s.
28  //
29  // |pref_service| must have previously been configured using |RegisterPrefs|.
30  PrefServiceHashStoreContents(const std::string& hash_store_id,
31                               PrefService* pref_service);
32
33  // A dictionary pref which maps profile names to dictionary values which hold
34  // hashes of profile prefs that we track to detect changes that happen outside
35  // of Chrome.
36  static const char kProfilePreferenceHashes[];
37
38  // The name of a dict that is stored as a child of
39  // |prefs::kProfilePreferenceHashes|. Each child node is a string whose name
40  // is a hash store ID and whose value is the super MAC for the corresponding
41  // hash store.
42  static const char kHashOfHashesDict[];
43
44  // The name of a dict that is stored as a child of
45  // |prefs::kProfilePreferenceHashes|. Each child node is a number whose name
46  // is a hash store ID and whose value is the version of the corresponding
47  // hash store.
48  static const char kStoreVersionsDict[];
49
50  // Registers required preferences.
51  static void RegisterPrefs(PrefRegistrySimple* registry);
52
53  // Deletes stored hashes for all profiles from |pref_service|.
54  static void ResetAllPrefHashStores(PrefService* pref_service);
55
56  // HashStoreContents implementation
57  virtual std::string hash_store_id() const OVERRIDE;
58  virtual void Reset() OVERRIDE;
59  virtual bool IsInitialized() const OVERRIDE;
60  virtual const base::DictionaryValue* GetContents() const OVERRIDE;
61  virtual scoped_ptr<MutableDictionary> GetMutableContents() OVERRIDE;
62  virtual std::string GetSuperMac() const OVERRIDE;
63  virtual void SetSuperMac(const std::string& super_mac) OVERRIDE;
64
65 private:
66  const std::string hash_store_id_;
67  PrefService* pref_service_;
68
69  DISALLOW_COPY_AND_ASSIGN(PrefServiceHashStoreContents);
70};
71
72#endif  // CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
73