WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch v1
patch (text/plain), 9.22 KB, created by
Brady Eidson
on 2016-05-09 17:27:03 PDT
(
hide
)
Description:
Patch v1
Filename:
MIME Type:
Creator:
Brady Eidson
Created:
2016-05-09 17:27:03 PDT
Size:
9.22 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 93c22c1..662e47e 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,5 +1,29 @@ > 2016-05-09 Brady Eidson <beidson@apple.com> > >+ Modern IDB: Have server database connections remember the OpenDB request that spawned them. >+ https://bugs.webkit.org/show_bug.cgi?id=157498 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ No new tests (No testable change in behavior, debug only for now). >+ >+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp: >+ (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation): >+ >+ * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp: >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::create): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction): >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction): >+ * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h: >+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::openRequestIdentifier): >+ >+2016-05-09 Brady Eidson <beidson@apple.com> >+ > Modern IDB: Prevent the same transaction from being commited/aborted twice. > https://bugs.webkit.org/show_bug.cgi?id=157494 > >diff --git a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >index fe48206..af5bd2f 100644 >--- a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >+++ b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >@@ -151,10 +151,10 @@ void UniqueIDBDatabase::performCurrentOpenOperation() > return; > } > >- Ref<UniqueIDBDatabaseConnection> connection = UniqueIDBDatabaseConnection::create(*this, m_currentOpenDBRequest->connection()); >- UniqueIDBDatabaseConnection* rawConnection = &connection.get(); >+ Ref<UniqueIDBDatabaseConnection> connection = UniqueIDBDatabaseConnection::create(*this, *m_currentOpenDBRequest); > > if (requestedVersion == m_databaseInfo->version()) { >+ auto* rawConnection = &connection.get(); > addOpenDatabaseConnection(WTFMove(connection)); > > auto result = IDBResultData::openDatabaseSuccess(m_currentOpenDBRequest->requestData().requestIdentifier(), *rawConnection); >@@ -165,7 +165,7 @@ void UniqueIDBDatabase::performCurrentOpenOperation() > } > > ASSERT(!m_versionChangeDatabaseConnection); >- m_versionChangeDatabaseConnection = rawConnection; >+ m_versionChangeDatabaseConnection = WTFMove(connection); > > // 3.3.7 "versionchange" transaction steps > // If there's no other open connections to this database, the version change process can begin immediately. >diff --git a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp >index 4aa8a84..d83e418 100644 >--- a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp >+++ b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp >@@ -43,15 +43,16 @@ static uint64_t nextDatabaseConnectionIdentifier() > return ++nextIdentifier; > } > >-Ref<UniqueIDBDatabaseConnection> UniqueIDBDatabaseConnection::create(UniqueIDBDatabase& database, IDBConnectionToClient& connection) >+Ref<UniqueIDBDatabaseConnection> UniqueIDBDatabaseConnection::create(UniqueIDBDatabase& database, ServerOpenDBRequest& request) > { >- return adoptRef(*new UniqueIDBDatabaseConnection(database, connection)); >+ return adoptRef(*new UniqueIDBDatabaseConnection(database, request)); > } > >-UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, IDBConnectionToClient& connection) >+UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, ServerOpenDBRequest& request) > : m_identifier(nextDatabaseConnectionIdentifier()) > , m_database(database) >- , m_connectionToClient(connection) >+ , m_connectionToClient(request.connection()) >+ , m_openRequestIdentifier(request.requestData().requestIdentifier()) > { > m_database.server().registerDatabaseConnection(*this); > } >@@ -76,7 +77,7 @@ void UniqueIDBDatabaseConnection::abortTransactionWithoutCallback(UniqueIDBDatab > > void UniqueIDBDatabaseConnection::connectionClosedFromClient() > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %" PRIu64, m_identifier); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > > m_closePending = true; > m_database.connectionClosedFromClient(*this); >@@ -84,7 +85,7 @@ void UniqueIDBDatabaseConnection::connectionClosedFromClient() > > void UniqueIDBDatabaseConnection::didFireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier) > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFireVersionChangeEvent"); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFireVersionChangeEvent - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > > m_database.didFireVersionChangeEvent(*this, requestIdentifier); > } >@@ -97,7 +98,7 @@ void UniqueIDBDatabaseConnection::fireVersionChangeEvent(const IDBResourceIdenti > > UniqueIDBDatabaseTransaction& UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion) > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::createVersionChangeTransaction"); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::createVersionChangeTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > ASSERT(!m_closePending); > > IDBTransactionInfo info = IDBTransactionInfo::versionChange(m_connectionToClient, m_database.info(), newVersion); >@@ -110,7 +111,7 @@ UniqueIDBDatabaseTransaction& UniqueIDBDatabaseConnection::createVersionChangeTr > > void UniqueIDBDatabaseConnection::establishTransaction(const IDBTransactionInfo& info) > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::establishTransaction"); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::establishTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > > ASSERT(info.mode() != IndexedDB::TransactionMode::VersionChange); > >@@ -125,7 +126,7 @@ void UniqueIDBDatabaseConnection::establishTransaction(const IDBTransactionInfo& > > void UniqueIDBDatabaseConnection::didAbortTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error) > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didAbortTransaction"); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didAbortTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > > auto transactionIdentifier = transaction.info().identifier(); > >@@ -137,7 +138,7 @@ void UniqueIDBDatabaseConnection::didAbortTransaction(UniqueIDBDatabaseTransacti > > void UniqueIDBDatabaseConnection::didCommitTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error) > { >- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCommitTransaction"); >+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCommitTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier); > > auto transactionIdentifier = transaction.info().identifier(); > >diff --git a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h >index 1bbced9..49b995a 100644 >--- a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h >+++ b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h >@@ -41,16 +41,18 @@ class IDBResultData; > namespace IDBServer { > > class IDBConnectionToClient; >+class ServerOpenDBRequest; > class UniqueIDBDatabase; > class UniqueIDBDatabaseTransaction; > > class UniqueIDBDatabaseConnection : public RefCounted<UniqueIDBDatabaseConnection> { > public: >- static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, IDBConnectionToClient&); >+ static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, ServerOpenDBRequest&); > > ~UniqueIDBDatabaseConnection(); > > uint64_t identifier() const { return m_identifier; } >+ const IDBResourceIdentifier& openRequestIdentifier() { return m_openRequestIdentifier; } > UniqueIDBDatabase& database() { return m_database; } > IDBConnectionToClient& connectionToClient() { return m_connectionToClient; } > >@@ -76,11 +78,12 @@ public: > void abortTransactionWithoutCallback(UniqueIDBDatabaseTransaction&); > > private: >- UniqueIDBDatabaseConnection(UniqueIDBDatabase&, IDBConnectionToClient&); >+ UniqueIDBDatabaseConnection(UniqueIDBDatabase&, ServerOpenDBRequest&); > > uint64_t m_identifier { 0 }; > UniqueIDBDatabase& m_database; > IDBConnectionToClient& m_connectionToClient; >+ IDBResourceIdentifier m_openRequestIdentifier; > > bool m_closePending { false }; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 157498
: 278464