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 CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/memory/ref_counted.h" 10 #include "chrome/browser/extensions/api/storage/settings_namespace.h" 11 #include "chrome/browser/extensions/api/storage/settings_observer.h" 12 #include "chrome/browser/extensions/extension_function.h" 13 #include "chrome/browser/value_store/value_store.h" 14 15 namespace extensions { 16 17 // Superclass of all settings functions. 18 class SettingsFunction : public AsyncExtensionFunction { 19 protected: 20 SettingsFunction(); 21 virtual ~SettingsFunction(); 22 23 // ExtensionFunction: 24 virtual bool ShouldSkipQuotaLimiting() const OVERRIDE; 25 virtual bool RunImpl() OVERRIDE; 26 27 // Extension settings function implementations should do their work here. 28 // The SettingsFrontend makes sure this is posted to the appropriate thread. 29 // Implementations should fill in args themselves, though (like RunImpl) 30 // may return false to imply failure. 31 virtual bool RunWithStorage(ValueStore* storage) = 0; 32 33 // Sets error_ or result_ depending on the value of a storage ReadResult, and 34 // returns whether the result implies success (i.e. !error). 35 bool UseReadResult(ValueStore::ReadResult result); 36 37 // Sets error_ depending on the value of a storage WriteResult, sends a 38 // change notification if needed, and returns whether the result implies 39 // success (i.e. !error). 40 bool UseWriteResult(ValueStore::WriteResult result); 41 42 private: 43 // Called via PostTask from RunImpl. Calls RunWithStorage and then 44 // SendResponse with its success value. 45 void AsyncRunWithStorage(ValueStore* storage); 46 47 // The settings namespace the call was for. For example, SYNC if the API 48 // call was chrome.settings.experimental.sync..., LOCAL if .local, etc. 49 settings_namespace::Namespace settings_namespace_; 50 51 // Observers, cached so that it's only grabbed from the UI thread. 52 scoped_refptr<SettingsObserverList> observers_; 53 }; 54 55 class StorageStorageAreaGetFunction : public SettingsFunction { 56 public: 57 DECLARE_EXTENSION_FUNCTION("storage.get", STORAGE_GET) 58 59 protected: 60 virtual ~StorageStorageAreaGetFunction() {} 61 62 // SettingsFunction: 63 virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 64 }; 65 66 class StorageStorageAreaSetFunction : public SettingsFunction { 67 public: 68 DECLARE_EXTENSION_FUNCTION("storage.set", STORAGE_SET) 69 70 protected: 71 virtual ~StorageStorageAreaSetFunction() {} 72 73 // SettingsFunction: 74 virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 75 76 // ExtensionFunction: 77 virtual void GetQuotaLimitHeuristics( 78 QuotaLimitHeuristics* heuristics) const OVERRIDE; 79 }; 80 81 class StorageStorageAreaRemoveFunction : public SettingsFunction { 82 public: 83 DECLARE_EXTENSION_FUNCTION("storage.remove", STORAGE_REMOVE) 84 85 protected: 86 virtual ~StorageStorageAreaRemoveFunction() {} 87 88 // SettingsFunction: 89 virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 90 91 // ExtensionFunction: 92 virtual void GetQuotaLimitHeuristics( 93 QuotaLimitHeuristics* heuristics) const OVERRIDE; 94 }; 95 96 class StorageStorageAreaClearFunction : public SettingsFunction { 97 public: 98 DECLARE_EXTENSION_FUNCTION("storage.clear", STORAGE_CLEAR) 99 100 protected: 101 virtual ~StorageStorageAreaClearFunction() {} 102 103 // SettingsFunction: 104 virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 105 106 // ExtensionFunction: 107 virtual void GetQuotaLimitHeuristics( 108 QuotaLimitHeuristics* heuristics) const OVERRIDE; 109 }; 110 111 class StorageStorageAreaGetBytesInUseFunction : public SettingsFunction { 112 public: 113 DECLARE_EXTENSION_FUNCTION("storage.getBytesInUse", STORAGE_GETBYTESINUSE) 114 115 protected: 116 virtual ~StorageStorageAreaGetBytesInUseFunction() {} 117 118 // SettingsFunction: 119 virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 120 }; 121 122 } // namespace extensions 123 124 #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 125