Changeset 225864 in webkit
- Timestamp:
- Dec 13, 2017 12:20:18 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r225863 r225864 1 2017-12-13 Brady Eidson <beidson@apple.com> 2 3 REGRESSION (r225789): API tests WKProcessPool.InitialWarmedProcessUsed and WebKit.WebsiteDataStoreCustomPaths are failing. 4 https://bugs.webkit.org/show_bug.cgi?id=180722 5 6 Reviewed by Chris Dumez. 7 8 - Add a test-only accessor to get the number of WebProcesses hosting WebPages 9 - Have WebsiteDataStore keep track of all instances so they can be looked up by SessionID 10 - When the StorageProcess needs to establish a SW context connection on behalf of a specific SessionID, 11 the UI process will now prefer using the WebsiteDataStore associated with that SessionID. This allows 12 us to continue deferring creation of the default data store if it's not needed. 13 14 * StorageProcess/StorageProcess.cpp: 15 (WebKit::StorageProcess::connectionToContextProcessWasClosed): 16 (WebKit::StorageProcess::createServerToContextConnection): 17 * StorageProcess/StorageProcess.h: 18 19 * StorageProcess/StorageToWebProcessConnection.cpp: 20 (WebKit::StorageToWebProcessConnection::establishSWServerConnection): 21 22 * UIProcess/API/Cocoa/WKProcessPool.mm: 23 (-[WKProcessPool _webPageContentProcessCount]): 24 * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: 25 26 * UIProcess/Storage/StorageProcessProxy.cpp: 27 (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcess): 28 (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcessForExplicitSession): 29 * UIProcess/Storage/StorageProcessProxy.h: 30 * UIProcess/Storage/StorageProcessProxy.messages.in: 31 32 * UIProcess/WebProcessPool.cpp: 33 (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess): 34 * UIProcess/WebProcessPool.h: 35 36 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 37 (WebKit::WebsiteDataStore::WebsiteDataStore): 38 (WebKit::WebsiteDataStore::~WebsiteDataStore): 39 (WebKit::WebsiteDataStore::existingDataStoreForSessionID): 40 * UIProcess/WebsiteData/WebsiteDataStore.h: 41 1 42 2017-12-13 Per Arne Vollan <pvollan@apple.com> 2 43 -
trunk/Source/WebKit/StorageProcess/StorageProcess.cpp
r225711 r225864 112 112 113 113 if (shouldRelaunch) 114 createServerToContextConnection( );114 createServerToContextConnection(std::nullopt); 115 115 } 116 116 … … 428 428 } 429 429 430 void StorageProcess::createServerToContextConnection( )430 void StorageProcess::createServerToContextConnection(std::optional<PAL::SessionID> sessionID) 431 431 { 432 432 if (m_waitingForServerToContextProcessConnection) … … 434 434 435 435 m_waitingForServerToContextProcessConnection = true; 436 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcess(), 0); 436 if (sessionID) 437 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcessForExplicitSession(*sessionID), 0); 438 else 439 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcess(), 0); 437 440 } 438 441 -
trunk/Source/WebKit/StorageProcess/StorageProcess.h
r225622 r225864 90 90 // This will change in the future. 91 91 WebSWServerToContextConnection* globalServerToContextConnection(); 92 void createServerToContextConnection( );92 void createServerToContextConnection(std::optional<PAL::SessionID>); 93 93 94 94 WebCore::SWServer& swServerForSession(PAL::SessionID); -
trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp
r225622 r225864 172 172 173 173 if (!StorageProcess::singleton().globalServerToContextConnection()) 174 StorageProcess::singleton().createServerToContextConnection( );174 StorageProcess::singleton().createServerToContextConnection(sessionID); 175 175 } 176 176 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm
r225622 r225864 438 438 } 439 439 440 - (size_t)_webPageContentProcessCount 441 { 442 auto allWebProcesses = _processPool->processes(); 443 auto* serviceWorkerProcess = _processPool->serviceWorkerProxy(); 444 if (!serviceWorkerProcess) 445 return allWebProcesses.size(); 446 447 #if !ASSERT_DISABLED 448 bool serviceWorkerProcessWasFound = false; 449 for (auto& process : allWebProcesses) { 450 if (process == serviceWorkerProcess) { 451 serviceWorkerProcessWasFound = true; 452 break; 453 } 454 } 455 456 ASSERT(serviceWorkerProcessWasFound); 457 ASSERT(allWebProcesses.size() > 1); 458 #endif 459 460 return allWebProcesses.size() - 1; 461 } 462 440 463 - (void)_preconnectToServer:(NSURL *)serverURL 441 464 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h
r225622 r225864 86 86 - (void)_syncNetworkProcessCookies WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 87 87 88 // Test only. Returns web processes running web pages (does not include web processes running service workers) 89 - (size_t)_webPageContentProcessCount WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 90 88 91 // Test only. Should be called before any web content processes are launched. 89 92 + (void)_forceGameControllerFramework WK_API_AVAILABLE(macosx(10.13), ios(11.0)); -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp
r225289 r225864 224 224 void StorageProcessProxy::establishWorkerContextConnectionToStorageProcess() 225 225 { 226 m_processPool.establishWorkerContextConnectionToStorageProcess(*this); 226 m_processPool.establishWorkerContextConnectionToStorageProcess(*this, std::nullopt); 227 } 228 229 void StorageProcessProxy::establishWorkerContextConnectionToStorageProcessForExplicitSession(PAL::SessionID sessionID) 230 { 231 m_processPool.establishWorkerContextConnectionToStorageProcess(*this, sessionID); 227 232 } 228 233 #endif -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h
r225289 r225864 82 82 #if ENABLE(SERVICE_WORKER) 83 83 void establishWorkerContextConnectionToStorageProcess(); 84 void establishWorkerContextConnectionToStorageProcessForExplicitSession(PAL::SessionID); 84 85 #endif 85 86 -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in
r225289 r225864 34 34 #if ENABLE(SERVICE_WORKER) 35 35 EstablishWorkerContextConnectionToStorageProcess() 36 EstablishWorkerContextConnectionToStorageProcessForExplicitSession(PAL::SessionID explicitSession) 36 37 #endif 37 38 } -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r225850 r225864 590 590 591 591 #if ENABLE(SERVICE_WORKER) 592 void WebProcessPool::establishWorkerContextConnectionToStorageProcess(StorageProcessProxy& proxy )592 void WebProcessPool::establishWorkerContextConnectionToStorageProcess(StorageProcessProxy& proxy, std::optional<PAL::SessionID> sessionID) 593 593 { 594 594 ASSERT_UNUSED(proxy, &proxy == m_storageProcess); … … 597 597 return; 598 598 599 if (!m_websiteDataStore) 600 m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); 601 602 auto serviceWorkerProcessProxy = ServiceWorkerProcessProxy::create(*this, m_websiteDataStore->websiteDataStore()); 599 WebsiteDataStore* websiteDataStore = nullptr; 600 if (sessionID) 601 websiteDataStore = WebsiteDataStore::existingDataStoreForSessionID(*sessionID); 602 603 if (!websiteDataStore) { 604 if (!m_websiteDataStore) 605 m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); 606 websiteDataStore = &m_websiteDataStore->websiteDataStore(); 607 } 608 609 auto serviceWorkerProcessProxy = ServiceWorkerProcessProxy::create(*this, *websiteDataStore); 603 610 m_serviceWorkerProcess = serviceWorkerProcessProxy.ptr(); 611 604 612 updateProcessAssertions(); 605 initializeNewWebProcess(serviceWorkerProcessProxy.get(), m_websiteDataStore->websiteDataStore()); 613 initializeNewWebProcess(serviceWorkerProcessProxy.get(), *websiteDataStore); 614 606 615 m_processes.append(WTFMove(serviceWorkerProcessProxy)); 607 616 -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r225850 r225864 324 324 void storageProcessCrashed(StorageProcessProxy*); 325 325 #if ENABLE(SERVICE_WORKER) 326 void establishWorkerContextConnectionToStorageProcess(StorageProcessProxy& );326 void establishWorkerContextConnectionToStorageProcess(StorageProcessProxy&, std::optional<PAL::SessionID>); 327 327 bool isServiceWorker(uint64_t pageID) const { return m_serviceWorkerProcess && m_serviceWorkerProcess->pageID() == pageID; } 328 328 ServiceWorkerProcessProxy* serviceWorkerProxy() const { return m_serviceWorkerProcess; } -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r225827 r225864 56 56 namespace WebKit { 57 57 58 static HashMap<PAL::SessionID, WebsiteDataStore*>& allDataStores() 59 { 60 RELEASE_ASSERT(isMainThread()); 61 static NeverDestroyed<HashMap<PAL::SessionID, WebsiteDataStore*>> map; 62 return map; 63 } 64 58 65 Ref<WebsiteDataStore> WebsiteDataStore::createNonPersistent() 59 66 { … … 72 79 , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore")) 73 80 { 81 auto result = allDataStores().add(sessionID, this); 82 ASSERT_UNUSED(result, result.isNewEntry); 83 74 84 platformInitialize(); 75 85 } … … 80 90 , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore")) 81 91 { 92 auto result = allDataStores().add(sessionID, this); 93 ASSERT_UNUSED(result, result.isNewEntry); 94 82 95 platformInitialize(); 83 96 } … … 85 98 WebsiteDataStore::~WebsiteDataStore() 86 99 { 100 ASSERT(allDataStores().get(m_sessionID) == this); 101 allDataStores().remove(m_sessionID); 102 87 103 platformDestroy(); 88 104 … … 91 107 processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroySession(m_sessionID)); 92 108 } 109 } 110 111 WebsiteDataStore* WebsiteDataStore::existingDataStoreForSessionID(PAL::SessionID sessionID) 112 { 113 return allDataStores().get(sessionID); 93 114 } 94 115 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r225827 r225864 92 92 virtual ~WebsiteDataStore(); 93 93 94 static WebsiteDataStore* existingDataStoreForSessionID(PAL::SessionID); 95 94 96 bool isPersistent() const { return !m_sessionID.isEphemeral(); } 95 97 PAL::SessionID sessionID() const { return m_sessionID; } -
trunk/Tools/ChangeLog
r225857 r225864 1 2017-12-13 Brady Eidson <beidson@apple.com> 2 3 REGRESSION (r225789): API tests WKProcessPool.InitialWarmedProcessUsed and WebKit.WebsiteDataStoreCustomPaths are failing. 4 https://bugs.webkit.org/show_bug.cgi?id=180722 5 6 Reviewed by Chris Dumez. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm: 9 (TEST): Call a new SPI to get the count of WebProcesses hosting WebPages. 10 1 11 2017-12-13 Mark Lam <mark.lam@apple.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm
r215536 r225864 49 49 [webView _test_waitForDidFinishNavigation]; 50 50 51 EXPECT_EQ([pool _webP rocessCount], static_cast<size_t>(1));51 EXPECT_EQ([pool _webPageContentProcessCount], static_cast<size_t>(1)); 52 52 } 53 53
Note: See TracChangeset
for help on using the changeset viewer.