indexed_db_factory.h revision 58537e28ecd584eab876aee8be7156509866d23a
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <map>
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <set>
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/files/file_path.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/ref_counted.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/indexed_db/indexed_db_callbacks.h"
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/browser/indexed_db/indexed_db_database.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/indexed_db/indexed_db_database_callbacks.h"
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/browser/indexed_db/indexed_db_factory.h"
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/common/content_export.h"
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content {
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class IndexedDBBackingStore;
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class CONTENT_EXPORT IndexedDBFactory
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    : NON_EXPORTED_BASE(public base::RefCounted<IndexedDBFactory>) {
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  IndexedDBFactory();
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Notifications from weak pointers.
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void ReleaseDatabase(const IndexedDBDatabase::Identifier& identifier,
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       bool forcedClose);
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void GetDatabaseNames(scoped_refptr<IndexedDBCallbacks> callbacks,
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        const std::string& origin_identifier,
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        const base::FilePath& data_directory);
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Open(const string16& name,
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            int64 version,
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            int64 transaction_id,
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            scoped_refptr<IndexedDBCallbacks> callbacks,
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            const std::string& origin_identifier,
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            const base::FilePath& data_directory);
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void DeleteDatabase(const string16& name,
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      scoped_refptr<IndexedDBCallbacks> callbacks,
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      const std::string& origin_identifier,
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      const base::FilePath& data_directory);
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Iterates over all databases; for diagnostics only.
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  std::vector<IndexedDBDatabase*> GetOpenDatabasesForOrigin(
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      const std::string& origin_identifier) const;
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected:
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  friend class base::RefCounted<IndexedDBFactory>;
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~IndexedDBFactory();
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_refptr<IndexedDBBackingStore> OpenBackingStore(
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& origin_identifier,
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const base::FilePath& data_directory,
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      WebKit::WebIDBCallbacks::DataLoss* data_loss);
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void ReleaseBackingStore(const std::string& identifier, bool immediate);
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void CloseBackingStore(const std::string& identifier);
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Called internally after a database is closed, with some delay. If this
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // factory has the last reference, it will be released.
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void MaybeCloseBackingStore(const std::string& identifier);
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool HasLastBackingStoreReference(const std::string& identifier) const;
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  typedef std::map<IndexedDBDatabase::Identifier,
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                   scoped_refptr<IndexedDBDatabase> > IndexedDBDatabaseMap;
75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  IndexedDBDatabaseMap database_map_;
76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  typedef std::map<std::string, scoped_refptr<IndexedDBBackingStore> >
78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      IndexedDBBackingStoreMap;
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  IndexedDBBackingStoreMap backing_store_map_;
80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  std::set<scoped_refptr<IndexedDBBackingStore> > session_only_backing_stores_;
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace content
85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FACTORY_H_
87