| 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_
 | 
| 
 |