Changeset 275799 in webkit
- Timestamp:
- Apr 10, 2021, 10:56:53 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/IndexedDB/WebIDBServer.cpp (modified) (8 diffs)
-
NetworkProcess/IndexedDB/WebIDBServer.h (modified) (4 diffs)
-
NetworkProcess/NetworkConnectionToWebProcess.cpp (modified) (1 diff)
-
NetworkProcess/NetworkConnectionToWebProcess.h (modified) (1 diff)
-
NetworkProcess/NetworkConnectionToWebProcess.messages.in (modified) (1 diff)
-
NetworkProcess/NetworkProcess.cpp (modified) (5 diffs)
-
WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r275794 r275799 1 2021-04-10 Sihui Liu <sihui_liu@apple.com> 2 3 Unreviewed, reverting r275794, r275784, r275779 4 5 r275779 caused bots to crash and r275794, r275784 didn't fully fix it; reverting the patches to investigate. 6 7 Reverted changeset: 8 9 "Create WebIDBServer only when it is needed" 10 https://bugs.webkit.org/show_bug.cgi?id=224305 11 https://commits.webkit.org/r275779 12 1 13 2021-04-10 Sihui Liu <sihui_liu@apple.com> 2 14 -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp
r275794 r275799 35 35 namespace WebKit { 36 36 37 Ref<WebIDBServer> WebIDBServer::create(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester , CompletionHandler<void()>&& callback)38 { 39 return adoptRef(*new WebIDBServer(sessionID, directory, WTFMove(spaceRequester) , WTFMove(callback)));40 } 41 42 WebIDBServer::WebIDBServer(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester , CompletionHandler<void()>&& callback)37 Ref<WebIDBServer> WebIDBServer::create(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester) 38 { 39 return adoptRef(*new WebIDBServer(sessionID, directory, WTFMove(spaceRequester))); 40 } 41 42 WebIDBServer::WebIDBServer(PAL::SessionID sessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& spaceRequester) 43 43 : CrossThreadTaskHandler("com.apple.WebKit.IndexedDBServer", WTF::CrossThreadTaskHandler::AutodrainedPoolForRunLoop::Use) 44 , m_dataTaskCounter([weakThis = makeWeakPtr(this)](RefCounterEvent) {45 if (weakThis)46 weakThis->tryClose();47 })48 , m_closeCallback(WTFMove(callback))49 44 { 50 45 ASSERT(RunLoop::isMain()); … … 67 62 ASSERT(RunLoop::isMain()); 68 63 69 postTask([this, protectedThis = makeRef(*this), callback = WTFMove(callback) , token = m_dataTaskCounter.count()]() mutable {64 postTask([this, protectedThis = makeRef(*this), callback = WTFMove(callback)]() mutable { 70 65 ASSERT(!RunLoop::isMain()); 71 66 72 67 LockHolder locker(m_server->lock()); 73 postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token),origins = crossThreadCopy(m_server->getOrigins())]() mutable {68 postTaskReply(CrossThreadTask([callback = WTFMove(callback), origins = crossThreadCopy(m_server->getOrigins())]() mutable { 74 69 callback(WTFMove(origins)); 75 70 })); … … 81 76 ASSERT(RunLoop::isMain()); 82 77 83 postTask([this, protectedThis = makeRef(*this), modificationTime, callback = WTFMove(callback) , token = m_dataTaskCounter.count()]() mutable {78 postTask([this, protectedThis = makeRef(*this), modificationTime, callback = WTFMove(callback)]() mutable { 84 79 ASSERT(!RunLoop::isMain()); 85 80 86 81 LockHolder locker(m_server->lock()); 87 82 m_server->closeAndDeleteDatabasesModifiedSince(modificationTime); 88 postTaskReply(CrossThreadTask([callback = WTFMove(callback) , token = WTFMove(token)]() mutable {83 postTaskReply(CrossThreadTask([callback = WTFMove(callback)]() mutable { 89 84 callback(); 90 85 })); … … 96 91 ASSERT(RunLoop::isMain()); 97 92 98 postTask([this, protectedThis = makeRef(*this), originDatas = originDatas.isolatedCopy(), callback = WTFMove(callback) , token = m_dataTaskCounter.count()] () mutable {93 postTask([this, protectedThis = makeRef(*this), originDatas = originDatas.isolatedCopy(), callback = WTFMove(callback)] () mutable { 99 94 ASSERT(!RunLoop::isMain()); 100 95 101 96 LockHolder locker(m_server->lock()); 102 97 m_server->closeAndDeleteDatabasesForOrigins(originDatas); 103 postTaskReply(CrossThreadTask([callback = WTFMove(callback) , token = WTFMove(token)]() mutable {98 postTaskReply(CrossThreadTask([callback = WTFMove(callback)]() mutable { 104 99 callback(); 105 100 })); … … 111 106 ASSERT(RunLoop::isMain()); 112 107 113 postTask([this, protectedThis = makeRef(*this), oldOrigin = oldOrigin.isolatedCopy(), newOrigin = newOrigin.isolatedCopy(), callback = WTFMove(callback) , token = m_dataTaskCounter.count()] () mutable {108 postTask([this, protectedThis = makeRef(*this), oldOrigin = oldOrigin.isolatedCopy(), newOrigin = newOrigin.isolatedCopy(), callback = WTFMove(callback)] () mutable { 114 109 ASSERT(!RunLoop::isMain()); 115 110 116 111 LockHolder locker(m_server->lock()); 117 112 m_server->renameOrigin(oldOrigin, newOrigin); 118 postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable { 119 callback(); 120 })); 113 postTaskReply(CrossThreadTask(WTFMove(callback))); 121 114 }); 122 115 } … … 378 371 ASSERT(RunLoop::isMain()); 379 372 380 auto* takenConnection = m_connections.take(&connection); 381 if (!takenConnection) 382 return; 383 384 takenConnection->removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName()); 373 m_connections.remove(&connection); 374 connection.removeThreadMessageReceiver(Messages::WebIDBServer::messageReceiverName()); 385 375 postTask([this, protectedThis = makeRef(*this), connectionID = connection.uniqueID()] { 386 376 auto connection = m_connectionMap.take(connectionID); 377 387 378 ASSERT(connection); 388 379 … … 390 381 m_server->unregisterConnection(connection->connectionToClient()); 391 382 }); 392 393 tryClose();394 383 } 395 384 … … 427 416 } 428 417 429 void WebIDBServer::tryClose()430 {431 if (!m_connections.isEmpty() || m_dataTaskCounter.value())432 return;433 434 if (!m_closeCallback)435 return;436 437 close();438 m_closeCallback();439 }440 441 418 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h
r275779 r275799 32 32 #include <WebCore/StorageQuotaManager.h> 33 33 #include <wtf/CrossThreadTaskHandler.h> 34 #include <wtf/RefCounter.h>35 34 36 35 namespace WebCore { … … 45 44 class WebIDBServer final : public CrossThreadTaskHandler, public IPC::Connection::ThreadMessageReceiverRefCounted { 46 45 public: 47 static Ref<WebIDBServer> create(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& , CompletionHandler<void()>&&);46 static Ref<WebIDBServer> create(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&); 48 47 49 48 void getOrigins(CompletionHandler<void(HashSet<WebCore::SecurityOriginData>&&)>&&); … … 88 87 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 89 88 void dispatchToThread(WTF::Function<void()>&&); 89 void close(); 90 90 91 bool hasConnection() const { return !m_connections.isEmpty(); } 91 92 private: 92 WebIDBServer(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&& , CompletionHandler<void()>&&);93 WebIDBServer(PAL::SessionID, const String& directory, WebCore::IDBServer::IDBServer::StorageQuotaManagerSpaceRequester&&); 93 94 ~WebIDBServer(); 94 95 95 96 void postTask(WTF::Function<void()>&&); 96 97 void close();98 void tryClose();99 97 100 98 std::unique_ptr<WebCore::IDBServer::IDBServer> m_server; … … 103 101 HashMap<IPC::Connection::UniqueID, std::unique_ptr<WebIDBConnectionToClient>> m_connectionMap; 104 102 HashSet<IPC::Connection*> m_connections; 105 106 enum DataTaskCounterType { };107 using DataTaskCounter = RefCounter<DataTaskCounterType>;108 using DataTaskCounterToken = DataTaskCounter::Token;109 DataTaskCounter m_dataTaskCounter;110 CompletionHandler<void()> m_closeCallback;111 103 }; 112 104 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r275779 r275799 1242 1242 } 1243 1243 1244 void NetworkConnectionToWebProcess::addIDBConnection()1245 {1246 m_networkProcess->webIDBServer(m_sessionID).addConnection(m_connection.get(), m_webProcessIdentifier);1247 }1248 1244 1249 1245 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r275779 r275799 187 187 void broadcastConsoleMessage(JSC::MessageSource, JSC::MessageLevel, const String& message); 188 188 189 void addIDBConnection();190 191 189 private: 192 190 NetworkConnectionToWebProcess(NetworkProcess&, WebCore::ProcessIdentifier, PAL::SessionID, IPC::Connection::Identifier); -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r275779 r275799 108 108 SetResourceLoadSchedulingMode(WebCore::PageIdentifier webPageID, enum:uint8_t WebCore::LoadSchedulingMode mode) 109 109 PrioritizeResourceLoads(Vector<uint64_t> loadIdentifiers) 110 111 AddIDBConnection()112 110 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r275784 r275799 392 392 393 393 m_storageManagerSet->addConnection(connection.connection()); 394 395 webIDBServer(sessionID).addConnection(connection.connection(), identifier); 394 396 } 395 397 … … 551 553 552 554 m_storageManagerSet->remove(sessionID); 555 556 removeWebIDBServerIfPossible(sessionID); 553 557 } 554 558 … … 2327 2331 } 2328 2332 2329 auto spaceRequester =[this, weakThis = makeWeakPtr(this), sessionID](const auto& origin, uint64_t spaceRequested) {2333 return WebIDBServer::create(sessionID, path, [this, weakThis = makeWeakPtr(this), sessionID](const auto& origin, uint64_t spaceRequested) { 2330 2334 RefPtr<StorageQuotaManager> storageQuotaManager = weakThis ? this->storageQuotaManager(sessionID, origin) : nullptr; 2331 2335 return storageQuotaManager ? storageQuotaManager->requestSpaceOnBackgroundThread(spaceRequested) : StorageQuotaManager::Decision::Deny; 2332 }; 2333 auto closeHandler = [weakThis = makeWeakPtr(this), sessionID]() { 2334 if (weakThis) 2335 weakThis->m_webIDBServers.remove(sessionID); 2336 }; 2337 return WebIDBServer::create(sessionID, path, WTFMove(spaceRequester), WTFMove(closeHandler)); 2336 }); 2338 2337 } 2339 2338 … … 2363 2362 ASSERT(sessionStorageQuotaManager); 2364 2363 sessionStorageQuotaManager->setIDBRootPath(idbRootPath); 2364 } 2365 2366 void NetworkProcess::removeWebIDBServerIfPossible(PAL::SessionID sessionID) 2367 { 2368 ASSERT(RunLoop::isMain()); 2369 2370 auto iterator = m_webIDBServers.find(sessionID); 2371 if (iterator == m_webIDBServers.end()) 2372 return; 2373 2374 if (m_networkSessions.contains(sessionID)) 2375 return; 2376 2377 if (iterator->value->hasConnection()) 2378 return; 2379 2380 iterator->value->close(); 2381 m_webIDBServers.remove(iterator); 2365 2382 } 2366 2383 … … 2651 2668 m_storageManagerSet->removeConnection(connection); 2652 2669 2653 if (auto* server = m_webIDBServers.get(sessionID)) 2654 server->removeConnection(connection); 2670 auto* webIDBServer = m_webIDBServers.get(sessionID); 2671 ASSERT(webIDBServer); 2672 webIDBServer->removeConnection(connection); 2673 removeWebIDBServerIfPossible(sessionID); 2655 2674 } 2656 2675 -
trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp
r275779 r275799 60 60 : m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this)) 61 61 { 62 send(Messages::NetworkConnectionToWebProcess::AddIDBConnection());63 62 } 64 63
Note:
See TracChangeset
for help on using the changeset viewer.