Title: [194169] trunk/Source/WebCore
Revision
194169
Author
[email protected]
Date
2015-12-16 12:29:09 -0800 (Wed, 16 Dec 2015)

Log Message

Modern IDB: Have IDBServerOperations know whether they represent an open or delete request.
https://bugs.webkit.org/show_bug.cgi?id=152351

Reviewed by NOBODY (OOPS!).

No new tests (Refactor, existing tests pass).

* Modules/indexeddb/IndexedDB.h:

* Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
(WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest):
(WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest):
(WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):
* Modules/indexeddb/client/IDBOpenDBRequestImpl.h:

* Modules/indexeddb/client/IDBRequestImpl.h:
(WebCore::IDBClient::IDBRequest::requestType):

* Modules/indexeddb/server/IDBServerOperation.cpp:
(WebCore::IDBServer::IDBServerOperation::isOpenRequest):
(WebCore::IDBServer::IDBServerOperation::isDeleteRequest):
* Modules/indexeddb/server/IDBServerOperation.h:

* Modules/indexeddb/server/UniqueIDBDatabase.cpp:
(WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase):
(WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
(WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
(WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade):
(WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
* Modules/indexeddb/server/UniqueIDBDatabase.h:

* Modules/indexeddb/shared/IDBRequestData.cpp:
(WebCore::IDBRequestData::IDBRequestData):
* Modules/indexeddb/shared/IDBRequestData.h:
(WebCore::IDBRequestData::isOpenRequest):
(WebCore::IDBRequestData::isDeleteRequest):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (194168 => 194169)


--- trunk/Source/WebCore/ChangeLog	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/ChangeLog	2015-12-16 20:29:09 UTC (rev 194169)
@@ -1,3 +1,42 @@
+2015-12-16  Brady Eidson  <[email protected]>
+
+        Modern IDB: Have IDBServerOperations know whether they represent an open or delete request.
+        https://bugs.webkit.org/show_bug.cgi?id=152351
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Refactor, existing tests pass).
+
+        * Modules/indexeddb/IndexedDB.h:
+        
+        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
+        (WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest):
+        (WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest):
+        (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):
+        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
+        
+        * Modules/indexeddb/client/IDBRequestImpl.h:
+        (WebCore::IDBClient::IDBRequest::requestType):
+        
+        * Modules/indexeddb/server/IDBServerOperation.cpp:
+        (WebCore::IDBServer::IDBServerOperation::isOpenRequest):
+        (WebCore::IDBServer::IDBServerOperation::isDeleteRequest):
+        * Modules/indexeddb/server/IDBServerOperation.h:
+        
+        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase):
+        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
+        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
+        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade):
+        (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
+        * Modules/indexeddb/server/UniqueIDBDatabase.h:
+        
+        * Modules/indexeddb/shared/IDBRequestData.cpp:
+        (WebCore::IDBRequestData::IDBRequestData):
+        * Modules/indexeddb/shared/IDBRequestData.h:
+        (WebCore::IDBRequestData::isOpenRequest):
+        (WebCore::IDBRequestData::isDeleteRequest):
+
 2015-12-16  Alex Christensen  <[email protected]>
 
         Build fix after r194156.

Modified: trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -99,6 +99,12 @@
     Min,
 };
 
+enum class RequestType {
+    Open,
+    Delete,
+    Other,
+};
+
 } // namespace IndexedDB
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp	2015-12-16 20:29:09 UTC (rev 194169)
@@ -41,20 +41,21 @@
 Ref<IDBOpenDBRequest> IDBOpenDBRequest::createDeleteRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier)
 {
     ASSERT(databaseIdentifier.isValid());
-    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0));
+    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0, IndexedDB::RequestType::Delete));
 }
 
 Ref<IDBOpenDBRequest> IDBOpenDBRequest::createOpenRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
 {
     ASSERT(databaseIdentifier.isValid());
-    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version));
+    return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version, IndexedDB::RequestType::Open));
 }
     
-IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version)
+IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType)
     : IDBRequest(connection, context)
     , m_databaseIdentifier(databaseIdentifier)
     , m_version(version)
 {
+    m_requestType = requestType;
 }
 
 IDBOpenDBRequest::~IDBOpenDBRequest()

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -58,7 +58,7 @@
     void fireErrorAfterVersionChangeCompletion();
 
 private:
-    IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version);
+    IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType);
 
     void onError(const IDBResultData&);
     void onSuccess(const IDBResultData&);

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -100,6 +100,8 @@
     void setSource(IDBCursor&);
     void setVersionChangeTransaction(IDBTransaction&);
 
+    IndexedDB::RequestType requestType() const { return m_requestType; }
+
 protected:
     IDBRequest(IDBConnectionToServer&, ScriptExecutionContext*);
     IDBRequest(ScriptExecutionContext&, IDBObjectStore&, IDBTransaction&);
@@ -126,6 +128,7 @@
     bool m_shouldExposeTransactionToDOM { true };
     RefPtr<DOMError> m_domError;
     IDBError m_idbError;
+    IndexedDB::RequestType m_requestType = { IndexedDB::RequestType::Other };
 
 private:
     void onError();

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp	2015-12-16 20:29:09 UTC (rev 194169)
@@ -44,6 +44,16 @@
 {
 }
 
+bool IDBServerOperation::isOpenRequest() const
+{
+    return m_requestData.isOpenRequest();
+}
+
+bool IDBServerOperation::isDeleteRequest() const
+{
+    return m_requestData.isDeleteRequest();
+}
+
 } // namespace IDBServer
 } // namespace WebCore
 

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -43,6 +43,9 @@
     IDBConnectionToClient& connection() { return m_connection; }
     const IDBRequestData& requestData() const { return m_requestData; }
 
