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