Chromium Code Reviews| Index: Source/modules/indexeddb/IDBTransaction.cpp |
| diff --git a/Source/modules/indexeddb/IDBTransaction.cpp b/Source/modules/indexeddb/IDBTransaction.cpp |
| index a3f3ea5cedab85656d93bd8ae26666282b879839..252fb50e180bf47d184d5fb865c87b8923c5fc8c 100644 |
| --- a/Source/modules/indexeddb/IDBTransaction.cpp |
| +++ b/Source/modules/indexeddb/IDBTransaction.cpp |
| @@ -59,6 +59,30 @@ IDBTransaction* IDBTransaction::create(ScriptState* scriptState, int64_t id, IDB |
| return transaction; |
| } |
| +namespace { |
| + |
| +class DeactivateTransactionTask : public V8PerIsolateData::EndOfScopeTask { |
| +public: |
| + static PassOwnPtr<DeactivateTransactionTask> create(IDBTransaction* transaction) |
| + { |
| + return adoptPtr(new DeactivateTransactionTask(transaction)); |
| + } |
| + |
| + void Run() override |
| + { |
| + m_transaction->setActive(false); |
| + m_transaction.clear(); |
| + } |
| + |
| +private: |
| + DeactivateTransactionTask(IDBTransaction* transaction) |
|
haraken
2014/11/11 01:09:15
Add explicit.
jsbell
2014/11/11 17:38:26
Done.
|
| + : m_transaction(transaction) { } |
| + |
| + Persistent<IDBTransaction> m_transaction; |
| +}; |
| + |
| +} // namespace |
| + |
| IDBTransaction::IDBTransaction(ScriptState* scriptState, int64_t id, const Vector<String>& objectStoreNames, WebIDBTransactionMode mode, IDBDatabase* db, IDBOpenDBRequest* openDBRequest, const IDBDatabaseMetadata& previousMetadata) |
| : ActiveDOMObject(scriptState->executionContext()) |
| , m_id(id) |
| @@ -77,7 +101,7 @@ IDBTransaction::IDBTransaction(ScriptState* scriptState, int64_t id, const Vecto |
| } |
| if (m_state == Active) |
| - V8PerIsolateData::from(scriptState->isolate())->ensureIDBPendingTransactionMonitor()->addNewTransaction(*this); |
| + V8PerIsolateData::from(scriptState->isolate())->addEndOfScopeTask(DeactivateTransactionTask::create(this)); |
| m_database->transactionCreated(this); |
| } |