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