Home | History | Annotate | Download | only in prefs
      1 // Copyright (c) 2012 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 BASE_PREFS_TESTING_PREF_STORE_H_
      6 #define BASE_PREFS_TESTING_PREF_STORE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/compiler_specific.h"
     12 #include "base/observer_list.h"
     13 #include "base/prefs/persistent_pref_store.h"
     14 #include "base/prefs/pref_value_map.h"
     15 
     16 // |TestingPrefStore| is a preference store implementation that allows tests to
     17 // explicitly manipulate the contents of the store, triggering notifications
     18 // where appropriate.
     19 class TestingPrefStore : public PersistentPrefStore {
     20  public:
     21   TestingPrefStore();
     22 
     23   // Overriden from PrefStore.
     24   virtual bool GetValue(const std::string& key,
     25                         const base::Value** result) const OVERRIDE;
     26   virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
     27   virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
     28   virtual bool HasObservers() const OVERRIDE;
     29   virtual bool IsInitializationComplete() const OVERRIDE;
     30 
     31   // PersistentPrefStore overrides:
     32   virtual bool GetMutableValue(const std::string& key,
     33                                base::Value** result) OVERRIDE;
     34   virtual void ReportValueChanged(const std::string& key) OVERRIDE;
     35   virtual void SetValue(const std::string& key, base::Value* value) OVERRIDE;
     36   virtual void SetValueSilently(const std::string& key,
     37                                 base::Value* value) OVERRIDE;
     38   virtual void RemoveValue(const std::string& key) OVERRIDE;
     39   virtual bool ReadOnly() const OVERRIDE;
     40   virtual PrefReadError GetReadError() const OVERRIDE;
     41   virtual PersistentPrefStore::PrefReadError ReadPrefs() OVERRIDE;
     42   virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) OVERRIDE;
     43   virtual void CommitPendingWrite() OVERRIDE;
     44 
     45   // Marks the store as having completed initialization.
     46   void SetInitializationCompleted();
     47 
     48   // Used for tests to trigger notifications explicitly.
     49   void NotifyPrefValueChanged(const std::string& key);
     50   void NotifyInitializationCompleted();
     51 
     52   // Some convenience getters/setters.
     53   void SetString(const std::string& key, const std::string& value);
     54   void SetInteger(const std::string& key, int value);
     55   void SetBoolean(const std::string& key, bool value);
     56 
     57   bool GetString(const std::string& key, std::string* value) const;
     58   bool GetInteger(const std::string& key, int* value) const;
     59   bool GetBoolean(const std::string& key, bool* value) const;
     60 
     61   // Determines whether ReadPrefsAsync completes immediately. Defaults to false
     62   // (non-blocking). To block, invoke this with true (blocking) before the call
     63   // to ReadPrefsAsync. To unblock, invoke again with false (non-blocking) after
     64   // the call to ReadPrefsAsync.
     65   void SetBlockAsyncRead(bool block_async_read);
     66 
     67   // Getter and Setter methods for setting and getting the state of the
     68   // |TestingPrefStore|.
     69   virtual void set_read_only(bool read_only);
     70   void set_read_success(bool read_success);
     71   void set_read_error(PersistentPrefStore::PrefReadError read_error);
     72   bool committed() { return committed_; }
     73 
     74  protected:
     75   virtual ~TestingPrefStore();
     76 
     77  private:
     78   // Stores the preference values.
     79   PrefValueMap prefs_;
     80 
     81   // Flag that indicates if the PrefStore is read-only
     82   bool read_only_;
     83 
     84   // The result to pass to PrefStore::Observer::OnInitializationCompleted
     85   bool read_success_;
     86 
     87   // The result to return from ReadPrefs or ReadPrefsAsync.
     88   PersistentPrefStore::PrefReadError read_error_;
     89 
     90   // Whether a call to ReadPrefsAsync should block.
     91   bool block_async_read_;
     92 
     93   // Whether there is a pending call to ReadPrefsAsync.
     94   bool pending_async_read_;
     95 
     96   // Whether initialization has been completed.
     97   bool init_complete_;
     98 
     99   // Whether the store contents have been committed to disk since the last
    100   // mutation.
    101   bool committed_;
    102 
    103   scoped_ptr<ReadErrorDelegate> error_delegate_;
    104   ObserverList<PrefStore::Observer, true> observers_;
    105 
    106   DISALLOW_COPY_AND_ASSIGN(TestingPrefStore);
    107 };
    108 
    109 #endif  // BASE_PREFS_TESTING_PREF_STORE_H_
    110