Changeset 294381 in webkit
- Timestamp:
- May 17, 2022, 8:23:38 PM (3 years ago)
- Location:
- trunk/Source/WebKit/UIProcess
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
r294264 r294381 371 371 void GPUProcessProxy::createGPUProcessConnection(WebProcessProxy& webProcessProxy, IPC::Attachment&& connectionIdentifier, GPUProcessConnectionParameters&& parameters) 372 372 { 373 addSession(webProcessProxy.websiteDataStore()); 373 if (auto* store = webProcessProxy.websiteDataStore()) 374 addSession(*store); 375 374 376 RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this); 375 377 startResponsivenessTimer(UseLazyStop::No); -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
r292863 r294381 85 85 m_process->addProvisionalPageProxy(*this); 86 86 87 if (&m_process->websiteDataStore() != &m_page.websiteDataStore()) 88 m_process->processPool().pageBeginUsingWebsiteDataStore(m_page.identifier(), m_process->websiteDataStore()); 87 m_websiteDataStore = m_process->websiteDataStore(); 88 ASSERT(m_websiteDataStore); 89 if (m_websiteDataStore && m_websiteDataStore != &m_page.websiteDataStore()) 90 m_process->processPool().pageBeginUsingWebsiteDataStore(m_page.identifier(), *m_websiteDataStore); 89 91 90 92 // If we are reattaching to a SuspendedPage, then the WebProcess' WebPage already exists and … … 114 116 m_page.inspectorController().willDestroyProvisionalPage(*this); 115 117 116 if (&m_process->websiteDataStore() != &m_page.websiteDataStore()) 117 m_process->processPool().pageEndUsingWebsiteDataStore(m_page.identifier(), m_process->websiteDataStore()); 118 auto dataStore = m_process->websiteDataStore(); 119 if (dataStore && dataStore!= &m_page.websiteDataStore()) 120 m_process->processPool().pageEndUsingWebsiteDataStore(m_page.identifier(), *dataStore); 118 121 119 122 m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_webPageID); -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h
r288605 r294381 62 62 class WebPageProxy; 63 63 class WebProcessProxy; 64 class WebsiteDataStore; 64 65 struct FrameInfoData; 65 66 struct NavigationActionData; … … 164 165 WebCore::PageIdentifier m_webPageID; 165 166 Ref<WebProcessProxy> m_process; 167 // Keep WebsiteDataStore alive for provisional page load. 168 RefPtr<WebsiteDataStore> m_websiteDataStore; 166 169 std::unique_ptr<DrawingAreaProxy> m_drawingArea; 167 170 RefPtr<WebFrameProxy> m_mainFrame; -
trunk/Source/WebKit/UIProcess/SuspendedPageProxy.cpp
r285594 r294381 54 54 for (auto* suspendedPage : allSuspendedPages()) { 55 55 auto& process = suspendedPage->process(); 56 if (&process.processPool() == &processPool && process.registrableDomain() == registrableDomain && &process.websiteDataStore() == &dataStore && process.crossOriginMode() != CrossOriginMode::Isolated && process.captivePortalMode() == captivePortalMode)56 if (&process.processPool() == &processPool && process.registrableDomain() == registrableDomain && process.websiteDataStore() == &dataStore && process.crossOriginMode() != CrossOriginMode::Isolated && process.captivePortalMode() == captivePortalMode) 57 57 return &process; 58 58 } -
trunk/Source/WebKit/UIProcess/WebBackForwardCache.cpp
r278318 r294381 135 135 { 136 136 removeEntriesMatching([sessionID](auto& item) { 137 return item.backForwardCacheEntry()->process().websiteDataStore().sessionID() == sessionID; 137 auto* dataStore = item.backForwardCacheEntry()->process().websiteDataStore(); 138 return dataStore && dataStore->sessionID() == sessionID; 138 139 }); 139 140 } -
trunk/Source/WebKit/UIProcess/WebLockRegistryProxy.cpp
r293329 r294381 33 33 #include "WebsiteDataStore.h" 34 34 #include <WebCore/WebLockIdentifier.h> 35 #include <WebCore/WebLockManagerSnapshot.h> 35 36 #include <WebCore/WebLockRegistry.h> 36 37 … … 56 57 m_hasEverRequestedLocks = true; 57 58 58 m_process.websiteDataStore().webLockRegistry().requestLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) { 59 auto* dataStore = m_process.websiteDataStore(); 60 if (!dataStore) { 61 m_process.send(Messages::RemoteWebLockRegistry::DidCompleteLockRequest(lockIdentifier, clientID, false), 0); 62 return; 63 } 64 65 dataStore->webLockRegistry().requestLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) { 59 66 if (weakThis) 60 67 weakThis->m_process.send(Messages::RemoteWebLockRegistry::DidCompleteLockRequest(lockIdentifier, clientID, success), 0); … … 69 76 MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier()); 70 77 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 71 m_process.websiteDataStore().webLockRegistry().releaseLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name)); 78 if (auto* dataStore = m_process.websiteDataStore()) 79 dataStore->webLockRegistry().releaseLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name)); 72 80 } 73 81 … … 76 84 MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier()); 77 85 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 78 m_process.websiteDataStore().webLockRegistry().abortLockRequest(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler)); 86 auto* dataStore = m_process.websiteDataStore(); 87 if (!dataStore) { 88 completionHandler(false); 89 return; 90 } 91 92 dataStore->webLockRegistry().abortLockRequest(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler)); 79 93 } 80 94 81 95 void WebLockRegistryProxy::snapshot(WebCore::ClientOrigin&& clientOrigin, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&& completionHandler) 82 96 { 83 m_process.websiteDataStore().webLockRegistry().snapshot(m_process.sessionID(), WTFMove(clientOrigin), WTFMove(completionHandler)); 97 auto* dataStore = m_process.websiteDataStore(); 98 if (!dataStore) { 99 completionHandler(WebCore::WebLockManagerSnapshot { }); 100 return; 101 } 102 103 dataStore->webLockRegistry().snapshot(m_process.sessionID(), WTFMove(clientOrigin), WTFMove(completionHandler)); 84 104 } 85 105 … … 87 107 { 88 108 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 89 m_process.websiteDataStore().webLockRegistry().clientIsGoingAway(m_process.sessionID(), WTFMove(clientOrigin), clientID); 109 if (auto* dataStore = WebsiteDataStore::existingDataStoreForSessionID(m_process.sessionID())) 110 dataStore->webLockRegistry().clientIsGoingAway(m_process.sessionID(), WTFMove(clientOrigin), clientID); 90 111 } 91 112 92 113 void WebLockRegistryProxy::processDidExit() 93 114 { 94 if (m_hasEverRequestedLocks) 95 m_process.websiteDataStore().webLockRegistry().clientsAreGoingAway(m_process.coreProcessIdentifier()); 115 if (!m_hasEverRequestedLocks) 116 return; 117 118 if (auto* dataStore = WebsiteDataStore::existingDataStoreForSessionID(m_process.sessionID())) 119 dataStore->webLockRegistry().clientsAreGoingAway(m_process.coreProcessIdentifier()); 96 120 } 97 121 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r294325 r294381 979 979 m_webPageID = provisionalPage->webPageID(); 980 980 pageClient().didChangeWebPageID(); 981 m_websiteDataStore = m_process->websiteDataStore(); 981 ASSERT(m_process->websiteDataStore()); 982 m_websiteDataStore = *m_process->websiteDataStore(); 982 983 983 984 #if HAVE(VISIBILITY_PROPAGATION_VIEW) … … 3625 3626 auto* navigation = navigationState().navigation(m_provisionalPage->navigationID()); 3626 3627 bool didSuspendPreviousPage = navigation && !m_provisionalPage->isProcessSwappingOnNavigationResponse() ? suspendCurrentPageIfPossible(*navigation, mainFrameIDInPreviousProcess, m_provisionalPage->processSwapRequestedByClient(), shouldDelayClosingUntilFirstLayerFlush) : false; 3627 m_process->removeWebPage(*this, m_websiteDataStore.ptr() == &m_provisionalPage->process().websiteDataStore() ? WebProcessProxy::EndsUsingDataStore::No : WebProcessProxy::EndsUsingDataStore::Yes);3628 m_process->removeWebPage(*this, m_websiteDataStore.ptr() == m_provisionalPage->process().websiteDataStore() ? WebProcessProxy::EndsUsingDataStore::No : WebProcessProxy::EndsUsingDataStore::Yes); 3628 3629 3629 3630 // There is no way we'll be able to return to the page in the previous page so close it. -
trunk/Source/WebKit/UIProcess/WebProcessCache.cpp
r290291 r294381 77 77 } 78 78 79 auto sessionID = process.websiteDataStore().sessionID(); 80 if (sessionID.isEphemeral() && !process.processPool().hasPagesUsingWebsiteDataStore(process.websiteDataStore())) { 79 if (!process.websiteDataStore()) { 81 80 WEBPROCESSCACHE_RELEASE_LOG("canCacheProcess: Not caching process because this session has been destroyed", process.processIdentifier()); 82 81 return false; … … 154 153 return nullptr; 155 154 156 if ( &it->value->process().websiteDataStore() != &dataStore)155 if (it->value->process().websiteDataStore() != &dataStore) 157 156 return nullptr; 158 157 … … 213 212 Vector<WebCore::RegistrableDomain> keysToRemove; 214 213 for (auto& pair : m_processesPerRegistrableDomain) { 215 if (pair.value->process().websiteDataStore().sessionID() == sessionID) { 214 auto* dataStore = pair.value->process().websiteDataStore(); 215 if (!dataStore || dataStore->sessionID() == sessionID) { 216 216 WEBPROCESSCACHE_RELEASE_LOG("clearAllProcessesForSession: Evicting process because its session was destroyed", pair.value->process().processIdentifier()); 217 217 keysToRemove.append(pair.key); … … 223 223 Vector<uint64_t> pendingRequestsToRemove; 224 224 for (auto& pair : m_pendingAddRequests) { 225 if (pair.value->process().websiteDataStore().sessionID() == sessionID) { 225 auto* dataStore = pair.value->process().websiteDataStore(); 226 if (!dataStore || dataStore->sessionID() == sessionID) { 226 227 WEBPROCESSCACHE_RELEASE_LOG("clearAllProcessesForSession: Evicting process because its session was destroyed", pair.value->process().processIdentifier()); 227 228 pendingRequestsToRemove.append(pair.key); … … 277 278 { 278 279 RELEASE_ASSERT(!m_process->pageCount()); 279 RELEASE_ASSERT_WITH_MESSAGE(!m_process->websiteDataStore().processes().contains(*m_process), "Only processes with pages should be registered with the data store"); 280 auto* dataStore = m_process->websiteDataStore(); 281 RELEASE_ASSERT_WITH_MESSAGE(dataStore && !dataStore->processes().contains(*m_process), "Only processes with pages should be registered with the data store"); 280 282 m_process->setIsInProcessCache(true); 281 283 m_evictionTimer.startOneShot(cachedProcessLifetime); -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r293829 r294381 577 577 // Prioritize the requesting WebProcess for running the service worker. 578 578 if (!remoteWorkerProcessProxy && !s_useSeparateServiceWorkerProcess && requestingProcess) { 579 if ( &requestingProcess->websiteDataStore() == websiteDataStore && requestingProcess->isMatchingRegistrableDomain(registrableDomain))579 if (requestingProcess->websiteDataStore() == websiteDataStore && requestingProcess->isMatchingRegistrableDomain(registrableDomain)) 580 580 useProcessForRemoteWorkers(*requestingProcess); 581 581 } … … 585 585 if (process.ptr() == processPool->m_prewarmedProcess.get() || process->isDummyProcessProxy()) 586 586 continue; 587 if ( &process->websiteDataStore() != websiteDataStore)587 if (process->websiteDataStore() != websiteDataStore) 588 588 continue; 589 589 if (!process->isMatchingRegistrableDomain(registrableDomain)) … … 1093 1093 continue; 1094 1094 #endif 1095 if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)1095 if (mustMatchDataStore && process->websiteDataStore() != &websiteDataStore) 1096 1096 continue; 1097 1097 return process; … … 1133 1133 process = &pageConfiguration->relatedPage()->ensureRunningProcess(); 1134 1134 // We do not support several WebsiteDataStores sharing a single process. 1135 ASSERT(process->isDummyProcessProxy() || pageConfiguration->websiteDataStore() == &process->websiteDataStore());1135 ASSERT(process->isDummyProcessProxy() || pageConfiguration->websiteDataStore() == process->websiteDataStore()); 1136 1136 ASSERT(&pageConfiguration->relatedPage()->websiteDataStore() == pageConfiguration->websiteDataStore()); 1137 1137 } else if (!m_isDelayedWebProcessLaunchDisabled) { … … 1983 1983 1984 1984 if (auto* process = m_swappedProcessesPerRegistrableDomain.get(targetRegistrableDomain)) { 1985 if ( &process->websiteDataStore() == dataStore.ptr()) {1985 if (process->websiteDataStore() == dataStore.ptr()) { 1986 1986 LOG(ProcessSwapping, "(ProcessSwapping) Reusing a previously cached process with pid %i to continue navigation to URL %s", process->processIdentifier(), targetURL.string().utf8().data()); 1987 1987 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r293829 r294381 34 34 #include "LoadParameters.h" 35 35 #include "Logging.h" 36 #include "NetworkProcessConnectionInfo.h" 36 37 #include "NotificationManagerMessageHandlerMessages.h" 37 38 #include "ProvisionalPageProxy.h" … … 242 243 , m_isResponsive(NoOrMaybe::Maybe) 243 244 , m_visiblePageCounter([this](RefCounterEvent) { updateBackgroundResponsivenessTimer(); }) 244 , m_websiteDataStore(websiteDataStore)245 245 #if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM) 246 246 , m_userMediaCaptureManagerProxy(makeUnique<UserMediaCaptureManagerProxy>(makeUniqueRef<UIProxyForCapture>(*this))) … … 260 260 WebPasteboardProxy::singleton().addWebProcessProxy(*this); 261 261 262 if (websiteDataStore) 263 m_sessionID = websiteDataStore->sessionID(); 262 264 platformInitialize(); 263 265 } … … 347 349 } 348 350 351 WebsiteDataStore* WebProcessProxy::websiteDataStore() const 352 { 353 if (!m_sessionID) 354 return nullptr; 355 356 return WebsiteDataStore::existingDataStoreForSessionID(*m_sessionID); 357 } 358 349 359 void WebProcessProxy::setWebsiteDataStore(WebsiteDataStore& dataStore) 350 360 { 351 ASSERT(!m_ websiteDataStore);361 ASSERT(!m_sessionID); 352 362 WEBPROCESSPROXY_RELEASE_LOG(Process, "setWebsiteDataStore() dataStore=%p, sessionID=%" PRIu64, &dataStore, dataStore.sessionID().toUInt64()); 353 m_ websiteDataStore = &dataStore;363 m_sessionID = dataStore.sessionID(); 354 364 updateRegistrationWithDataStore(); 355 365 send(Messages::WebProcess::SetWebsiteDataStoreParameters(processPool().webProcessDataStoreParameters(*this, dataStore)), 0); … … 362 372 bool WebProcessProxy::isDummyProcessProxy() const 363 373 { 364 return m_ websiteDataStore && processPool().dummyProcessProxy(m_websiteDataStore->sessionID()) == this;374 return m_sessionID && processPool().dummyProcessProxy(*m_sessionID) == this; 365 375 } 366 376 367 377 void WebProcessProxy::updateRegistrationWithDataStore() 368 378 { 369 if (!m_websiteDataStore) 370 return; 371 372 bool shouldBeRegistered = pageCount() || provisionalPageCount(); 373 if (shouldBeRegistered) 374 m_websiteDataStore->registerProcess(*this); 375 else 376 m_websiteDataStore->unregisterProcess(*this); 379 if (auto* dataStore = websiteDataStore()) { 380 if (pageCount() || provisionalPageCount()) 381 dataStore->registerProcess(*this); 382 else 383 dataStore->unregisterProcess(*this); 384 } 377 385 } 378 386 … … 597 605 ASSERT(!globalPageMap().contains(webPage.identifier())); 598 606 RELEASE_ASSERT(!m_isInProcessCache); 599 ASSERT(!m_ websiteDataStore || m_websiteDataStore== &webPage.websiteDataStore());607 ASSERT(!m_sessionID || websiteDataStore() == &webPage.websiteDataStore()); 600 608 601 609 if (beginsUsingDataStore == BeginsUsingDataStore::Yes) { … … 816 824 void WebProcessProxy::getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply) 817 825 { 818 websiteDataStore().getNetworkProcessConnection(*this, WTFMove(reply)); 826 auto* dataStore = websiteDataStore(); 827 if (!dataStore) 828 return reply({ }); 829 830 dataStore->getNetworkProcessConnection(*this, WTFMove(reply)); 819 831 } 820 832 … … 1702 1714 1703 1715 auto registrableDomain = WebCore::RegistrableDomain { url }; 1704 if (m_registrableDomain && *m_registrableDomain != registrableDomain) { 1716 auto* dataStore = websiteDataStore(); 1717 if (dataStore && m_registrableDomain && *m_registrableDomain != registrableDomain) { 1705 1718 if (isRunningServiceWorkers()) 1706 websiteDataStore().networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::ServiceWorker, websiteDataStore().sessionID(), *m_registrableDomain, coreProcessIdentifier());1719 dataStore->networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::ServiceWorker, dataStore->sessionID(), *m_registrableDomain, coreProcessIdentifier()); 1707 1720 if (isRunningSharedWorkers()) 1708 websiteDataStore().networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::SharedWorker, websiteDataStore().sessionID(), *m_registrableDomain, coreProcessIdentifier());1721 dataStore->networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::SharedWorker, dataStore->sessionID(), *m_registrableDomain, coreProcessIdentifier()); 1709 1722 1710 1723 // Null out registrable domain since this process has now been used for several domains. … … 1753 1766 PAL::SessionID WebProcessProxy::sessionID() const 1754 1767 { 1755 ASSERT(m_ websiteDataStore);1756 return m_websiteDataStore->sessionID();1768 ASSERT(m_sessionID); 1769 return *m_sessionID; 1757 1770 } 1758 1771 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r293829 r294381 168 168 void disableRemoteWorkers(RemoteWorkerType); 169 169 170 WebsiteDataStore & websiteDataStore() const { ASSERT(m_websiteDataStore); return *m_websiteDataStore; }170 WebsiteDataStore* websiteDataStore() const; 171 171 void setWebsiteDataStore(WebsiteDataStore&); 172 172 … … 618 618 619 619 VisibleWebPageCounter m_visiblePageCounter; 620 621 RefPtr<WebsiteDataStore> m_websiteDataStore; 620 std::optional<PAL::SessionID> m_sessionID; 622 621 623 622 bool m_isUnderMemoryPressure { false }; -
trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp
r292408 r294381 43 43 44 44 if (m_processPool->sandboxEnabled()) { 45 WebsiteDataStore* dataStore = m_websiteDataStore.get();45 WebsiteDataStore* dataStore = websiteDataStore(); 46 46 if (!dataStore) { 47 47 // Prewarmed processes don't have a WebsiteDataStore yet, so use the primary WebsiteDataStore from the WebProcessPool.
Note:
See TracChangeset
for help on using the changeset viewer.