indexed_db_factory.h revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include <map>
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <set>
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/basictypes.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/files/file_path.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/memory/ref_counted.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/memory/weak_ptr.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/strings/string16.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/browser/indexed_db/indexed_db_callbacks.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/browser/indexed_db/indexed_db_database.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/browser/indexed_db/indexed_db_database_callbacks.h"
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/browser/indexed_db/indexed_db_factory.h"
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/common/content_export.h"
21
22namespace content {
23
24class IndexedDBBackingStore;
25
26class CONTENT_EXPORT IndexedDBFactory
27    : NON_EXPORTED_BASE(public base::RefCounted<IndexedDBFactory>) {
28 public:
29  IndexedDBFactory();
30
31  // Notifications from weak pointers.
32  void RemoveIDBDatabaseBackend(
33      const IndexedDBDatabase::Identifier& unique_identifier);
34
35  void GetDatabaseNames(scoped_refptr<IndexedDBCallbacks> callbacks,
36                        const std::string& origin_identifier,
37                        const base::FilePath& data_directory);
38  void Open(const string16& name,
39            int64 version,
40            int64 transaction_id,
41            scoped_refptr<IndexedDBCallbacks> callbacks,
42            scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
43            const std::string& origin_identifier,
44            const base::FilePath& data_directory);
45
46  void DeleteDatabase(const string16& name,
47                      scoped_refptr<IndexedDBCallbacks> callbacks,
48                      const std::string& origin_identifier,
49                      const base::FilePath& data_directory);
50
51  // Iterates over all databases; for diagnostics only.
52  std::vector<IndexedDBDatabase*> GetOpenDatabasesForOrigin(
53      const std::string& origin_identifier) const;
54
55 protected:
56  friend class base::RefCounted<IndexedDBFactory>;
57
58  virtual ~IndexedDBFactory();
59
60  scoped_refptr<IndexedDBBackingStore> OpenBackingStore(
61      const std::string& origin_identifier,
62      const base::FilePath& data_directory,
63      WebKit::WebIDBCallbacks::DataLoss* data_loss);
64
65 private:
66  typedef std::map<IndexedDBDatabase::Identifier,
67                   scoped_refptr<IndexedDBDatabase> > IndexedDBDatabaseMap;
68  IndexedDBDatabaseMap database_backend_map_;
69
70  typedef std::map<std::string, base::WeakPtr<IndexedDBBackingStore> >
71      IndexedDBBackingStoreMap;
72  IndexedDBBackingStoreMap backing_store_map_;
73
74  std::set<scoped_refptr<IndexedDBBackingStore> > session_only_backing_stores_;
75};
76
77}  // namespace content
78
79#endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
80