| Index: third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
|
| diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
|
| index 224149e9c276ad000611f55260abc6c9cf0bdba0..79749a59af8b7b29e763926b9fb34fa49c6c50f3 100644
|
| --- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
|
| +++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
|
| @@ -30,6 +30,7 @@
|
| #include "bindings/core/v8/Nullable.h"
|
| #include "bindings/core/v8/SerializedScriptValue.h"
|
| #include "bindings/modules/v8/V8BindingForModules.h"
|
| +#include "core/dom/DOMException.h"
|
| #include "core/dom/ExceptionCode.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "core/events/EventQueue.h"
|
| @@ -39,7 +40,6 @@
|
| #include "modules/indexeddb/IDBKeyPath.h"
|
| #include "modules/indexeddb/IDBTracing.h"
|
| #include "modules/indexeddb/IDBVersionChangeEvent.h"
|
| -#include "modules/indexeddb/WebIDBDatabaseCallbacksImpl.h"
|
| #include "platform/Histogram.h"
|
| #include "public/platform/modules/indexeddb/WebIDBKeyPath.h"
|
| #include "public/platform/modules/indexeddb/WebIDBTypes.h"
|
| @@ -67,20 +67,20 @@ const char IDBDatabase::transactionFinishedErrorMessage[] = "The transaction has
|
| const char IDBDatabase::transactionReadOnlyErrorMessage[] = "The transaction is read-only.";
|
| const char IDBDatabase::databaseClosedErrorMessage[] = "The database connection is closed.";
|
|
|
| -IDBDatabase* IDBDatabase::create(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> database, IDBDatabaseCallbacks* callbacks)
|
| +IDBDatabase* IDBDatabase::create(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> database, indexed_db::mojom::blink::DatabaseClientAssociatedRequest clientRequest)
|
| {
|
| - IDBDatabase* idbDatabase = new IDBDatabase(context, std::move(database), callbacks);
|
| + IDBDatabase* idbDatabase = new IDBDatabase(context, std::move(database), std::move(clientRequest));
|
| idbDatabase->suspendIfNeeded();
|
| return idbDatabase;
|
| }
|
|
|
| -IDBDatabase::IDBDatabase(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> backend, IDBDatabaseCallbacks* callbacks)
|
| +IDBDatabase::IDBDatabase(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> backend, indexed_db::mojom::blink::DatabaseClientAssociatedRequest clientRequest)
|
| : ActiveScriptWrappable(this)
|
| , ActiveDOMObject(context)
|
| , m_backend(std::move(backend))
|
| - , m_databaseCallbacks(callbacks)
|
| + , m_clientBinding(this, std::move(clientRequest))
|
| {
|
| - m_databaseCallbacks->connect(this);
|
| + ThreadState::current()->registerPreFinalizer(this);
|
| }
|
|
|
| IDBDatabase::~IDBDatabase()
|
| @@ -94,11 +94,15 @@ DEFINE_TRACE(IDBDatabase)
|
| visitor->trace(m_versionChangeTransaction);
|
| visitor->trace(m_transactions);
|
| visitor->trace(m_enqueuedEvents);
|
| - visitor->trace(m_databaseCallbacks);
|
| EventTargetWithInlineData::trace(visitor);
|
| ActiveDOMObject::trace(visitor);
|
| }
|
|
|
| +void IDBDatabase::dispose()
|
| +{
|
| + m_clientBinding.Close();
|
| +}
|
| +
|
| int64_t IDBDatabase::nextTransactionId()
|
| {
|
| // Only keep a 32-bit counter to allow ports to use the other 32
|
| @@ -149,13 +153,13 @@ void IDBDatabase::transactionFinished(const IDBTransaction* transaction)
|
| closeConnection();
|
| }
|
|
|
| -void IDBDatabase::onAbort(int64_t transactionId, DOMException* error)
|
| +void IDBDatabase::OnTransactionAborted(int64_t transactionId, indexed_db::mojom::blink::ErrorInfoPtr error)
|
| {
|
| ASSERT(m_transactions.contains(transactionId));
|
| - m_transactions.get(transactionId)->onAbort(error);
|
| + m_transactions.get(transactionId)->onAbort(DOMException::create(error->code, error->message));
|
| }
|
|
|
| -void IDBDatabase::onComplete(int64_t transactionId)
|
| +void IDBDatabase::OnTransactionCompleted(int64_t transactionId)
|
| {
|
| ASSERT(m_transactions.contains(transactionId));
|
| m_transactions.get(transactionId)->onComplete();
|
| @@ -317,12 +321,12 @@ IDBTransaction* IDBDatabase::transaction(ScriptState* scriptState, const StringO
|
| }
|
|
|
| int64_t transactionId = nextTransactionId();
|
| - m_backend->createTransaction(transactionId, WebIDBDatabaseCallbacksImpl::create(m_databaseCallbacks).release(), objectStoreIds, mode);
|
| + m_backend->createTransaction(transactionId, objectStoreIds, mode);
|
|
|
| return IDBTransaction::create(scriptState, transactionId, scope, mode, this);
|
| }
|
|
|
| -void IDBDatabase::forceClose()
|
| +void IDBDatabase::OnForcedClosed()
|
| {
|
| for (const auto& it : m_transactions)
|
| it.value->abort(IGNORE_EXCEPTION);
|
| @@ -366,7 +370,7 @@ void IDBDatabase::closeConnection()
|
| }
|
| }
|
|
|
| -void IDBDatabase::onVersionChange(int64_t oldVersion, int64_t newVersion)
|
| +void IDBDatabase::OnVersionChange(int64_t oldVersion, int64_t newVersion)
|
| {
|
| IDB_TRACE("IDBDatabase::onVersionChange");
|
| if (m_contextStopped || !getExecutionContext())
|
|
|