172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_PREFS_OVERLAY_PERSISTENT_PREF_STORE_H_ 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_PREFS_OVERLAY_PERSISTENT_PREF_STORE_H_ 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#pragma once 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/basictypes.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/observer_list.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/prefs/pref_value_map.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/persistent_pref_store.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// PersistentPrefStore that directs all write operations into a in-memory 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// PrefValueMap. Read operations are first answered by the PrefValueMap. 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// If the PrefValueMap does not contain a value for the requested key, 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// the look-up is passed on to an underlying PersistentPrefStore |underlay_|. 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass OverlayPersistentPrefStore : public PersistentPrefStore, 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public PrefStore::Observer { 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen explicit OverlayPersistentPrefStore(PersistentPrefStore* underlay); 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~OverlayPersistentPrefStore(); 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if a value has been set for the |key| in this 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // OverlayPersistentPrefStore, i.e. if it potentially overrides a value 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // from the |underlay_|. 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsSetInOverlay(const std::string& key) const; 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Methods of PrefStore. 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void AddObserver(PrefStore::Observer* observer); 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void RemoveObserver(PrefStore::Observer* observer); 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool IsInitializationComplete() const; 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ReadResult GetValue(const std::string& key, 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Value** result) const; 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Methods of PersistentPrefStore. 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ReadResult GetMutableValue(const std::string& key, Value** result); 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void SetValue(const std::string& key, Value* value); 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void SetValueSilently(const std::string& key, Value* value); 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void RemoveValue(const std::string& key); 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool ReadOnly() const; 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual PrefReadError ReadPrefs(); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool WritePrefs(); 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void ScheduleWritePrefs(); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CommitPendingWrite(); 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void ReportValueChanged(const std::string& key); 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Methods of PrefStore::Observer. 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void OnPrefValueChanged(const std::string& key); 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void OnInitializationCompleted(); 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ObserverList<PrefStore::Observer, true> observers_; 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen PrefValueMap overlay_; 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<PersistentPrefStore> underlay_; 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(OverlayPersistentPrefStore); 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_PREFS_OVERLAY_PERSISTENT_PREF_STORE_H_ 64