+    bool isOpenRequest() const;
+    bool isDeleteRequest() const;
+
 private:
     IDBServerOperation(IDBConnectionToClient&, const IDBRequestData&);
 

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2015-12-16 20:29:09 UTC (rev 194169)
@@ -109,6 +109,7 @@
 
     for (auto& operation : m_pendingDeleteDatabaseOperations) {
         ASSERT(m_databaseInfo);
+        ASSERT(operation->isDeleteRequest());
         operation->connection().didDeleteDatabase(IDBResultData::deleteDatabaseSuccess(operation->requestData().requestIdentifier(), *m_databaseInfo));
     }
 
@@ -158,10 +159,10 @@
         return;
     }
 
-    ASSERT(!m_versionChangeOperation);
+    ASSERT(!m_currentOperation);
     ASSERT(!m_versionChangeDatabaseConnection);
 
-    m_versionChangeOperation = adoptRef(operation.leakRef());
+    m_currentOperation = WTF::move(operation);
     m_versionChangeDatabaseConnection = rawConnection;
 
     // 3.3.7 "versionchange" transaction steps
@@ -175,7 +176,7 @@
     notifyConnectionsOfVersionChangeForUpgrade();
 
     // And we notify this OpenDBRequest that it is blocked until those connections close.
-    m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_versionChangeOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion);
+    m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_currentOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion);
 }
 
 bool UniqueIDBDatabase::hasAnyOpenConnections() const
@@ -245,11 +246,11 @@
     LOG(IndexedDB, "(main) UniqueIDBDatabase::startVersionChangeTransaction");
 
     ASSERT(!m_versionChangeTransaction);
-    ASSERT(m_versionChangeOperation);
+    ASSERT(m_currentOperation);
+    ASSERT(m_currentOperation->isOpenRequest());
     ASSERT(m_versionChangeDatabaseConnection);
 
-    auto operation = m_versionChangeOperation;
-    m_versionChangeOperation = nullptr;
+    auto operation = WTF::move(m_currentOperation);
 
     uint64_t requestedVersion = operation->requestData().requestedVersion();
     if (!requestedVersion)
@@ -275,10 +276,11 @@
 
 void UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade()
 {
-    ASSERT(m_versionChangeOperation);
+    ASSERT(m_currentOperation);
+    ASSERT(m_currentOperation->isOpenRequest());
     ASSERT(m_versionChangeDatabaseConnection);
 
-    notifyConnectionsOfVersionChange(m_versionChangeOperation->requestData().requestedVersion());
+    notifyConnectionsOfVersionChange(m_currentOperation->requestData().requestedVersion());
 }
 
 void UniqueIDBDatabase::notifyConnectionsOfVersionChange(uint64_t requestedVersion)
@@ -921,7 +923,7 @@
 
     // If the database was not deleted in the previous step, try to run a transaction now.
     if (m_pendingTransactions.isEmpty()) {
-        if (!hasAnyOpenConnections() && m_versionChangeOperation) {
+        if (!hasAnyOpenConnections() && m_currentOperation) {
             startVersionChangeTransaction();
             return;
         }

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -173,11 +173,11 @@
     
     Deque<Ref<IDBServerOperation>> m_pendingOpenDatabaseOperations;
     Deque<Ref<IDBServerOperation>> m_pendingDeleteDatabaseOperations;
+    RefPtr<IDBServerOperation> m_currentOperation;
 
     HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_openDatabaseConnections;
     HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_closePendingDatabaseConnections;
 
-    RefPtr<IDBServerOperation> m_versionChangeOperation;
     RefPtr<UniqueIDBDatabaseConnection> m_versionChangeDatabaseConnection;
     UniqueIDBDatabaseTransaction* m_versionChangeTransaction { nullptr };
 

Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp	2015-12-16 20:29:09 UTC (rev 194169)
@@ -38,6 +38,7 @@
     , m_requestIdentifier(std::make_unique<IDBResourceIdentifier>(connection, request))
     , m_databaseIdentifier(request.databaseIdentifier())
     , m_requestedVersion(request.version())
+    , m_requestType(request.requestType())
 {
 }
 
@@ -62,6 +63,7 @@
     , m_indexRecordType(other.m_indexRecordType)
     , m_databaseIdentifier(other.m_databaseIdentifier)
     , m_requestedVersion(other.m_requestedVersion)
+    , m_requestType(other.m_requestType)
 {
     if (other.m_requestIdentifier)
         m_requestIdentifier = std::make_unique<IDBResourceIdentifier>(*other.m_requestIdentifier);

Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h (194168 => 194169)


--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h	2015-12-16 20:06:00 UTC (rev 194168)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h	2015-12-16 20:29:09 UTC (rev 194169)
@@ -30,6 +30,7 @@
 
 #include "IDBDatabaseIdentifier.h"
 #include "IDBResourceIdentifier.h"
+#include "IndexedDB.h"
 
 namespace WebCore {
 
@@ -61,6 +62,9 @@
     const IDBDatabaseIdentifier& databaseIdentifier() const { return m_databaseIdentifier; }
     uint64_t requestedVersion() const;
 
+    bool isOpenRequest() const { return m_requestType == IndexedDB::RequestType::Open; }
+    bool isDeleteRequest() const { return m_requestType == IndexedDB::RequestType::Delete; }
+
     IDBRequestData isolatedCopy();
 
 private:
@@ -74,6 +78,8 @@
 
     IDBDatabaseIdentifier m_databaseIdentifier;
     uint64_t m_requestedVersion { 0 };
+
+    IndexedDB::RequestType m_requestType { IndexedDB::RequestType::Other };
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to