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 |