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_PERSISTENT_PREF_STORE_H_ 6 #define BASE_PREFS_PERSISTENT_PREF_STORE_H_ 7 8 #include <string> 9 10 #include "base/prefs/base_prefs_export.h" 11 #include "base/prefs/writeable_pref_store.h" 12 13 // This interface is complementary to the PrefStore interface, declaring 14 // additional functionality that adds support for setting values and persisting 15 // the data to some backing store. 16 class BASE_PREFS_EXPORT PersistentPrefStore : public WriteablePrefStore { 17 public: 18 // Unique integer code for each type of error so we can report them 19 // distinctly in a histogram. 20 // NOTE: Don't change the explicit values of the enums as it will change the 21 // server's meaning of the histogram. 22 enum PrefReadError { 23 PREF_READ_ERROR_NONE = 0, 24 PREF_READ_ERROR_JSON_PARSE = 1, 25 PREF_READ_ERROR_JSON_TYPE = 2, 26 PREF_READ_ERROR_ACCESS_DENIED = 3, 27 PREF_READ_ERROR_FILE_OTHER = 4, 28 PREF_READ_ERROR_FILE_LOCKED = 5, 29 PREF_READ_ERROR_NO_FILE = 6, 30 PREF_READ_ERROR_JSON_REPEAT = 7, 31 // PREF_READ_ERROR_OTHER = 8, // Deprecated. 32 PREF_READ_ERROR_FILE_NOT_SPECIFIED = 9, 33 // Indicates that ReadPrefs() couldn't complete synchronously and is waiting 34 // for an asynchronous task to complete first. 35 PREF_READ_ERROR_ASYNCHRONOUS_TASK_INCOMPLETE = 10, 36 PREF_READ_ERROR_LEVELDB_IO = 11, 37 PREF_READ_ERROR_LEVELDB_CORRUPTION_READ_ONLY = 12, 38 PREF_READ_ERROR_LEVELDB_CORRUPTION = 13, 39 PREF_READ_ERROR_MAX_ENUM 40 }; 41 42 class ReadErrorDelegate { 43 public: ~ReadErrorDelegate()44 virtual ~ReadErrorDelegate() {} 45 46 virtual void OnError(PrefReadError error) = 0; 47 }; 48 49 // Same as SetValue, but doesn't generate notifications. This is used by 50 // PrefService::GetMutableUserPref() in order to put empty entries 51 // into the user pref store. Using SetValue is not an option since existing 52 // tests rely on the number of notifications generated. 53 virtual void SetValueSilently(const std::string& key, base::Value* value) = 0; 54 55 // Whether the store is in a pseudo-read-only mode where changes are not 56 // actually persisted to disk. This happens in some cases when there are 57 // read errors during startup. 58 virtual bool ReadOnly() const = 0; 59 60 // Gets the read error. Only valid if IsInitializationComplete() returns true. 61 virtual PrefReadError GetReadError() const = 0; 62 63 // Reads the preferences from disk. Notifies observers via 64 // "PrefStore::OnInitializationCompleted" when done. 65 virtual PrefReadError ReadPrefs() = 0; 66 67 // Reads the preferences from disk asynchronously. Notifies observers via 68 // "PrefStore::OnInitializationCompleted" when done. Also it fires 69 // |error_delegate| if it is not NULL and reading error has occurred. 70 // Owns |error_delegate|. 71 virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) = 0; 72 73 // Lands any pending writes to disk. 74 virtual void CommitPendingWrite() = 0; 75 76 protected: ~PersistentPrefStore()77 virtual ~PersistentPrefStore() {} 78 }; 79 80 #endif // BASE_PREFS_PERSISTENT_PREF_STORE_H_ 81