Changeset 194169 in webkit
- Timestamp:
- Dec 16, 2015, 12:29:09 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
-
ChangeLog (modified) (1 diff)
-
Modules/indexeddb/IndexedDB.h (modified) (1 diff)
-
Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp (modified) (2 diffs)
-
Modules/indexeddb/client/IDBOpenDBRequestImpl.h (modified) (1 diff)
-
Modules/indexeddb/client/IDBRequestImpl.h (modified) (2 diffs)
-
Modules/indexeddb/server/IDBServerOperation.cpp (modified) (1 diff)
-
Modules/indexeddb/server/IDBServerOperation.h (modified) (1 diff)
-
Modules/indexeddb/server/UniqueIDBDatabase.cpp (modified) (6 diffs)
-
Modules/indexeddb/server/UniqueIDBDatabase.h (modified) (1 diff)
-
Modules/indexeddb/shared/IDBRequestData.cpp (modified) (2 diffs)
-
Modules/indexeddb/shared/IDBRequestData.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r194161 r194169 1 2015-12-16 Brady Eidson <beidson@apple.com> 2 3 Modern IDB: Have IDBServerOperations know whether they represent an open or delete request. 4 https://bugs.webkit.org/show_bug.cgi?id=152351 5 6 Reviewed by Alex Christensen. 7 8 No new tests (Refactor, existing tests pass). 9 10 * Modules/indexeddb/IndexedDB.h: 11 12 * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp: 13 (WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest): 14 (WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest): 15 (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest): 16 * Modules/indexeddb/client/IDBOpenDBRequestImpl.h: 17 18 * Modules/indexeddb/client/IDBRequestImpl.h: 19 (WebCore::IDBClient::IDBRequest::requestType): 20 21 * Modules/indexeddb/server/IDBServerOperation.cpp: 22 (WebCore::IDBServer::IDBServerOperation::isOpenRequest): 23 (WebCore::IDBServer::IDBServerOperation::isDeleteRequest): 24 * Modules/indexeddb/server/IDBServerOperation.h: 25 26 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 27 (WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase): 28 (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations): 29 (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction): 30 (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade): 31 (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired): 32 * Modules/indexeddb/server/UniqueIDBDatabase.h: 33 34 * Modules/indexeddb/shared/IDBRequestData.cpp: 35 (WebCore::IDBRequestData::IDBRequestData): 36 * Modules/indexeddb/shared/IDBRequestData.h: 37 (WebCore::IDBRequestData::isOpenRequest): 38 (WebCore::IDBRequestData::isDeleteRequest): 39 1 40 2015-12-16 Alex Christensen <achristensen@webkit.org> 2 41 -
trunk/Source/WebCore/Modules/indexeddb/IndexedDB.h
r194010 r194169 100 100 }; 101 101 102 enum class RequestType { 103 Open, 104 Delete, 105 Other, 106 }; 107 102 108 } // namespace IndexedDB 103 109 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp
r193970 r194169 42 42 { 43 43 ASSERT(databaseIdentifier.isValid()); 44 return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0 ));44 return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, 0, IndexedDB::RequestType::Delete)); 45 45 } 46 46 … … 48 48 { 49 49 ASSERT(databaseIdentifier.isValid()); 50 return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version ));50 return adoptRef(*new IDBOpenDBRequest(connection, context, databaseIdentifier, version, IndexedDB::RequestType::Open)); 51 51 } 52 52 53 IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version )53 IDBOpenDBRequest::IDBOpenDBRequest(IDBConnectionToServer& connection, ScriptExecutionContext* context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version, IndexedDB::RequestType requestType) 54 54 : IDBRequest(connection, context) 55 55 , m_databaseIdentifier(databaseIdentifier) 56 56 , m_version(version) 57 57 { 58 m_requestType = requestType; 58 59 } 59 60 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h
r193970 r194169 59 59 60 60 private: 61 IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version );61 IDBOpenDBRequest(IDBConnectionToServer&, ScriptExecutionContext*, const IDBDatabaseIdentifier&, uint64_t version, IndexedDB::RequestType); 62 62 63 63 void onError(const IDBResultData&); -
trunk/Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h
r193970 r194169 101 101 void setVersionChangeTransaction(IDBTransaction&); 102 102 103 IndexedDB::RequestType requestType() const { return m_requestType; } 104 103 105 protected: 104 106 IDBRequest(IDBConnectionToServer&, ScriptExecutionContext*); … … 127 129 RefPtr<DOMError> m_domError; 128 130 IDBError m_idbError; 131 IndexedDB::RequestType m_requestType = { IndexedDB::RequestType::Other }; 129 132 130 133 private: -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp
r190379 r194169 45 45 } 46 46 47 bool IDBServerOperation::isOpenRequest() const 48 { 49 return m_requestData.isOpenRequest(); 50 } 51 52 bool IDBServerOperation::isDeleteRequest() const 53 { 54 return m_requestData.isDeleteRequest(); 55 } 56 47 57 } // namespace IDBServer 48 58 } // namespace WebCore -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h
r190379 r194169 44 44 const IDBRequestData& requestData() const { return m_requestData; } 45 45 46 bool isOpenRequest() const; 47 bool isDeleteRequest() const; 48 46 49 private: 47 50 IDBServerOperation(IDBConnectionToClient&, const IDBRequestData&); -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
r194160 r194169 110 110 for (auto& operation : m_pendingDeleteDatabaseOperations) { 111 111 ASSERT(m_databaseInfo); 112 ASSERT(operation->isDeleteRequest()); 112 113 operation->connection().didDeleteDatabase(IDBResultData::deleteDatabaseSuccess(operation->requestData().requestIdentifier(), *m_databaseInfo)); 113 114 } … … 159 160 } 160 161 161 ASSERT(!m_ versionChangeOperation);162 ASSERT(!m_currentOperation); 162 163 ASSERT(!m_versionChangeDatabaseConnection); 163 164 164 m_ versionChangeOperation = adoptRef(operation.leakRef());165 m_currentOperation = WTF::move(operation); 165 166 m_versionChangeDatabaseConnection = rawConnection; 166 167 … … 176 177 177 178 // And we notify this OpenDBRequest that it is blocked until those connections close. 178 m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_ versionChangeOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion);179 m_versionChangeDatabaseConnection->connectionToClient().notifyOpenDBRequestBlocked(m_currentOperation->requestData().requestIdentifier(), m_databaseInfo->version(), requestedVersion); 179 180 } 180 181 … … 246 247 247 248 ASSERT(!m_versionChangeTransaction); 248 ASSERT(m_versionChangeOperation); 249 ASSERT(m_currentOperation); 250 ASSERT(m_currentOperation->isOpenRequest()); 249 251 ASSERT(m_versionChangeDatabaseConnection); 250 252 251 auto operation = m_versionChangeOperation; 252 m_versionChangeOperation = nullptr; 253 auto operation = WTF::move(m_currentOperation); 253 254 254 255 uint64_t requestedVersion = operation->requestData().requestedVersion(); … … 276 277 void UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade() 277 278 { 278 ASSERT(m_versionChangeOperation); 279 ASSERT(m_currentOperation); 280 ASSERT(m_currentOperation->isOpenRequest()); 279 281 ASSERT(m_versionChangeDatabaseConnection); 280 282 281 notifyConnectionsOfVersionChange(m_ versionChangeOperation->requestData().requestedVersion());283 notifyConnectionsOfVersionChange(m_currentOperation->requestData().requestedVersion()); 282 284 } 283 285 … … 922 924 // If the database was not deleted in the previous step, try to run a transaction now. 923 925 if (m_pendingTransactions.isEmpty()) { 924 if (!hasAnyOpenConnections() && m_ versionChangeOperation) {926 if (!hasAnyOpenConnections() && m_currentOperation) { 925 927 startVersionChangeTransaction(); 926 928 return; -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
r194160 r194169 174 174 Deque<Ref<IDBServerOperation>> m_pendingOpenDatabaseOperations; 175 175 Deque<Ref<IDBServerOperation>> m_pendingDeleteDatabaseOperations; 176 RefPtr<IDBServerOperation> m_currentOperation; 176 177 177 178 HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_openDatabaseConnections; 178 179 HashSet<RefPtr<UniqueIDBDatabaseConnection>> m_closePendingDatabaseConnections; 179 180 180 RefPtr<IDBServerOperation> m_versionChangeOperation;181 181 RefPtr<UniqueIDBDatabaseConnection> m_versionChangeDatabaseConnection; 182 182 UniqueIDBDatabaseTransaction* m_versionChangeTransaction { nullptr }; -
trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp
r192490 r194169 39 39 , m_databaseIdentifier(request.databaseIdentifier()) 40 40 , m_requestedVersion(request.version()) 41 , m_requestType(request.requestType()) 41 42 { 42 43 } … … 63 64 , m_databaseIdentifier(other.m_databaseIdentifier) 64 65 , m_requestedVersion(other.m_requestedVersion) 66 , m_requestType(other.m_requestType) 65 67 { 66 68 if (other.m_requestIdentifier) -
trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h
r192490 r194169 31 31 #include "IDBDatabaseIdentifier.h" 32 32 #include "IDBResourceIdentifier.h" 33 #include "IndexedDB.h" 33 34 34 35 namespace WebCore { … … 62 63 uint64_t requestedVersion() const; 63 64 65 bool isOpenRequest() const { return m_requestType == IndexedDB::RequestType::Open; } 66 bool isDeleteRequest() const { return m_requestType == IndexedDB::RequestType::Delete; } 67 64 68 IDBRequestData isolatedCopy(); 65 69 … … 75 79 IDBDatabaseIdentifier m_databaseIdentifier; 76 80 uint64_t m_requestedVersion { 0 }; 81 82 IndexedDB::RequestType m_requestType { IndexedDB::RequestType::Other }; 77 83 }; 78 84
Note:
See TracChangeset
for help on using the changeset viewer.