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.
16class 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:
44    virtual ~ReadErrorDelegate() {}
45
46    virtual void OnError(PrefReadError error) = 0;
47  };
48
49  // Whether the store is in a pseudo-read-only mode where changes are not
50  // actually persisted to disk.  This happens in some cases when there are
51  // read errors during startup.
52  virtual bool ReadOnly() const = 0;
53
54  // Gets the read error. Only valid if IsInitializationComplete() returns true.
55  virtual PrefReadError GetReadError() const = 0;
56
57  // Reads the preferences from disk. Notifies observers via
58  // "PrefStore::OnInitializationCompleted" when done.
59  virtual PrefReadError ReadPrefs() = 0;
60
61  // Reads the preferences from disk asynchronously. Notifies observers via
62  // "PrefStore::OnInitializationCompleted" when done. Also it fires
63  // |error_delegate| if it is not NULL and reading error has occurred.
64  // Owns |error_delegate|.
65  virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) = 0;
66
67  // Lands any pending writes to disk.
68  virtual void CommitPendingWrite() = 0;
69
70 protected:
71  virtual ~PersistentPrefStore() {}
72};
73
74#endif  // BASE_PREFS_PERSISTENT_PREF_STORE_H_
75