indexed_db_factory.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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/common/content_export.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content { 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class IndexedDBBackingStore; 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class CONTENT_EXPORT IndexedDBFactory 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : NON_EXPORTED_BASE(public base::RefCounted<IndexedDBFactory>) { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IndexedDBFactory(); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Notifications from weak pointers. 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void ReleaseDatabase(const IndexedDBDatabase::Identifier& identifier, 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool forcedClose); 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void GetDatabaseNames(scoped_refptr<IndexedDBCallbacks> callbacks, 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& origin_identifier, 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& data_directory); 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void Open(const string16& name, 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 version, 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 transaction_id, 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<IndexedDBCallbacks> callbacks, 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks, 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& origin_identifier, 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& data_directory); 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void DeleteDatabase(const string16& name, 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<IndexedDBCallbacks> callbacks, 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& origin_identifier, 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& data_directory); 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Iterates over all databases; for diagnostics only. 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<IndexedDBDatabase*> GetOpenDatabasesForOrigin( 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& origin_identifier) const; 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class base::RefCounted<IndexedDBFactory>; 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~IndexedDBFactory(); 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual scoped_refptr<IndexedDBBackingStore> OpenBackingStore( 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& origin_identifier, 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& data_directory, 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) WebKit::WebIDBCallbacks::DataLoss* data_loss, 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool* disk_full); 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