UniqueIDBDatabaseConnection.h [plain text]
#pragma once
#if ENABLE(INDEXED_DATABASE)
#include "UniqueIDBDatabaseTransaction.h"
#include <wtf/HashMap.h>
#include <wtf/Identified.h>
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class IDBError;
class IDBResultData;
namespace IDBServer {
class IDBConnectionToClient;
class ServerOpenDBRequest;
class UniqueIDBDatabase;
class UniqueIDBDatabaseTransaction;
class UniqueIDBDatabaseConnection : public RefCounted<UniqueIDBDatabaseConnection>, public Identified<UniqueIDBDatabaseConnection> {
public:
static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, ServerOpenDBRequest&);
~UniqueIDBDatabaseConnection();
const IDBResourceIdentifier& openRequestIdentifier() { return m_openRequestIdentifier; }
UniqueIDBDatabase& database() { return m_database; }
IDBConnectionToClient& connectionToClient() { return m_connectionToClient; }
void connectionPendingCloseFromClient();
void connectionClosedFromClient();
bool closePending() const { return m_closePending; }
bool hasNonFinishedTransactions() const;
void fireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion);
UniqueIDBDatabaseTransaction& createVersionChangeTransaction(uint64_t newVersion);
void establishTransaction(const IDBTransactionInfo&);
void didAbortTransaction(UniqueIDBDatabaseTransaction&, const IDBError&);
void didCommitTransaction(UniqueIDBDatabaseTransaction&, const IDBError&);
void didCreateObjectStore(const IDBResultData&);
void didDeleteObjectStore(const IDBResultData&);
void didRenameObjectStore(const IDBResultData&);
void didClearObjectStore(const IDBResultData&);
void didCreateIndex(const IDBResultData&);
void didDeleteIndex(const IDBResultData&);
void didRenameIndex(const IDBResultData&);
void didFireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier);
void didFinishHandlingVersionChange(const IDBResourceIdentifier& transactionIdentifier);
void confirmDidCloseFromServer();
void abortTransactionWithoutCallback(UniqueIDBDatabaseTransaction&);
bool connectionIsClosing() const;
private:
UniqueIDBDatabaseConnection(UniqueIDBDatabase&, ServerOpenDBRequest&);
UniqueIDBDatabase& m_database;
IDBConnectionToClient& m_connectionToClient;
IDBResourceIdentifier m_openRequestIdentifier;
bool m_closePending { false };
HashMap<IDBResourceIdentifier, RefPtr<UniqueIDBDatabaseTransaction>> m_transactionMap;
};
} }
#endif // ENABLE(INDEXED_DATABASE)