Update path of checkdeps to buildtools checkout
[chromium-blink-merge.git] / extensions / browser / api / storage / storage_api.h
blobb4b97da6289bed4714507c0e1f2a5a76059d7eb1
1 // Copyright 2014 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.
5 #ifndef EXTENSIONS_BROWSER_API_STORAGE_STORAGE_API_H_
6 #define EXTENSIONS_BROWSER_API_STORAGE_STORAGE_API_H_
8 #include "base/compiler_specific.h"
9 #include "base/memory/ref_counted.h"
10 #include "extensions/browser/api/storage/settings_namespace.h"
11 #include "extensions/browser/api/storage/settings_observer.h"
12 #include "extensions/browser/extension_function.h"
13 #include "extensions/browser/value_store/value_store.h"
15 namespace extensions {
17 // Superclass of all settings functions.
18 class SettingsFunction : public UIThreadExtensionFunction {
19 protected:
20 SettingsFunction();
21 virtual ~SettingsFunction();
23 // ExtensionFunction:
24 virtual bool ShouldSkipQuotaLimiting() const OVERRIDE;
25 virtual ResponseAction Run() OVERRIDE;
27 // Extension settings function implementations should do their work here.
28 // The StorageFrontend makes sure this is posted to the appropriate thread.
29 virtual ResponseValue RunWithStorage(ValueStore* storage) = 0;
31 // Handles the |result| of a read function.
32 // - If the result succeeded, this will set |result_| and return.
33 // - If |result| failed with a ValueStore::CORRUPTION error, this will call
34 // RestoreStorageAndRetry(), and return that result.
35 // - If the |result| failed with a different error, this will set |error_|
36 // and return.
37 ResponseValue UseReadResult(ValueStore::ReadResult result,
38 ValueStore* storage);
40 // Handles the |result| of a write function.
41 // - If the result succeeded, this will set |result_| and return.
42 // - If |result| failed with a ValueStore::CORRUPTION error, this will call
43 // RestoreStorageAndRetry(), and return that result.
44 // - If the |result| failed with a different error, this will set |error_|
45 // and return.
46 // This will also send out a change notification, if appropriate.
47 ResponseValue UseWriteResult(ValueStore::WriteResult result,
48 ValueStore* storage);
50 private:
51 // Called via PostTask from Run. Calls RunWithStorage and then
52 // SendResponse with its success value.
53 void AsyncRunWithStorage(ValueStore* storage);
55 // Called if we encounter a ValueStore error. If the error is due to
56 // corruption, tries to restore the ValueStore and re-run the API function.
57 // If the storage cannot be restored or was due to some other error, then sets
58 // error and returns. This also sets the |tried_restoring_storage_| flag to
59 // ensure we don't enter a loop.
60 ResponseValue HandleError(const ValueStore::Error& error,
61 ValueStore* storage);
63 // The settings namespace the call was for. For example, SYNC if the API
64 // call was chrome.settings.experimental.sync..., LOCAL if .local, etc.
65 settings_namespace::Namespace settings_namespace_;
67 // A flag indicating whether or not we have tried to restore storage. We
68 // should only ever try once (per API call) in order to avoid entering a loop.
69 bool tried_restoring_storage_;
71 // Observers, cached so that it's only grabbed from the UI thread.
72 scoped_refptr<SettingsObserverList> observers_;
75 class StorageStorageAreaGetFunction : public SettingsFunction {
76 public:
77 DECLARE_EXTENSION_FUNCTION("storage.get", STORAGE_GET)
79 protected:
80 virtual ~StorageStorageAreaGetFunction() {}
82 // SettingsFunction:
83 virtual ResponseValue RunWithStorage(ValueStore* storage) OVERRIDE;
86 class StorageStorageAreaSetFunction : public SettingsFunction {
87 public:
88 DECLARE_EXTENSION_FUNCTION("storage.set", STORAGE_SET)
90 protected:
91 virtual ~StorageStorageAreaSetFunction() {}
93 // SettingsFunction:
94 virtual ResponseValue RunWithStorage(ValueStore* storage) OVERRIDE;
96 // ExtensionFunction:
97 virtual void GetQuotaLimitHeuristics(
98 QuotaLimitHeuristics* heuristics) const OVERRIDE;
101 class StorageStorageAreaRemoveFunction : public SettingsFunction {
102 public:
103 DECLARE_EXTENSION_FUNCTION("storage.remove", STORAGE_REMOVE)
105 protected:
106 virtual ~StorageStorageAreaRemoveFunction() {}
108 // SettingsFunction:
109 virtual ResponseValue RunWithStorage(ValueStore* storage) OVERRIDE;
111 // ExtensionFunction:
112 virtual void GetQuotaLimitHeuristics(
113 QuotaLimitHeuristics* heuristics) const OVERRIDE;
116 class StorageStorageAreaClearFunction : public SettingsFunction {
117 public:
118 DECLARE_EXTENSION_FUNCTION("storage.clear", STORAGE_CLEAR)
120 protected:
121 virtual ~StorageStorageAreaClearFunction() {}
123 // SettingsFunction:
124 virtual ResponseValue RunWithStorage(ValueStore* storage) OVERRIDE;
126 // ExtensionFunction:
127 virtual void GetQuotaLimitHeuristics(
128 QuotaLimitHeuristics* heuristics) const OVERRIDE;
131 class StorageStorageAreaGetBytesInUseFunction : public SettingsFunction {
132 public:
133 DECLARE_EXTENSION_FUNCTION("storage.getBytesInUse", STORAGE_GETBYTESINUSE)
135 protected:
136 virtual ~StorageStorageAreaGetBytesInUseFunction() {}
138 // SettingsFunction:
139 virtual ResponseValue RunWithStorage(ValueStore* storage) OVERRIDE;
142 } // namespace extensions
144 #endif // EXTENSIONS_BROWSER_API_STORAGE_STORAGE_API_H_