| Index: third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
|
| index 9be4f6b841f3de036df3f91fb97889ee27c4c58d..1aeb14636ad9e9597951d114acb33c8477b60c64 100644
|
| --- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
|
| +++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
|
| @@ -30,27 +30,29 @@
|
| #include "core/dom/ExceptionCode.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "modules/indexeddb/IDBDatabase.h"
|
| -#include "modules/indexeddb/IDBDatabaseCallbacks.h"
|
| +#include "modules/indexeddb/IDBDatabaseObserverImpl.h"
|
| +#include "modules/indexeddb/IDBDatabaseProxy.h"
|
| +#include "modules/indexeddb/IDBMojoUtil.h"
|
| #include "modules/indexeddb/IDBTracing.h"
|
| #include "modules/indexeddb/IDBVersionChangeEvent.h"
|
| #include <memory>
|
|
|
| -using blink::WebIDBDatabase;
|
| +using blink::IDBDatabaseProxy;
|
|
|
| namespace blink {
|
|
|
| -IDBOpenDBRequest* IDBOpenDBRequest::create(ScriptState* scriptState, IDBDatabaseCallbacks* callbacks, int64_t transactionId, int64_t version)
|
| +IDBOpenDBRequest* IDBOpenDBRequest::create(ScriptState* scriptState, int64_t transactionId, int64_t version, indexed_db::mojom::blink::OpenRequestObserverRequest request)
|
| {
|
| - IDBOpenDBRequest* request = new IDBOpenDBRequest(scriptState, callbacks, transactionId, version);
|
| - request->suspendIfNeeded();
|
| - return request;
|
| + IDBOpenDBRequest* idbRequest = new IDBOpenDBRequest(scriptState, transactionId, version, std::move(request));
|
| + idbRequest->suspendIfNeeded();
|
| + return idbRequest;
|
| }
|
|
|
| -IDBOpenDBRequest::IDBOpenDBRequest(ScriptState* scriptState, IDBDatabaseCallbacks* callbacks, int64_t transactionId, int64_t version)
|
| +IDBOpenDBRequest::IDBOpenDBRequest(ScriptState* scriptState, int64_t transactionId, int64_t version, indexed_db::mojom::blink::OpenRequestObserverRequest request)
|
| : IDBRequest(scriptState, IDBAny::createNull(), nullptr)
|
| - , m_databaseCallbacks(callbacks)
|
| , m_transactionId(transactionId)
|
| , m_version(version)
|
| + , m_binding(this, std::move(request))
|
| {
|
| ASSERT(!resultAsAny());
|
| }
|
| @@ -61,7 +63,6 @@ IDBOpenDBRequest::~IDBOpenDBRequest()
|
|
|
| DEFINE_TRACE(IDBOpenDBRequest)
|
| {
|
| - visitor->trace(m_databaseCallbacks);
|
| IDBRequest::trace(visitor);
|
| }
|
|
|
| @@ -79,21 +80,26 @@ void IDBOpenDBRequest::onBlocked(int64_t oldVersion)
|
| enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::blocked, oldVersion, newVersionNullable));
|
| }
|
|
|
| -void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata, WebIDBDataLoss dataLoss, String dataLossMessage)
|
| +IDBDatabase* IDBOpenDBRequest::getDatabase() const
|
| +{
|
| + if (resultAsAny())
|
| + return resultAsAny()->idbDatabase();
|
| + return nullptr;
|
| +}
|
| +
|
| +void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<IDBDatabaseProxy> backend, const IDBDatabaseMetadata& metadata, WebIDBDataLoss dataLoss, String dataLossMessage)
|
| {
|
| IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()");
|
| if (m_contextStopped || !getExecutionContext()) {
|
| - std::unique_ptr<WebIDBDatabase> db = std::move(backend);
|
| - db->abort(m_transactionId);
|
| - db->close();
|
| + std::unique_ptr<IDBDatabaseProxy> db = std::move(backend);
|
| + db->Abort(m_transactionId);
|
| + db->Close();
|
| return;
|
| }
|
| if (!shouldEnqueueEvent())
|
| return;
|
|
|
| - ASSERT(m_databaseCallbacks);
|
| -
|
| - IDBDatabase* idbDatabase = IDBDatabase::create(getExecutionContext(), std::move(backend), m_databaseCallbacks.release());
|
| + IDBDatabase* idbDatabase = IDBDatabase::create(getExecutionContext(), std::move(backend));
|
| idbDatabase->setMetadata(metadata);
|
|
|
| if (oldVersion == IDBDatabaseMetadata::NoVersion) {
|
| @@ -111,13 +117,13 @@ void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<WebID
|
| enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::upgradeneeded, oldVersion, m_version, dataLoss, dataLossMessage));
|
| }
|
|
|
| -void IDBOpenDBRequest::onSuccess(std::unique_ptr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata)
|
| +void IDBOpenDBRequest::onSuccess(std::unique_ptr<IDBDatabaseProxy> backend, const IDBDatabaseMetadata& metadata)
|
| {
|
| IDB_TRACE("IDBOpenDBRequest::onSuccess()");
|
| if (m_contextStopped || !getExecutionContext()) {
|
| - std::unique_ptr<WebIDBDatabase> db = std::move(backend);
|
| + std::unique_ptr<IDBDatabaseProxy> db = std::move(backend);
|
| if (db)
|
| - db->close();
|
| + db->Close();
|
| return;
|
| }
|
| if (!shouldEnqueueEvent())
|
| @@ -129,11 +135,9 @@ void IDBOpenDBRequest::onSuccess(std::unique_ptr<WebIDBDatabase> backend, const
|
| ASSERT(!backend.get());
|
| idbDatabase = resultAsAny()->idbDatabase();
|
| ASSERT(idbDatabase);
|
| - ASSERT(!m_databaseCallbacks);
|
| } else {
|
| ASSERT(backend.get());
|
| - ASSERT(m_databaseCallbacks);
|
| - idbDatabase = IDBDatabase::create(getExecutionContext(), std::move(backend), m_databaseCallbacks.release());
|
| + idbDatabase = IDBDatabase::create(getExecutionContext(), std::move(backend));
|
| setResult(IDBAny::create(idbDatabase));
|
| }
|
| idbDatabase->setMetadata(metadata);
|
| @@ -177,4 +181,40 @@ DispatchEventResult IDBOpenDBRequest::dispatchEventInternal(Event* event)
|
| return IDBRequest::dispatchEventInternal(event);
|
| }
|
|
|
| +void IDBOpenDBRequest::onOpenResult(indexed_db::mojom::blink::OpenResultPtr result)
|
| +{
|
| + if (result->is_error()) {
|
| + // TODO(cmumford): Finish this.
|
| + NOTREACHED();
|
| + } else if (result->is_data()) {
|
| + // Fix this.
|
| + bool updateWasCalled = true;
|
| + // TODO(cmumford): Get the metadata.
|
| + IDBDatabaseMetadata metadata;
|
| + convertMetadata(&metadata, result->get_data()->metadata);
|
| + if (updateWasCalled) {
|
| + onSuccess(nullptr, metadata);
|
| + } else {
|
| + std::unique_ptr<IDBDatabaseProxy> proxy(IDBDatabaseProxy::create(std::move(result->get_data()->database)));
|
| + onSuccess(std::move(proxy), metadata);
|
| + }
|
| + } else {
|
| + // TODO(cmumford): Finish this.
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| +void IDBOpenDBRequest::OnBlocked(int64_t oldVersion)
|
| +{
|
| + // TODO(cmumford): Combine this and onBlocked().
|
| + onBlocked(oldVersion);
|
| +}
|
| +
|
| +void IDBOpenDBRequest::OnUpgradeNeeded(int64_t oldVersion, indexed_db::mojom::blink::DatabasePtr database, indexed_db::mojom::blink::DatabaseMetadataPtr metadata, indexed_db::mojom::blink::DataLossInfoPtr dataLossInfo)
|
| +{
|
| + // TODO(cmumford): Combine this and onUpgradeNeeded().
|
| + std::unique_ptr<IDBDatabaseProxy> openRequestProxy(IDBDatabaseProxy::create(std::move(database)));
|
| + onUpgradeNeeded(oldVersion, std::move(openRequestProxy), IDBDatabaseMetadata(std::move(metadata)), dataLossInfo->status, dataLossInfo->message);
|
| +}
|
| +
|
| } // namespace blink
|
|
|