/* * Copyright (C) 2015 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef IDBConnectionToServer_h #define IDBConnectionToServer_h #if ENABLE(INDEXED_DATABASE) #include "IDBConnectionToServerDelegate.h" #include "IDBResourceIdentifier.h" #include "TransactionOperation.h" #include #include #include #include namespace WebCore { class IDBCursorInfo; class IDBError; class IDBObjectStoreInfo; class IDBResultData; namespace IDBClient { class IDBDatabase; class IDBOpenDBRequest; class IDBTransaction; class TransactionOperation; class IDBConnectionToServer : public RefCounted { public: WEBCORE_EXPORT static Ref create(IDBConnectionToServerDelegate&); uint64_t identifier() const; void deleteDatabase(IDBOpenDBRequest&); WEBCORE_EXPORT void didDeleteDatabase(const IDBResultData&); void openDatabase(IDBOpenDBRequest&); WEBCORE_EXPORT void didOpenDatabase(const IDBResultData&); void createObjectStore(TransactionOperation&, const IDBObjectStoreInfo&); WEBCORE_EXPORT void didCreateObjectStore(const IDBResultData&); void deleteObjectStore(TransactionOperation&, const String& objectStoreName); WEBCORE_EXPORT void didDeleteObjectStore(const IDBResultData&); void clearObjectStore(TransactionOperation&, uint64_t objectStoreIdentifier); WEBCORE_EXPORT void didClearObjectStore(const IDBResultData&); void createIndex(TransactionOperation&, const IDBIndexInfo&); WEBCORE_EXPORT void didCreateIndex(const IDBResultData&); void deleteIndex(TransactionOperation&, uint64_t objectStoreIdentifier, const String& indexName); WEBCORE_EXPORT void didDeleteIndex(const IDBResultData&); void putOrAdd(TransactionOperation&, RefPtr&, RefPtr&, const IndexedDB::ObjectStoreOverwriteMode); WEBCORE_EXPORT void didPutOrAdd(const IDBResultData&); void getRecord(TransactionOperation&, const IDBKeyRangeData&); WEBCORE_EXPORT void didGetRecord(const IDBResultData&); void getCount(TransactionOperation&, const IDBKeyRangeData&); WEBCORE_EXPORT void didGetCount(const IDBResultData&); void deleteRecord(TransactionOperation&, const IDBKeyRangeData&); WEBCORE_EXPORT void didDeleteRecord(const IDBResultData&); void openCursor(TransactionOperation&, const IDBCursorInfo&); WEBCORE_EXPORT void didOpenCursor(const IDBResultData&); void iterateCursor(TransactionOperation&, const IDBKeyData&, unsigned long count); WEBCORE_EXPORT void didIterateCursor(const IDBResultData&); void commitTransaction(IDBTransaction&); WEBCORE_EXPORT void didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&); void didFinishHandlingVersionChangeTransaction(IDBTransaction&); void abortTransaction(IDBTransaction&); WEBCORE_EXPORT void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&); WEBCORE_EXPORT void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion); void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier); WEBCORE_EXPORT void didStartTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&); WEBCORE_EXPORT void notifyOpenDBRequestBlocked(const IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion); void establishTransaction(IDBTransaction&); void databaseConnectionClosed(IDBDatabase&); // To be used when an IDBOpenDBRequest gets a new database connection, optionally with a // versionchange transaction, but the page is already torn down. void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier); void registerDatabaseConnection(IDBDatabase&); void unregisterDatabaseConnection(IDBDatabase&); private: IDBConnectionToServer(IDBConnectionToServerDelegate&); void saveOperation(TransactionOperation&); void completeOperation(const IDBResultData&); bool hasRecordOfTransaction(const IDBTransaction&) const; Ref m_delegate; HashMap> m_openDBRequestMap; HashMap m_databaseConnectionMap; HashMap> m_pendingTransactions; HashMap> m_committingTransactions; HashMap> m_abortingTransactions; HashMap> m_activeOperations; }; } // namespace IDBClient } // namespace WebCore #endif // ENABLE(INDEXED_DATABASE) #endif // IDBConnectionToServer_h