123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <string>
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/compiler_specific.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/macros.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/prefs/tracked/hash_store_contents.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class PrefRegistrySimple;
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class PrefService;
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Implements HashStoreContents by storing hashes in a PrefService. Multiple
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// separate hash stores may coexist in the PrefService by using distinct hash
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// store IDs.
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(erikwright): This class is only used to recreate preference state as in
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// M35, to test migration behaviour. Remove this class when
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// ProfilePrefStoreManagerTest no longer depends on it.
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class PrefServiceHashStoreContents : public HashStoreContents {
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Constructs a HashStoreContents that stores hashes in |pref_service|.
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Multiple hash stores can use the same |pref_service| with distinct
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |hash_store_id|s.
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  //
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |pref_service| must have previously been configured using |RegisterPrefs|.
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrefServiceHashStoreContents(const std::string& hash_store_id,
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                               PrefService* pref_service);
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // A dictionary pref which maps profile names to dictionary values which hold
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // hashes of profile prefs that we track to detect changes that happen outside
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // of Chrome.
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static const char kProfilePreferenceHashes[];
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // The name of a dict that is stored as a child of
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |prefs::kProfilePreferenceHashes|. Each child node is a string whose name
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // is a hash store ID and whose value is the super MAC for the corresponding
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // hash store.
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  static const char kHashOfHashesDict[];
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // The name of a dict that is stored as a child of
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |prefs::kProfilePreferenceHashes|. Each child node is a number whose name
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // is a hash store ID and whose value is the version of the corresponding
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // hash store.
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  static const char kStoreVersionsDict[];
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Registers required preferences.
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  static void RegisterPrefs(PrefRegistrySimple* registry);
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Deletes stored hashes for all profiles from |pref_service|.
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  static void ResetAllPrefHashStores(PrefService* pref_service);
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // HashStoreContents implementation
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual std::string hash_store_id() const OVERRIDE;
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void Reset() OVERRIDE;
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual bool IsInitialized() const OVERRIDE;
6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual const base::DictionaryValue* GetContents() const OVERRIDE;
6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual scoped_ptr<MutableDictionary> GetMutableContents() OVERRIDE;
6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual std::string GetSuperMac() const OVERRIDE;
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void SetSuperMac(const std::string& super_mac) OVERRIDE;
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private:
6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const std::string hash_store_id_;
6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrefService* pref_service_;
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PrefServiceHashStoreContents);
7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // CHROME_BROWSER_PREFS_TRACKED_PREF_SERVICE_HASH_STORE_CONTENTS_H_
73