Changeset 225935 in webkit
- Timestamp:
- Dec 14, 2017, 2:57:14 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/StorageProcess/StorageProcess.cpp (modified) (3 diffs)
-
Source/WebKit/StorageProcess/StorageProcess.h (modified) (1 diff)
-
Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.h (modified) (1 diff)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebProcessPool.h (modified) (1 diff)
-
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (modified) (5 diffs)
-
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r225934 r225935 1 2017-12-14 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-14 John Wilander <wilander@apple.com> 2 43 -
trunk/Source/WebKit/StorageProcess/StorageProcess.cpp
r225926 r225935 112 112 113 113 if (shouldRelaunch) 114 createServerToContextConnection( );114 createServerToContextConnection(std::nullopt); 115 115 } 116 116 … … 425 425 } 426 426 427 void StorageProcess::createServerToContextConnection( )427 void StorageProcess::createServerToContextConnection(std::optional<PAL::SessionID> sessionID) 428 428 { 429 429 if (m_waitingForServerToContextProcessConnection) … … 431 431 432 432 m_waitingForServerToContextProcessConnection = true; 433 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcess(), 0); 433 if (sessionID) 434 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcessForExplicitSession(*sessionID), 0); 435 else 436 parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcess(), 0); 434 437 } 435 438 -
trunk/Source/WebKit/StorageProcess/StorageProcess.h
r225926 r225935 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
r225877 r225935 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
r225877 r225935 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
r225877 r225935 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
r225877 r225935 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
r225877 r225935 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
r225877 r225935 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
r225924 r225935 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::existingNonDefaultDataStoreForSessionID(*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
r225877 r225935 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
r225877 r225935 56 56 namespace WebKit { 57 57 58 static HashMap<PAL::SessionID, WebsiteDataStore*>& nonDefaultDataStores() 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 if (m_sessionID != PAL::SessionID::defaultSessionID()) { 82 auto result = nonDefaultDataStores().add(sessionID, this); 83 ASSERT_UNUSED(result, result.isNewEntry); 84 } 85 74 86 platformInitialize(); 75 87 } … … 80 92 , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore")) 81 93 { 94 if (m_sessionID != PAL::SessionID::defaultSessionID()) { 95 auto result = nonDefaultDataStores().add(sessionID, this); 96 ASSERT_UNUSED(result, result.isNewEntry); 97 } 98 82 99 platformInitialize(); 83 100 } … … 85 102 WebsiteDataStore::~WebsiteDataStore() 86 103 { 104 if (m_sessionID != PAL::SessionID::defaultSessionID()) { 105 ASSERT(nonDefaultDataStores().get(m_sessionID) == this); 106 nonDefaultDataStores().remove(m_sessionID); 107 } 108 87 109 platformDestroy(); 88 110 … … 91 113 processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroySession(m_sessionID)); 92 114 } 115 } 116 117 WebsiteDataStore* WebsiteDataStore::existingNonDefaultDataStoreForSessionID(PAL::SessionID sessionID) 118 { 119 return nonDefaultDataStores().get(sessionID); 93 120 } 94 121 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r225877 r225935 92 92 virtual ~WebsiteDataStore(); 93 93 94 static WebsiteDataStore* existingNonDefaultDataStoreForSessionID(PAL::SessionID); 95 94 96 bool isPersistent() const { return !m_sessionID.isEphemeral(); } 95 97 PAL::SessionID sessionID() const { return m_sessionID; } -
trunk/Tools/ChangeLog
r225931 r225935 1 2017-12-14 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): 10 1 11 2017-12-14 Alex Christensen <achristensen@webkit.org> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm
r225877 r225935 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.