Changeset 200503 in webkit
- Timestamp:
- May 5, 2016 7:33:20 PM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r200501 r200503 1 2016-05-05 Brady Eidson <beidson@apple.com> 2 3 Modern IDB (Workers): Get everything to the right threads. 4 https://bugs.webkit.org/show_bug.cgi?id=157398 5 6 Reviewed by Alex Christensen. 7 8 No new tests (No current change in behavior, will be tested as bug 149953 is resolved, enabling IDB in workers). 9 10 * dom/ScriptExecutionContext.h: 11 (WebCore::ScriptExecutionContext::postCrossThreadTask): Add a helper to post a CrossThreadTask to a context. 12 13 * Modules/indexeddb/client/IDBConnectionProxy.cpp: 14 (WebCore::IDBClient::performCallbackOnCorrectThread): Helper to perform an IDB callback on either the main thread 15 or Worker thread as necessary. 16 (WebCore::IDBClient::IDBConnectionProxy::openDatabase): 17 (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase): 18 (WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest): 19 (WebCore::IDBClient::IDBConnectionProxy::createObjectStore): 20 (WebCore::IDBClient::IDBConnectionProxy::deleteObjectStore): 21 (WebCore::IDBClient::IDBConnectionProxy::clearObjectStore): 22 (WebCore::IDBClient::IDBConnectionProxy::createIndex): 23 (WebCore::IDBClient::IDBConnectionProxy::deleteIndex): 24 (WebCore::IDBClient::IDBConnectionProxy::putOrAdd): 25 (WebCore::IDBClient::IDBConnectionProxy::getRecord): 26 (WebCore::IDBClient::IDBConnectionProxy::getCount): 27 (WebCore::IDBClient::IDBConnectionProxy::deleteRecord): 28 (WebCore::IDBClient::IDBConnectionProxy::openCursor): 29 (WebCore::IDBClient::IDBConnectionProxy::iterateCursor): 30 (WebCore::IDBClient::IDBConnectionProxy::completeOperation): 31 (WebCore::IDBClient::IDBConnectionProxy::abortOpenAndUpgradeNeeded): 32 (WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent): 33 (WebCore::IDBClient::IDBConnectionProxy::didFireVersionChangeEvent): 34 (WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked): 35 (WebCore::IDBClient::IDBConnectionProxy::establishTransaction): 36 (WebCore::IDBClient::IDBConnectionProxy::didStartTransaction): 37 (WebCore::IDBClient::IDBConnectionProxy::commitTransaction): 38 (WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction): 39 (WebCore::IDBClient::IDBConnectionProxy::abortTransaction): 40 (WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction): 41 (WebCore::IDBClient::IDBConnectionProxy::didFinishHandlingVersionChangeTransaction): 42 (WebCore::IDBClient::IDBConnectionProxy::databaseConnectionClosed): 43 (WebCore::IDBClient::IDBConnectionProxy::scheduleMainThreadTasks): 44 (WebCore::IDBClient::IDBConnectionProxy::handleMainThreadTasks): 45 * Modules/indexeddb/client/IDBConnectionProxy.h: 46 (WebCore::IDBClient::IDBConnectionProxy::callConnectionOnMainThread): Helper to marshall IDB operations from the 47 Worker thread to the main thread. 48 (WebCore::IDBClient::IDBConnectionProxy::postMainThreadTask): 49 50 * Modules/indexeddb/IDBTransaction.cpp: 51 (WebCore::IDBTransaction::originThreadID): 52 * Modules/indexeddb/IDBTransaction.h: 53 54 * Modules/indexeddb/client/IDBConnectionToServer.cpp: 55 (WebCore::IDBClient::IDBConnectionToServer::putOrAdd): 56 * Modules/indexeddb/client/IDBConnectionToServer.h: 57 58 * Modules/indexeddb/client/IDBConnectionToServerDelegate.h: 59 60 * Modules/indexeddb/client/TransactionOperation.cpp: 61 (WebCore::IDBClient::TransactionOperation::scriptExecutionContext): 62 * Modules/indexeddb/client/TransactionOperation.h: 63 64 * Modules/indexeddb/shared/IDBResourceIdentifier.cpp: 65 (WebCore::nextClientResourceNumber): 66 67 * Modules/indexeddb/shared/InProcessIDBServer.cpp: 68 (WebCore::InProcessIDBServer::putOrAdd): 69 * Modules/indexeddb/shared/InProcessIDBServer.h: 70 1 71 2016-05-05 Dean Jackson <dino@apple.com> 2 72 -
trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp
r200495 r200503 1065 1065 } 1066 1066 1067 ThreadIdentifier IDBTransaction::originThreadID() const 1068 { 1069 return m_database->originThreadID(); 1070 } 1071 1067 1072 } // namespace WebCore 1068 1073 -
trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h
r200495 r200503 144 144 IDBClient::IDBConnectionProxy& connectionProxy(); 145 145 146 ThreadIdentifier originThreadID() const; 147 146 148 private: 147 149 IDBTransaction(IDBDatabase&, const IDBTransactionInfo&, IDBOpenDBRequest*); -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp
r200495 r200503 29 29 #if ENABLE(INDEXED_DATABASE) 30 30 31 #include "IDBCursorInfo.h" 31 32 #include "IDBDatabase.h" 33 #include "IDBKeyRangeData.h" 32 34 #include "IDBOpenDBRequest.h" 33 35 #include "IDBRequestData.h" 34 36 #include "IDBResultData.h" 37 #include "ScriptExecutionContext.h" 35 38 #include "SecurityOrigin.h" 36 39 #include <wtf/MainThread.h> … … 38 41 namespace WebCore { 39 42 namespace IDBClient { 43 44 template<typename T, typename... Parameters, typename... Arguments> 45 void performCallbackOnCorrectThread(T& object, void (T::*method)(Parameters...), Arguments&&... arguments) 46 { 47 ASSERT(isMainThread()); 48 49 if (object.originThreadID() == currentThread()) { 50 (object.*method)(arguments...); 51 return; 52 } 53 54 ScriptExecutionContext* context = object.scriptExecutionContext(); 55 if (!context) 56 return; 57 58 context->postCrossThreadTask(object, method, arguments...); 59 } 40 60 41 61 IDBConnectionProxy::IDBConnectionProxy(IDBConnectionToServer& connection) … … 58 78 RefPtr<IDBOpenDBRequest> IDBConnectionProxy::openDatabase(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier, uint64_t version) 59 79 { 60 // FIXME: Handle Workers61 if (!isMainThread())62 return nullptr;63 64 80 RefPtr<IDBOpenDBRequest> request; 65 81 { … … 71 87 } 72 88 73 IDBRequestData requestData(*this, *request); 74 75 // FIXME: For workers, marshall this to the main thread if necessary. 76 m_connectionToServer.openDatabase(requestData); 89 callConnectionOnMainThread(&IDBConnectionToServer::openDatabase, IDBRequestData(*this, *request)); 77 90 78 91 return request; … … 81 94 RefPtr<IDBOpenDBRequest> IDBConnectionProxy::deleteDatabase(ScriptExecutionContext& context, const IDBDatabaseIdentifier& databaseIdentifier) 82 95 { 83 // FIXME: Handle Workers84 if (!isMainThread())85 return nullptr;86 87 96 RefPtr<IDBOpenDBRequest> request; 88 97 { … … 94 103 } 95 104 96 IDBRequestData requestData(*this, *request); 97 98 // FIXME: For workers, marshall this to the main thread if necessary. 99 m_connectionToServer.deleteDatabase(requestData); 105 callConnectionOnMainThread(&IDBConnectionToServer::deleteDatabase, IDBRequestData(*this, *request)); 100 106 101 107 return request; … … 119 125 { 120 126 Locker<Lock> locker(m_openDBRequestMapLock); 121 request = m_openDBRequestMap. get(resultData.requestIdentifier());127 request = m_openDBRequestMap.take(resultData.requestIdentifier()); 122 128 ASSERT(request); 123 129 } 124 130 125 request->requestCompleted(resultData); 131 ASSERT(request); 132 133 performCallbackOnCorrectThread(*request, &IDBOpenDBRequest::requestCompleted, resultData); 126 134 } 127 135 128 136 void IDBConnectionProxy::createObjectStore(TransactionOperation& operation, const IDBObjectStoreInfo& info) 129 137 { 130 IDBRequestData requestData(operation); 131 saveOperation(operation); 132 133 // FIXME: Handle worker thread marshalling. 134 135 m_connectionToServer.createObjectStore(requestData, info); 138 const IDBRequestData requestData(operation); 139 saveOperation(operation); 140 141 callConnectionOnMainThread(&IDBConnectionToServer::createObjectStore, requestData, info); 136 142 } 137 143 138 144 void IDBConnectionProxy::deleteObjectStore(TransactionOperation& operation, const String& objectStoreName) 139 145 { 140 IDBRequestData requestData(operation); 141 saveOperation(operation); 142 143 // FIXME: Handle worker thread marshalling. 144 145 m_connectionToServer.deleteObjectStore(requestData, objectStoreName); 146 const IDBRequestData requestData(operation); 147 saveOperation(operation); 148 149 callConnectionOnMainThread(&IDBConnectionToServer::deleteObjectStore, requestData, objectStoreName); 146 150 } 147 151 148 152 void IDBConnectionProxy::clearObjectStore(TransactionOperation& operation, uint64_t objectStoreIdentifier) 149 153 { 150 IDBRequestData requestData(operation); 151 saveOperation(operation); 152 153 // FIXME: Handle worker thread marshalling. 154 155 m_connectionToServer.clearObjectStore(requestData, objectStoreIdentifier); 154 const IDBRequestData requestData(operation); 155 saveOperation(operation); 156 157 callConnectionOnMainThread(&IDBConnectionToServer::clearObjectStore, requestData, objectStoreIdentifier); 156 158 } 157 159 158 160 void IDBConnectionProxy::createIndex(TransactionOperation& operation, const IDBIndexInfo& info) 159 161 { 160 IDBRequestData requestData(operation); 161 saveOperation(operation); 162 163 // FIXME: Handle worker thread marshalling. 164 165 m_connectionToServer.createIndex(requestData, info); 162 const IDBRequestData requestData(operation); 163 saveOperation(operation); 164 165 callConnectionOnMainThread(&IDBConnectionToServer::createIndex, requestData, info); 166 166 } 167 167 168 168 void IDBConnectionProxy::deleteIndex(TransactionOperation& operation, uint64_t objectStoreIdentifier, const String& indexName) 169 169 { 170 IDBRequestData requestData(operation); 171 saveOperation(operation); 172 173 // FIXME: Handle worker thread marshalling. 174 175 m_connectionToServer.deleteIndex(requestData, objectStoreIdentifier, indexName); 170 const IDBRequestData requestData(operation); 171 saveOperation(operation); 172 173 callConnectionOnMainThread(&IDBConnectionToServer::deleteIndex, requestData, WTFMove(objectStoreIdentifier), indexName); 176 174 } 177 175 178 176 void IDBConnectionProxy::putOrAdd(TransactionOperation& operation, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode mode) 179 177 { 180 IDBRequestData requestData(operation); 181 saveOperation(operation); 182 183 // FIXME: Handle worker thread marshalling. 184 185 m_connectionToServer.putOrAdd(requestData, key, value, mode); 178 const IDBRequestData requestData(operation); 179 saveOperation(operation); 180 181 callConnectionOnMainThread(&IDBConnectionToServer::putOrAdd, requestData, IDBKeyData(key), value, mode); 186 182 } 187 183 188 184 void IDBConnectionProxy::getRecord(TransactionOperation& operation, const IDBKeyRangeData& keyRange) 189 185 { 190 IDBRequestData requestData(operation); 191 saveOperation(operation); 192 193 // FIXME: Handle worker thread marshalling. 194 195 m_connectionToServer.getRecord(requestData, keyRange); 186 const IDBRequestData requestData(operation); 187 saveOperation(operation); 188 189 callConnectionOnMainThread(&IDBConnectionToServer::getRecord, requestData, keyRange); 196 190 } 197 191 198 192 void IDBConnectionProxy::getCount(TransactionOperation& operation, const IDBKeyRangeData& keyRange) 199 193 { 200 IDBRequestData requestData(operation); 201 saveOperation(operation); 202 203 // FIXME: Handle worker thread marshalling. 204 205 m_connectionToServer.getCount(requestData, keyRange); 194 const IDBRequestData requestData(operation); 195 saveOperation(operation); 196 197 callConnectionOnMainThread(&IDBConnectionToServer::getCount, requestData, keyRange); 206 198 } 207 199 208 200 void IDBConnectionProxy::deleteRecord(TransactionOperation& operation, const IDBKeyRangeData& keyRange) 209 201 { 210 IDBRequestData requestData(operation); 211 saveOperation(operation); 212 213 // FIXME: Handle worker thread marshalling. 214 215 m_connectionToServer.deleteRecord(requestData, keyRange); 202 const IDBRequestData requestData(operation); 203 saveOperation(operation); 204 205 callConnectionOnMainThread(&IDBConnectionToServer::deleteRecord, requestData, keyRange); 216 206 } 217 207 218 208 void IDBConnectionProxy::openCursor(TransactionOperation& operation, const IDBCursorInfo& info) 219 209 { 220 IDBRequestData requestData(operation); 221 saveOperation(operation); 222 223 // FIXME: Handle worker thread marshalling. 224 225 m_connectionToServer.openCursor(requestData, info); 210 const IDBRequestData requestData(operation); 211 saveOperation(operation); 212 213 callConnectionOnMainThread(&IDBConnectionToServer::openCursor, requestData, info); 226 214 } 227 215 228 216 void IDBConnectionProxy::iterateCursor(TransactionOperation& operation, const IDBKeyData& key, unsigned long count) 229 217 { 230 IDBRequestData requestData(operation); 231 saveOperation(operation); 232 233 // FIXME: Handle worker thread marshalling. 234 235 m_connectionToServer.iterateCursor(requestData, key, count); 218 const IDBRequestData requestData(operation); 219 saveOperation(operation); 220 221 callConnectionOnMainThread(&IDBConnectionToServer::iterateCursor, requestData, key, count); 236 222 } 237 223 … … 254 240 ASSERT(operation); 255 241 256 // FIXME: Handle getting operation->completed() onto the correct thread via the IDBTransaction. 257 258 operation->completed(resultData); 242 performCallbackOnCorrectThread(*operation, &TransactionOperation::completed, resultData); 259 243 } 260 244 261 245 void IDBConnectionProxy::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 262 246 { 263 // FIXME: Handle workers 264 if (!isMainThread()) 265 return; 266 267 m_connectionToServer.abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier); 247 callConnectionOnMainThread(&IDBConnectionToServer::abortOpenAndUpgradeNeeded, databaseConnectionIdentifier, transactionIdentifier); 268 248 } 269 249 270 250 void IDBConnectionProxy::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) 271 251 { 272 ASSERT(isMainThread());273 274 252 RefPtr<IDBDatabase> database; 275 253 { … … 281 259 return; 282 260 283 database->fireVersionChangeEvent(requestIdentifier, requestedVersion);261 performCallbackOnCorrectThread(*database, &IDBDatabase::fireVersionChangeEvent, requestIdentifier, requestedVersion); 284 262 } 285 263 286 264 void IDBConnectionProxy::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier) 287 265 { 288 // FIXME: Handle Workers 289 if (!isMainThread()) 290 return; 291 292 m_connectionToServer.didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier); 266 callConnectionOnMainThread(&IDBConnectionToServer::didFireVersionChangeEvent, databaseConnectionIdentifier, requestIdentifier); 293 267 } 294 268 … … 305 279 ASSERT(request); 306 280 307 request->requestBlocked(oldVersion, newVersion);281 performCallbackOnCorrectThread(*request, &IDBOpenDBRequest::requestBlocked, oldVersion, newVersion); 308 282 } 309 283 … … 316 290 } 317 291 318 // FIXME: Handle Workers 319 if (!isMainThread()) 320 return; 321 322 m_connectionToServer.establishTransaction(transaction.database().databaseConnectionIdentifier(), transaction.info()); 292 callConnectionOnMainThread(&IDBConnectionToServer::establishTransaction, transaction.database().databaseConnectionIdentifier(), transaction.info()); 323 293 } 324 294 … … 333 303 ASSERT(transaction); 334 304 335 // FIXME: Handle hopping to the Worker thread here if necessary. 336 337 transaction->didStart(error); 305 performCallbackOnCorrectThread(*transaction, &IDBTransaction::didStart, error); 338 306 } 339 307 … … 346 314 } 347 315 348 // FIXME: Handle Workers 349 if (!isMainThread()) 350 return; 351 352 m_connectionToServer.commitTransaction(transaction.info().identifier()); 316 callConnectionOnMainThread(&IDBConnectionToServer::commitTransaction, transaction.info().identifier()); 353 317 } 354 318 … … 363 327 ASSERT(transaction); 364 328 365 // FIXME: Handle hopping to the Worker thread here if necessary. 366 367 transaction->didCommit(error); 329 performCallbackOnCorrectThread(*transaction, &IDBTransaction::didCommit, error); 368 330 } 369 331 … … 376 338 } 377 339 378 // FIXME: Handle Workers 379 if (!isMainThread()) 380 return; 381 382 m_connectionToServer.abortTransaction(transaction.info().identifier()); 340 callConnectionOnMainThread(&IDBConnectionToServer::abortTransaction, transaction.info().identifier()); 383 341 } 384 342 … … 393 351 ASSERT(transaction); 394 352 395 // FIXME: Handle hopping to the Worker thread here if necessary. 396 397 transaction->didAbort(error); 353 performCallbackOnCorrectThread(*transaction, &IDBTransaction::didAbort, error); 398 354 } 399 355 … … 408 364 void IDBConnectionProxy::didFinishHandlingVersionChangeTransaction(IDBTransaction& transaction) 409 365 { 410 // FIXME: Handle Workers 411 if (!isMainThread()) 366 callConnectionOnMainThread(&IDBConnectionToServer::didFinishHandlingVersionChangeTransaction, transaction.info().identifier()); 367 } 368 369 void IDBConnectionProxy::databaseConnectionClosed(IDBDatabase& database) 370 { 371 callConnectionOnMainThread(&IDBConnectionToServer::databaseConnectionClosed, database.databaseConnectionIdentifier()); 372 } 373 374 void IDBConnectionProxy::scheduleMainThreadTasks() 375 { 376 Locker<Lock> locker(m_mainThreadTaskLock); 377 if (m_mainThreadProtector) 412 378 return; 413 379 414 m_connectionToServer.didFinishHandlingVersionChangeTransaction(transaction.info().identifier()); 415 } 416 417 void IDBConnectionProxy::databaseConnectionClosed(IDBDatabase& database) 418 { 419 // FIXME: Handle Workers 420 if (!isMainThread()) 421 return; 422 423 m_connectionToServer.databaseConnectionClosed(database.databaseConnectionIdentifier()); 380 m_mainThreadProtector = &m_connectionToServer; 381 callOnMainThread([this] { 382 handleMainThreadTasks(); 383 }); 384 } 385 386 void IDBConnectionProxy::handleMainThreadTasks() 387 { 388 RefPtr<IDBConnectionToServer> protector; 389 { 390 Locker<Lock> locker(m_mainThreadTaskLock); 391 ASSERT(m_mainThreadProtector); 392 protector = WTFMove(m_mainThreadProtector); 393 } 394 395 while (auto task = m_mainThreadQueue.tryGetMessage()) 396 task->performTask(); 424 397 } 425 398 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h
r200495 r200503 28 28 #if ENABLE(INDEXED_DATABASE) 29 29 30 #include "CrossThreadTask.h" 30 31 #include "IDBConnectionToServer.h" 31 32 #include "IDBResourceIdentifier.h" … … 33 34 #include <functional> 34 35 #include <wtf/HashMap.h> 36 #include <wtf/MainThread.h> 37 #include <wtf/MessageQueue.h> 35 38 #include <wtf/RefPtr.h> 36 39 #include <wtf/Vector.h> … … 110 113 void saveOperation(TransactionOperation&); 111 114 115 template<typename... Parameters, typename... Arguments> 116 void callConnectionOnMainThread(void (IDBConnectionToServer::*method)(Parameters...), Arguments&&... arguments) 117 { 118 if (isMainThread()) 119 (m_connectionToServer.*method)(arguments...); 120 else 121 postMainThreadTask(m_connectionToServer, method, arguments...); 122 } 123 124 template<typename... Arguments> 125 void postMainThreadTask(Arguments&&... arguments) 126 { 127 auto task = createCrossThreadTask(arguments...); 128 m_mainThreadQueue.append(WTFMove(task)); 129 130 scheduleMainThreadTasks(); 131 } 132 133 void scheduleMainThreadTasks(); 134 void handleMainThreadTasks(); 135 112 136 IDBConnectionToServer& m_connectionToServer; 113 137 uint64_t m_serverConnectionIdentifier; … … 126 150 HashMap<IDBResourceIdentifier, RefPtr<TransactionOperation>> m_activeOperations; 127 151 Lock m_transactionOperationLock; 152 153 MessageQueue<CrossThreadTask> m_mainThreadQueue; 154 Lock m_mainThreadTaskLock; 155 RefPtr<IDBConnectionToServer> m_mainThreadProtector; 128 156 }; 129 157 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp
r200495 r200503 158 158 } 159 159 160 void IDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, IDBKey*key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)160 void IDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode) 161 161 { 162 162 LOG(IndexedDB, "IDBConnectionToServer::putOrAdd"); -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h
r200489 r200503 77 77 WEBCORE_EXPORT void didDeleteIndex(const IDBResultData&); 78 78 79 void putOrAdd(const IDBRequestData&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode);79 void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode); 80 80 WEBCORE_EXPORT void didPutOrAdd(const IDBResultData&); 81 81 -
trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h
r200352 r200503 35 35 class IDBCursorInfo; 36 36 class IDBIndexInfo; 37 class IDBKey;38 37 class IDBKeyData; 39 38 class IDBObjectStoreInfo; … … 68 67 virtual void createIndex(const IDBRequestData&, const IDBIndexInfo&) = 0; 69 68 virtual void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) = 0; 70 virtual void putOrAdd(const IDBRequestData&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) = 0;69 virtual void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) = 0; 71 70 virtual void getRecord(const IDBRequestData&, const IDBKeyRangeData&) = 0; 72 71 virtual void getCount(const IDBRequestData&, const IDBKeyRangeData&) = 0; -
trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp
r198762 r200503 45 45 } 46 46 47 ScriptExecutionContext* TransactionOperation::scriptExecutionContext() const 48 { 49 return m_transaction->scriptExecutionContext(); 50 } 51 47 52 } // namespace IDBClient 48 53 } // namespace WebCore -
trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.h
r200495 r200503 74 74 ThreadIdentifier originThreadID() const { return m_originThreadID; } 75 75 76 ScriptExecutionContext* scriptExecutionContext() const; 77 76 78 protected: 77 79 TransactionOperation(IDBTransaction& transaction) -
trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp
r200495 r200503 38 38 static uint64_t nextClientResourceNumber() 39 39 { 40 ASSERT(isMainThread()); 41 static uint64_t currentNumber = 1; 40 static std::atomic<uint64_t> currentNumber(1); 42 41 return currentNumber += 2; 43 42 } -
trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp
r200352 r200503 290 290 } 291 291 292 void InProcessIDBServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode) 293 { 294 RefPtr<InProcessIDBServer> self(this); 295 IDBKeyData keyData(key); 296 292 void InProcessIDBServer::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode) 293 { 294 RefPtr<InProcessIDBServer> self(this); 297 295 RunLoop::current().dispatch([this, self, requestData, keyData, value, overwriteMode] { 298 296 m_server->putOrAdd(requestData, keyData, value, overwriteMode); -
trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h
r200352 r200503 66 66 void createIndex(const IDBRequestData&, const IDBIndexInfo&) final; 67 67 void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) final; 68 void putOrAdd(const IDBRequestData&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) final;68 void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) final; 69 69 void getRecord(const IDBRequestData&, const IDBKeyRangeData&) final; 70 70 void getCount(const IDBRequestData&, const IDBKeyRangeData&) final; -
trunk/Source/WebCore/dom/ScriptExecutionContext.h
r199797 r200503 29 29 30 30 #include "ActiveDOMObject.h" 31 #include "CrossThreadTask.h" 31 32 #include "DOMTimer.h" 32 33 #include "ResourceRequest.h" … … 168 169 virtual void postTask(Task) = 0; // Executes the task on context's thread asynchronously. 169 170 171 template<typename... Arguments> 172 void postCrossThreadTask(Arguments&&... arguments) 173 { 174 auto crossThreadTask = createCrossThreadTask(arguments...); 175 auto* rawTask = crossThreadTask.release(); 176 postTask([=](ScriptExecutionContext&) { 177 std::unique_ptr<CrossThreadTask> task(rawTask); 178 task->performTask(); 179 }); 180 } 181 170 182 // Gets the next id in a circular sequence from 1 to 2^31-1. 171 183 int circularSequentialID(); -
trunk/Source/WebKit2/ChangeLog
r200500 r200503 1 2016-05-05 Brady Eidson <beidson@apple.com> 2 3 Modern IDB (Workers): Get everything to the right threads. 4 https://bugs.webkit.org/show_bug.cgi?id=157398 5 6 Reviewed by Alex Christensen. 7 8 * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp: 9 (WebKit::WebIDBConnectionToServer::putOrAdd): 10 * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h: 11 1 12 2016-05-05 Manuel Rego Casasnovas <rego@igalia.com> 2 13 -
trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp
r200352 r200503 132 132 } 133 133 134 void WebIDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode mode) 135 { 136 IDBKeyData keyData(key); 134 void WebIDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode mode) 135 { 137 136 send(Messages::WebIDBConnectionToClient::PutOrAdd(requestData, keyData, value, static_cast<unsigned>(mode))); 138 137 } -
trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h
r200352 r200503 56 56 void createIndex(const WebCore::IDBRequestData&, const WebCore::IDBIndexInfo&) final; 57 57 void deleteIndex(const WebCore::IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) final; 58 void putOrAdd(const WebCore::IDBRequestData&, WebCore::IDBKey*, const WebCore::IDBValue&, const WebCore::IndexedDB::ObjectStoreOverwriteMode) final;58 void putOrAdd(const WebCore::IDBRequestData&, const WebCore::IDBKeyData&, const WebCore::IDBValue&, const WebCore::IndexedDB::ObjectStoreOverwriteMode) final; 59 59 void getRecord(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&) final; 60 60 void getCount(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&) final;
Note: See TracChangeset
for help on using the changeset viewer.