Index: chrome/browser/extensions/extension_settings.h |
diff --git a/chrome/browser/extensions/extension_settings.h b/chrome/browser/extensions/extension_settings.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1f297daa927266631b4712ab9cf190ae8068edfa |
--- /dev/null |
+++ b/chrome/browser/extensions/extension_settings.h |
@@ -0,0 +1,98 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_H_ |
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_H_ |
+#pragma once |
+ |
+#include "base/callback.h" |
+#include "base/file_path.h" |
+#include "base/memory/ref_counted.h" |
+#include "chrome/browser/extensions/extension_settings_storage.h" |
+ |
+// Manages ExtensionSettingsStorage objects for extensions. |
+class ExtensionSettings : public base::RefCountedThreadSafe<ExtensionSettings> { |
+ public: |
+ // File path is the base of the extension settings directory. |
+ // The databases will be at base_path/extension_id. |
+ explicit ExtensionSettings(const FilePath& base_path); |
+ |
+ // Callback from the GetStorage() methods. |
+ typedef base::Callback<void(ExtensionSettingsStorage*)> Callback; |
+ |
+ // Gets the storage area for a given extension. Only valid for the duration |
+ // of the callback. |
+ // By default this will be of a cached LEVELDB storage, but on failure to |
+ // create a leveldb instance will fall back to cached NOOP storage. |
+ // Callbacks will happen asynchronously regardless of whether they need to go |
+ // to the FILE thread, but will always be called on the UI thread. |
+ void GetStorage(const std::string& extension_id, const Callback& callback); |
+ |
+ // Gets a storage area for a given extension with a specific type. |
+ // and whether it should be wrapped in a cache. |
+ // Use this for testing; if the given type fails to be created (e.g. if |
+ // leveldb creation fails) then a DCHECK will fail. |
+ // Callback objects will be deleted when used. |
+ void GetStorageForTesting( |
+ ExtensionSettingsStorage::Type type, |
+ bool cached, |
+ const std::string& extension_id, |
+ const Callback& callback); |
+ |
+ private: |
+ friend class base::RefCountedThreadSafe<ExtensionSettings>; |
+ ~ExtensionSettings(); |
+ |
+ // Attempts to get and callback with an existing storage area. Returns |
+ // whether storage existed and the callback run. |
+ bool GetExistingStorage( |
+ const std::string& extension_id, const Callback& callback); |
+ |
+ // Runs a Callback with a storage argument, then deletes the callback. |
+ void RunWithStorage(Callback* callback, ExtensionSettingsStorage* storage); |
+ |
+ // Starts the process of creation of a storage area. |
+ // Must be run on the UI thread. |
+ void StartCreationOfStorage( |
+ const std::string& extension_id, |
+ ExtensionSettingsStorage::Type type, |
+ ExtensionSettingsStorage::Type fallback_type, |
+ bool cached, |
+ const Callback& callback); |
+ |
+ // Creates a new storage area of a given type, with a fallback type if |
+ // creation fails, and optionally wrapped in a cache. |
+ // Must be run on the FILE thread. |
+ void CreateStorageOnFileThread( |
+ const std::string& extension_id, |
+ ExtensionSettingsStorage::Type type, |
+ ExtensionSettingsStorage::Type fallback_type, |
+ bool cached, |
+ const Callback& callback); |
+ |
+ // Creates a storage area of a given type, optionally wrapped in a cache. |
+ // Returns NULL if creation fails. |
+ ExtensionSettingsStorage* CreateStorage( |
+ const std::string& extension_id, |
+ ExtensionSettingsStorage::Type type, |
+ bool cached); |
+ |
+ // End the creation of a storage area. |
+ // Must be run on the UI thread. |
+ void EndCreationOfStorage( |
+ const std::string& extension_id, |
+ ExtensionSettingsStorage* storage, |
+ const Callback& callback); |
+ |
+ // The base file path to create any leveldb databases at. |
+ const FilePath base_path_; |
+ |
+ // A cache of ExtensionSettingsStorage objects that have already been created. |
+ // Ensure that there is only ever one created per extension. |
+ std::map<std::string, ExtensionSettingsStorage*> storage_objs_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionSettings); |
+}; |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_H_ |