| Index: Source/modules/indexeddb/IDBDatabaseBackendImpl.cpp
|
| diff --git a/Source/modules/indexeddb/IDBDatabaseBackendImpl.cpp b/Source/modules/indexeddb/IDBDatabaseBackendImpl.cpp
|
| index 57d9567d07c228c1dd51520e507518e883ef37ce..7cd6d9c3e9e62ff416a951db38194dbc0fce656b 100644
|
| --- a/Source/modules/indexeddb/IDBDatabaseBackendImpl.cpp
|
| +++ b/Source/modules/indexeddb/IDBDatabaseBackendImpl.cpp
|
| @@ -41,6 +41,8 @@
|
|
|
| namespace WebCore {
|
|
|
| +DEFINE_GC_MAP(IDBDatabaseBackendInterface);
|
| +
|
| class CreateObjectStoreOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBBackingStore> backingStore, const IDBObjectStoreMetadata& objectStoreMetadata)
|
| @@ -79,13 +81,13 @@ private:
|
|
|
| class IDBDatabaseBackendImpl::VersionChangeOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, IDBDatabaseCallbacks* databaseCallbacks)
|
| {
|
| return adoptPtr(new VersionChangeOperation(database, transactionId, version, callbacks, databaseCallbacks));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - VersionChangeOperation(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks)
|
| + VersionChangeOperation(IDBDatabaseBackendImpl* database, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, IDBDatabaseCallbacks* databaseCallbacks)
|
| : m_database(database)
|
| , m_transactionId(transactionId)
|
| , m_version(version)
|
| @@ -94,65 +96,65 @@ private:
|
| {
|
| }
|
|
|
| - RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + Persistent<IDBDatabaseBackendImpl> m_database;
|
| int64_t m_transactionId;
|
| int64_t m_version;
|
| RefPtr<IDBCallbacks> m_callbacks;
|
| - RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks;
|
| + Persistent<IDBDatabaseCallbacks> m_databaseCallbacks;
|
| };
|
|
|
| class CreateObjectStoreAbortOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, int64_t objectStoreId)
|
| {
|
| return adoptPtr(new CreateObjectStoreAbortOperation(database, objectStoreId));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - CreateObjectStoreAbortOperation(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId)
|
| + CreateObjectStoreAbortOperation(IDBDatabaseBackendImpl* database, int64_t objectStoreId)
|
| : m_database(database)
|
| , m_objectStoreId(objectStoreId)
|
| {
|
| }
|
|
|
| - const RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + const Persistent<IDBDatabaseBackendImpl> m_database;
|
| const int64_t m_objectStoreId;
|
| };
|
|
|
| class DeleteObjectStoreAbortOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, const IDBObjectStoreMetadata& objectStore)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, const IDBObjectStoreMetadata& objectStore)
|
| {
|
| return adoptPtr(new DeleteObjectStoreAbortOperation(database, objectStore));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - DeleteObjectStoreAbortOperation(PassRefPtr<IDBDatabaseBackendImpl> database, const IDBObjectStoreMetadata& objectStoreMetadata)
|
| + DeleteObjectStoreAbortOperation(IDBDatabaseBackendImpl* database, const IDBObjectStoreMetadata& objectStoreMetadata)
|
| : m_database(database)
|
| , m_objectStoreMetadata(objectStoreMetadata)
|
| {
|
| }
|
|
|
| - RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + Persistent<IDBDatabaseBackendImpl> m_database;
|
| IDBObjectStoreMetadata m_objectStoreMetadata;
|
| };
|
|
|
| class IDBDatabaseBackendImpl::VersionChangeAbortOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, const String& previousVersion, int64_t previousIntVersion)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, const String& previousVersion, int64_t previousIntVersion)
|
| {
|
| return adoptPtr(new VersionChangeAbortOperation(database, previousVersion, previousIntVersion));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - VersionChangeAbortOperation(PassRefPtr<IDBDatabaseBackendImpl> database, const String& previousVersion, int64_t previousIntVersion)
|
| + VersionChangeAbortOperation(IDBDatabaseBackendImpl* database, const String& previousVersion, int64_t previousIntVersion)
|
| : m_database(database)
|
| , m_previousVersion(previousVersion)
|
| , m_previousIntVersion(previousIntVersion)
|
| {
|
| }
|
|
|
| - RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + Persistent<IDBDatabaseBackendImpl> m_database;
|
| String m_previousVersion;
|
| int64_t m_previousIntVersion;
|
| };
|
| @@ -199,40 +201,40 @@ private:
|
|
|
| class CreateIndexAbortOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId, int64_t indexId)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, int64_t objectStoreId, int64_t indexId)
|
| {
|
| return adoptPtr(new CreateIndexAbortOperation(database, objectStoreId, indexId));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - CreateIndexAbortOperation(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId, int64_t indexId)
|
| + CreateIndexAbortOperation(IDBDatabaseBackendImpl* database, int64_t objectStoreId, int64_t indexId)
|
| : m_database(database)
|
| , m_objectStoreId(objectStoreId)
|
| , m_indexId(indexId)
|
| {
|
| }
|
|
|
| - const RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + const Persistent<IDBDatabaseBackendImpl> m_database;
|
| const int64_t m_objectStoreId;
|
| const int64_t m_indexId;
|
| };
|
|
|
| class DeleteIndexAbortOperation : public IDBTransactionBackendImpl::Operation {
|
| public:
|
| - static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
|
| + static PassOwnPtr<IDBTransactionBackendImpl::Operation> create(IDBDatabaseBackendImpl* database, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
|
| {
|
| return adoptPtr(new DeleteIndexAbortOperation(database, objectStoreId, indexMetadata));
|
| }
|
| virtual void perform(IDBTransactionBackendImpl*);
|
| private:
|
| - DeleteIndexAbortOperation(PassRefPtr<IDBDatabaseBackendImpl> database, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
|
| + DeleteIndexAbortOperation(IDBDatabaseBackendImpl* database, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
|
| : m_database(database)
|
| , m_objectStoreId(objectStoreId)
|
| , m_indexMetadata(indexMetadata)
|
| {
|
| }
|
|
|
| - const RefPtr<IDBDatabaseBackendImpl> m_database;
|
| + const Persistent<IDBDatabaseBackendImpl> m_database;
|
| const int64_t m_objectStoreId;
|
| const IDBIndexMetadata m_indexMetadata;
|
| };
|
| @@ -425,17 +427,17 @@ private:
|
|
|
| class IDBDatabaseBackendImpl::PendingOpenCall {
|
| public:
|
| - static PassOwnPtr<PendingOpenCall> create(PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks, int64_t transactionId, int64_t version)
|
| + static PassOwnPtr<PendingOpenCall> create(PassRefPtr<IDBCallbacks> callbacks, IDBDatabaseCallbacks* databaseCallbacks, int64_t transactionId, int64_t version)
|
| {
|
| return adoptPtr(new PendingOpenCall(callbacks, databaseCallbacks, transactionId, version));
|
| }
|
| PassRefPtr<IDBCallbacks> callbacks() { return m_callbacks; }
|
| - PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks() { return m_databaseCallbacks; }
|
| + IDBDatabaseCallbacks* databaseCallbacks() { return m_databaseCallbacks; }
|
| int64_t version() { return m_version; }
|
| int64_t transactionId() const { return m_transactionId; }
|
|
|
| private:
|
| - PendingOpenCall(PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks, int64_t transactionId, int64_t version)
|
| + PendingOpenCall(PassRefPtr<IDBCallbacks> callbacks, IDBDatabaseCallbacks* databaseCallbacks, int64_t transactionId, int64_t version)
|
| : m_callbacks(callbacks)
|
| , m_databaseCallbacks(databaseCallbacks)
|
| , m_version(version)
|
| @@ -443,7 +445,7 @@ private:
|
| {
|
| }
|
| RefPtr<IDBCallbacks> m_callbacks;
|
| - RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks;
|
| + Persistent<IDBDatabaseCallbacks> m_databaseCallbacks;
|
| int64_t m_version;
|
| const int64_t m_transactionId;
|
| };
|
| @@ -464,12 +466,12 @@ private:
|
| RefPtr<IDBCallbacks> m_callbacks;
|
| };
|
|
|
| -PassRefPtr<IDBDatabaseBackendImpl> IDBDatabaseBackendImpl::create(const String& name, IDBBackingStore* database, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
|
| +IDBDatabaseBackendImpl* IDBDatabaseBackendImpl::create(const String& name, IDBBackingStore* database, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
|
| {
|
| - RefPtr<IDBDatabaseBackendImpl> backend = adoptRef(new IDBDatabaseBackendImpl(name, database, factory, uniqueIdentifier));
|
| + IDBDatabaseBackendImpl* backend = new IDBDatabaseBackendImpl(name, database, factory, uniqueIdentifier);
|
| if (!backend->openInternal())
|
| return 0;
|
| - return backend.release();
|
| + return backend;
|
| }
|
|
|
| namespace {
|
| @@ -1172,18 +1174,17 @@ void IDBDatabaseBackendImpl::processPendingCalls()
|
| }
|
| }
|
|
|
| -void IDBDatabaseBackendImpl::createTransaction(int64_t transactionId, PassRefPtr<IDBDatabaseCallbacks> callbacks, const Vector<int64_t>& objectStoreIds, unsigned short mode)
|
| +void IDBDatabaseBackendImpl::createTransaction(int64_t transactionId, IDBDatabaseCallbacks* callbacks, const Vector<int64_t>& objectStoreIds, unsigned short mode)
|
| {
|
| RefPtr<IDBTransactionBackendImpl> transaction = IDBTransactionBackendImpl::create(transactionId, callbacks, objectStoreIds, static_cast<IndexedDB::TransactionMode>(mode), this);
|
| ASSERT(!m_transactions.contains(transactionId));
|
| m_transactions.add(transactionId, transaction.get());
|
| }
|
|
|
| -void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t transactionId, int64_t version)
|
| +void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> prpCallbacks, IDBDatabaseCallbacks* databaseCallbacks, int64_t transactionId, int64_t version)
|
| {
|
| ASSERT(m_backingStore.get());
|
| RefPtr<IDBCallbacks> callbacks = prpCallbacks;
|
| - RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks;
|
|
|
| if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction) {
|
| m_pendingOpenCalls.append(PendingOpenCall::create(callbacks, databaseCallbacks, transactionId, version));
|
| @@ -1220,7 +1221,7 @@ void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> prpCallback
|
|
|
| if (version == IDBDatabaseMetadata::NoIntVersion) {
|
| if (!isNewDatabase) {
|
| - m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks));
|
| + m_databaseCallbacksSet.add(databaseCallbacks);
|
| callbacks->onSuccess(this, this->metadata());
|
| return;
|
| }
|
| @@ -1241,10 +1242,9 @@ void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> prpCallback
|
| callbacks->onSuccess(this, this->metadata());
|
| }
|
|
|
| -void IDBDatabaseBackendImpl::runIntVersionChangeTransaction(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t transactionId, int64_t requestedVersion)
|
| +void IDBDatabaseBackendImpl::runIntVersionChangeTransaction(PassRefPtr<IDBCallbacks> prpCallbacks, IDBDatabaseCallbacks* databaseCallbacks, int64_t transactionId, int64_t requestedVersion)
|
| {
|
| RefPtr<IDBCallbacks> callbacks = prpCallbacks;
|
| - RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks;
|
| ASSERT(callbacks);
|
| for (DatabaseCallbacksSet::const_iterator it = m_databaseCallbacksSet.begin(); it != m_databaseCallbacksSet.end(); ++it) {
|
| // Front end ensures the event is not fired at connections that have closePending set.
|
| @@ -1314,9 +1314,8 @@ void IDBDatabaseBackendImpl::deleteDatabaseFinal(PassRefPtr<IDBCallbacks> callba
|
| callbacks->onSuccess();
|
| }
|
|
|
| -void IDBDatabaseBackendImpl::close(PassRefPtr<IDBDatabaseCallbacks> prpCallbacks)
|
| +void IDBDatabaseBackendImpl::close(IDBDatabaseCallbacks* callbacks)
|
| {
|
| - RefPtr<IDBDatabaseCallbacks> callbacks = prpCallbacks;
|
| ASSERT(m_databaseCallbacksSet.contains(callbacks));
|
|
|
| // Close outstanding transactions from the closing connection. This can not happen
|
| @@ -1385,4 +1384,12 @@ void IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform(IDBTransaction
|
| m_database->m_metadata.intVersion = m_previousIntVersion;
|
| }
|
|
|
| +void IDBDatabaseBackendImpl::trace(Visitor* visitor) const
|
| +{
|
| + visitor->visit(m_factory);
|
| + for (DatabaseCallbacksSet::const_iterator it = m_databaseCallbacksSet.begin(); it != m_databaseCallbacksSet.end(); ++it) {
|
| + visitor->visit(*it);
|
| + }
|
| +}
|
| +
|
| } // namespace WebCore
|
|
|