1// Copyright 2013 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_PREF_HASH_STORE_IMPL_H_ 6#define CHROME_BROWSER_PREFS_PREF_HASH_STORE_IMPL_H_ 7 8#include <string> 9 10#include "base/compiler_specific.h" 11#include "base/macros.h" 12#include "base/memory/scoped_ptr.h" 13#include "chrome/browser/prefs/pref_hash_calculator.h" 14#include "chrome/browser/prefs/pref_hash_store.h" 15 16class HashStoreContents; 17class PrefHashStoreTransaction; 18 19// Implements PrefHashStoreImpl by storing preference hashes in a 20// HashStoreContents. 21class PrefHashStoreImpl : public PrefHashStore { 22 public: 23 enum StoreVersion { 24 // No hashes have been stored in this PrefHashStore yet. 25 VERSION_UNINITIALIZED = 0, 26 // The hashes in this PrefHashStore were stored before the introduction 27 // of a version number and should be re-initialized. 28 VERSION_PRE_MIGRATION = 1, 29 // The hashes in this PrefHashStore were stored using the latest algorithm. 30 VERSION_LATEST = 2, 31 }; 32 33 // Constructs a PrefHashStoreImpl that calculates hashes using 34 // |seed| and |device_id| and stores them in |contents|. 35 // 36 // The same |seed| and |device_id| must be used to load and validate 37 // previously stored hashes in |contents|. 38 PrefHashStoreImpl(const std::string& seed, 39 const std::string& device_id, 40 bool use_super_mac); 41 42 virtual ~PrefHashStoreImpl(); 43 44 // Provides an external HashStoreContents implementation to be used. 45 // BeginTransaction() will ignore |storage| if this is provided. 46 void set_legacy_hash_store_contents( 47 scoped_ptr<HashStoreContents> legacy_hash_store_contents); 48 49 // Clears the contents of this PrefHashStore. |IsInitialized()| will return 50 // false after this call. 51 void Reset(); 52 53 // PrefHashStore implementation. 54 virtual scoped_ptr<PrefHashStoreTransaction> BeginTransaction( 55 scoped_ptr<HashStoreContents> storage) OVERRIDE; 56 57 private: 58 class PrefHashStoreTransactionImpl; 59 60 const PrefHashCalculator pref_hash_calculator_; 61 scoped_ptr<HashStoreContents> legacy_hash_store_contents_; 62 bool use_super_mac_; 63 64 DISALLOW_COPY_AND_ASSIGN(PrefHashStoreImpl); 65}; 66 67#endif // CHROME_BROWSER_PREFS_PREF_HASH_STORE_IMPL_H_ 68