Chromium Code Reviews| 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); |
|
Mads Ager (chromium)
2013/11/28 10:24:46
These are now called |trace|.
haraken
2013/12/02 09:13:27
Done.
|
| + for (DatabaseCallbacksSet::const_iterator it = m_databaseCallbacksSet.begin(); it != m_databaseCallbacksSet.end(); ++it) { |
|
Mads Ager (chromium)
2013/11/28 10:24:46
We should extend the visitor to understand ListHas
haraken
2013/12/02 09:13:27
Done. Please double-check a change to Visitor.h :)
|
| + visitor->visit(*it); |
| + } |
| +} |
| + |
| } // namespace WebCore |