Diff
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -370,7 +370,9 @@
void GPUProcessProxy::createGPUProcessConnection(WebProcessProxy& webProcessProxy, IPC::Attachment&& connectionIdentifier, GPUProcessConnectionParameters&& parameters)
{
- addSession(webProcessProxy.websiteDataStore());
+ if (auto* store = webProcessProxy.websiteDataStore())
+ addSession(*store);
+
RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this);
startResponsivenessTimer(UseLazyStop::No);
sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID(), connectionIdentifier, parameters }, [this, weakThis = WeakPtr { *this }]() mutable {
Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -84,8 +84,10 @@
m_process->addMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_webPageID, *this);
m_process->addProvisionalPageProxy(*this);
- if (&m_process->websiteDataStore() != &m_page.websiteDataStore())
- m_process->processPool().pageBeginUsingWebsiteDataStore(m_page.identifier(), m_process->websiteDataStore());
+ m_websiteDataStore = m_process->websiteDataStore();
+ ASSERT(m_websiteDataStore);
+ if (m_websiteDataStore && m_websiteDataStore != &m_page.websiteDataStore())
+ m_process->processPool().pageBeginUsingWebsiteDataStore(m_page.identifier(), *m_websiteDataStore);
// If we are reattaching to a SuspendedPage, then the WebProcess' WebPage already exists and
// WebPageProxy::didCreateMainFrame() will not be called to initialize m_mainFrame. In such
@@ -113,8 +115,9 @@
if (!m_wasCommitted) {
m_page.inspectorController().willDestroyProvisionalPage(*this);
- if (&m_process->websiteDataStore() != &m_page.websiteDataStore())
- m_process->processPool().pageEndUsingWebsiteDataStore(m_page.identifier(), m_process->websiteDataStore());
+ auto dataStore = m_process->websiteDataStore();
+ if (dataStore && dataStore!= &m_page.websiteDataStore())
+ m_process->processPool().pageEndUsingWebsiteDataStore(m_page.identifier(), *dataStore);
m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_webPageID);
send(Messages::WebPage::Close());
Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h 2022-05-18 03:23:38 UTC (rev 294381)
@@ -61,6 +61,7 @@
class WebFrameProxy;
class WebPageProxy;
class WebProcessProxy;
+class WebsiteDataStore;
struct FrameInfoData;
struct NavigationActionData;
struct URLSchemeTaskParameters;
@@ -163,6 +164,8 @@
WebPageProxy& m_page;
WebCore::PageIdentifier m_webPageID;
Ref<WebProcessProxy> m_process;
+ // Keep WebsiteDataStore alive for provisional page load.
+ RefPtr<WebsiteDataStore> m_websiteDataStore;
std::unique_ptr<DrawingAreaProxy> m_drawingArea;
RefPtr<WebFrameProxy> m_mainFrame;
uint64_t m_navigationID;
Modified: trunk/Source/WebKit/UIProcess/SuspendedPageProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/SuspendedPageProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/SuspendedPageProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -53,7 +53,7 @@
{
for (auto* suspendedPage : allSuspendedPages()) {
auto& process = suspendedPage->process();
- if (&process.processPool() == &processPool && process.registrableDomain() == registrableDomain && &process.websiteDataStore() == &dataStore && process.crossOriginMode() != CrossOriginMode::Isolated && process.captivePortalMode() == captivePortalMode)
+ if (&process.processPool() == &processPool && process.registrableDomain() == registrableDomain && process.websiteDataStore() == &dataStore && process.crossOriginMode() != CrossOriginMode::Isolated && process.captivePortalMode() == captivePortalMode)
return &process;
}
return nullptr;
Modified: trunk/Source/WebKit/UIProcess/WebBackForwardCache.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebBackForwardCache.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebBackForwardCache.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -134,7 +134,8 @@
void WebBackForwardCache::removeEntriesForSession(PAL::SessionID sessionID)
{
removeEntriesMatching([sessionID](auto& item) {
- return item.backForwardCacheEntry()->process().websiteDataStore().sessionID() == sessionID;
+ auto* dataStore = item.backForwardCacheEntry()->process().websiteDataStore();
+ return dataStore && dataStore->sessionID() == sessionID;
});
}
Modified: trunk/Source/WebKit/UIProcess/WebLockRegistryProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebLockRegistryProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebLockRegistryProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -32,6 +32,7 @@
#include "WebProcessProxy.h"
#include "WebsiteDataStore.h"
#include <WebCore/WebLockIdentifier.h>
+#include <WebCore/WebLockManagerSnapshot.h>
#include <WebCore/WebLockRegistry.h>
namespace WebKit {
@@ -55,7 +56,13 @@
MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier());
m_hasEverRequestedLocks = true;
- m_process.websiteDataStore().webLockRegistry().requestLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) {
+ auto* dataStore = m_process.websiteDataStore();
+ if (!dataStore) {
+ m_process.send(Messages::RemoteWebLockRegistry::DidCompleteLockRequest(lockIdentifier, clientID, false), 0);
+ return;
+ }
+
+ dataStore->webLockRegistry().requestLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) {
if (weakThis)
weakThis->m_process.send(Messages::RemoteWebLockRegistry::DidCompleteLockRequest(lockIdentifier, clientID, success), 0);
}, [weakThis = WeakPtr { *this }, lockIdentifier, clientID] {
@@ -68,7 +75,8 @@
{
MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier());
MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier());
- m_process.websiteDataStore().webLockRegistry().releaseLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name));
+ if (auto* dataStore = m_process.websiteDataStore())
+ dataStore->webLockRegistry().releaseLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name));
}
void WebLockRegistryProxy::abortLockRequest(WebCore::ClientOrigin&& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, String&& name, CompletionHandler<void(bool)>&& completionHandler)
@@ -75,24 +83,40 @@
{
MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier());
MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier());
- m_process.websiteDataStore().webLockRegistry().abortLockRequest(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler));
+ auto* dataStore = m_process.websiteDataStore();
+ if (!dataStore) {
+ completionHandler(false);
+ return;
+ }
+
+ dataStore->webLockRegistry().abortLockRequest(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler));
}
void WebLockRegistryProxy::snapshot(WebCore::ClientOrigin&& clientOrigin, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&& completionHandler)
{
- m_process.websiteDataStore().webLockRegistry().snapshot(m_process.sessionID(), WTFMove(clientOrigin), WTFMove(completionHandler));
+ auto* dataStore = m_process.websiteDataStore();
+ if (!dataStore) {
+ completionHandler(WebCore::WebLockManagerSnapshot { });
+ return;
+ }
+
+ dataStore->webLockRegistry().snapshot(m_process.sessionID(), WTFMove(clientOrigin), WTFMove(completionHandler));
}
void WebLockRegistryProxy::clientIsGoingAway(WebCore::ClientOrigin&& clientOrigin, WebCore::ScriptExecutionContextIdentifier clientID)
{
MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier());
- m_process.websiteDataStore().webLockRegistry().clientIsGoingAway(m_process.sessionID(), WTFMove(clientOrigin), clientID);
+ if (auto* dataStore = WebsiteDataStore::existingDataStoreForSessionID(m_process.sessionID()))
+ dataStore->webLockRegistry().clientIsGoingAway(m_process.sessionID(), WTFMove(clientOrigin), clientID);
}
void WebLockRegistryProxy::processDidExit()
{
- if (m_hasEverRequestedLocks)
- m_process.websiteDataStore().webLockRegistry().clientsAreGoingAway(m_process.coreProcessIdentifier());
+ if (!m_hasEverRequestedLocks)
+ return;
+
+ if (auto* dataStore = WebsiteDataStore::existingDataStoreForSessionID(m_process.sessionID()))
+ dataStore->webLockRegistry().clientsAreGoingAway(m_process.coreProcessIdentifier());
}
#undef MESSAGE_CHECK
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -978,7 +978,8 @@
m_process = provisionalPage->process();
m_webPageID = provisionalPage->webPageID();
pageClient().didChangeWebPageID();
- m_websiteDataStore = m_process->websiteDataStore();
+ ASSERT(m_process->websiteDataStore());
+ m_websiteDataStore = *m_process->websiteDataStore();
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
m_contextIDForVisibilityPropagationInWebProcess = provisionalPage->contextIDForVisibilityPropagationInWebProcess();
@@ -3624,7 +3625,7 @@
removeAllMessageReceivers();
auto* navigation = navigationState().navigation(m_provisionalPage->navigationID());
bool didSuspendPreviousPage = navigation && !m_provisionalPage->isProcessSwappingOnNavigationResponse() ? suspendCurrentPageIfPossible(*navigation, mainFrameIDInPreviousProcess, m_provisionalPage->processSwapRequestedByClient(), shouldDelayClosingUntilFirstLayerFlush) : false;
- m_process->removeWebPage(*this, m_websiteDataStore.ptr() == &m_provisionalPage->process().websiteDataStore() ? WebProcessProxy::EndsUsingDataStore::No : WebProcessProxy::EndsUsingDataStore::Yes);
+ m_process->removeWebPage(*this, m_websiteDataStore.ptr() == m_provisionalPage->process().websiteDataStore() ? WebProcessProxy::EndsUsingDataStore::No : WebProcessProxy::EndsUsingDataStore::Yes);
// There is no way we'll be able to return to the page in the previous page so close it.
if (!didSuspendPreviousPage)
Modified: trunk/Source/WebKit/UIProcess/WebProcessCache.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebProcessCache.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebProcessCache.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -76,8 +76,7 @@
return false;
}
- auto sessionID = process.websiteDataStore().sessionID();
- if (sessionID.isEphemeral() && !process.processPool().hasPagesUsingWebsiteDataStore(process.websiteDataStore())) {
+ if (!process.websiteDataStore()) {
WEBPROCESSCACHE_RELEASE_LOG("canCacheProcess: Not caching process because this session has been destroyed", process.processIdentifier());
return false;
}
@@ -153,7 +152,7 @@
if (it == m_processesPerRegistrableDomain.end())
return nullptr;
- if (&it->value->process().websiteDataStore() != &dataStore)
+ if (it->value->process().websiteDataStore() != &dataStore)
return nullptr;
if (it->value->process().captivePortalMode() != captivePortalMode)
@@ -212,7 +211,8 @@
{
Vector<WebCore::RegistrableDomain> keysToRemove;
for (auto& pair : m_processesPerRegistrableDomain) {
- if (pair.value->process().websiteDataStore().sessionID() == sessionID) {
+ auto* dataStore = pair.value->process().websiteDataStore();
+ if (!dataStore || dataStore->sessionID() == sessionID) {
WEBPROCESSCACHE_RELEASE_LOG("clearAllProcessesForSession: Evicting process because its session was destroyed", pair.value->process().processIdentifier());
keysToRemove.append(pair.key);
}
@@ -222,7 +222,8 @@
Vector<uint64_t> pendingRequestsToRemove;
for (auto& pair : m_pendingAddRequests) {
- if (pair.value->process().websiteDataStore().sessionID() == sessionID) {
+ auto* dataStore = pair.value->process().websiteDataStore();
+ if (!dataStore || dataStore->sessionID() == sessionID) {
WEBPROCESSCACHE_RELEASE_LOG("clearAllProcessesForSession: Evicting process because its session was destroyed", pair.value->process().processIdentifier());
pendingRequestsToRemove.append(pair.key);
}
@@ -276,7 +277,8 @@
#endif
{
RELEASE_ASSERT(!m_process->pageCount());
- RELEASE_ASSERT_WITH_MESSAGE(!m_process->websiteDataStore().processes().contains(*m_process), "Only processes with pages should be registered with the data store");
+ auto* dataStore = m_process->websiteDataStore();
+ RELEASE_ASSERT_WITH_MESSAGE(dataStore && !dataStore->processes().contains(*m_process), "Only processes with pages should be registered with the data store");
m_process->setIsInProcessCache(true);
m_evictionTimer.startOneShot(cachedProcessLifetime);
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -576,7 +576,7 @@
// Prioritize the requesting WebProcess for running the service worker.
if (!remoteWorkerProcessProxy && !s_useSeparateServiceWorkerProcess && requestingProcess) {
- if (&requestingProcess->websiteDataStore() == websiteDataStore && requestingProcess->isMatchingRegistrableDomain(registrableDomain))
+ if (requestingProcess->websiteDataStore() == websiteDataStore && requestingProcess->isMatchingRegistrableDomain(registrableDomain))
useProcessForRemoteWorkers(*requestingProcess);
}
@@ -584,7 +584,7 @@
for (auto& process : processPool->m_processes) {
if (process.ptr() == processPool->m_prewarmedProcess.get() || process->isDummyProcessProxy())
continue;
- if (&process->websiteDataStore() != websiteDataStore)
+ if (process->websiteDataStore() != websiteDataStore)
continue;
if (!process->isMatchingRegistrableDomain(registrableDomain))
continue;
@@ -1092,7 +1092,7 @@
if (process->isRunningServiceWorkers())
continue;
#endif
- if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
+ if (mustMatchDataStore && process->websiteDataStore() != &websiteDataStore)
continue;
return process;
}
@@ -1132,7 +1132,7 @@
// Sharing processes, e.g. when creating the page via window.open().
process = &pageConfiguration->relatedPage()->ensureRunningProcess();
// We do not support several WebsiteDataStores sharing a single process.
- ASSERT(process->isDummyProcessProxy() || pageConfiguration->websiteDataStore() == &process->websiteDataStore());
+ ASSERT(process->isDummyProcessProxy() || pageConfiguration->websiteDataStore() == process->websiteDataStore());
ASSERT(&pageConfiguration->relatedPage()->websiteDataStore() == pageConfiguration->websiteDataStore());
} else if (!m_isDelayedWebProcessLaunchDisabled) {
// In the common case, we delay process launch until something is actually loaded in the page.
@@ -1982,7 +1982,7 @@
LOG(ProcessSwapping, "(ProcessSwapping) Considering re-use of a previously cached process for domain %s", targetRegistrableDomain.string().utf8().data());
if (auto* process = m_swappedProcessesPerRegistrableDomain.get(targetRegistrableDomain)) {
- if (&process->websiteDataStore() == dataStore.ptr()) {
+ if (process->websiteDataStore() == dataStore.ptr()) {
LOG(ProcessSwapping, "(ProcessSwapping) Reusing a previously cached process with pid %i to continue navigation to URL %s", process->processIdentifier(), targetURL.string().utf8().data());
return completionHandler(*process, nullptr, reason);
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -33,6 +33,7 @@
#include "DownloadProxyMap.h"
#include "LoadParameters.h"
#include "Logging.h"
+#include "NetworkProcessConnectionInfo.h"
#include "NotificationManagerMessageHandlerMessages.h"
#include "ProvisionalPageProxy.h"
#include "RemoteWorkerType.h"
@@ -241,7 +242,6 @@
#endif
, m_isResponsive(NoOrMaybe::Maybe)
, m_visiblePageCounter([this](RefCounterEvent) { updateBackgroundResponsivenessTimer(); })
- , m_websiteDataStore(websiteDataStore)
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
, m_userMediaCaptureManagerProxy(makeUnique<UserMediaCaptureManagerProxy>(makeUniqueRef<UIProxyForCapture>(*this)))
#endif
@@ -259,6 +259,8 @@
WebPasteboardProxy::singleton().addWebProcessProxy(*this);
+ if (websiteDataStore)
+ m_sessionID = websiteDataStore->sessionID();
platformInitialize();
}
@@ -346,11 +348,19 @@
}
}
+WebsiteDataStore* WebProcessProxy::websiteDataStore() const
+{
+ if (!m_sessionID)
+ return nullptr;
+
+ return WebsiteDataStore::existingDataStoreForSessionID(*m_sessionID);
+}
+
void WebProcessProxy::setWebsiteDataStore(WebsiteDataStore& dataStore)
{
- ASSERT(!m_websiteDataStore);
+ ASSERT(!m_sessionID);
WEBPROCESSPROXY_RELEASE_LOG(Process, "setWebsiteDataStore() dataStore=%p, sessionID=%" PRIu64, &dataStore, dataStore.sessionID().toUInt64());
- m_websiteDataStore = &dataStore;
+ m_sessionID = dataStore.sessionID();
updateRegistrationWithDataStore();
send(Messages::WebProcess::SetWebsiteDataStoreParameters(processPool().webProcessDataStoreParameters(*this, dataStore)), 0);
@@ -361,19 +371,17 @@
bool WebProcessProxy::isDummyProcessProxy() const
{
- return m_websiteDataStore && processPool().dummyProcessProxy(m_websiteDataStore->sessionID()) == this;
+ return m_sessionID && processPool().dummyProcessProxy(*m_sessionID) == this;
}
void WebProcessProxy::updateRegistrationWithDataStore()
{
- if (!m_websiteDataStore)
- return;
-
- bool shouldBeRegistered = pageCount() || provisionalPageCount();
- if (shouldBeRegistered)
- m_websiteDataStore->registerProcess(*this);
- else
- m_websiteDataStore->unregisterProcess(*this);
+ if (auto* dataStore = websiteDataStore()) {
+ if (pageCount() || provisionalPageCount())
+ dataStore->registerProcess(*this);
+ else
+ dataStore->unregisterProcess(*this);
+ }
}
void WebProcessProxy::addProvisionalPageProxy(ProvisionalPageProxy& provisionalPage)
@@ -596,7 +604,7 @@
ASSERT(!m_pageMap.contains(webPage.identifier()));
ASSERT(!globalPageMap().contains(webPage.identifier()));
RELEASE_ASSERT(!m_isInProcessCache);
- ASSERT(!m_websiteDataStore || m_websiteDataStore == &webPage.websiteDataStore());
+ ASSERT(!m_sessionID || websiteDataStore() == &webPage.websiteDataStore());
if (beginsUsingDataStore == BeginsUsingDataStore::Yes) {
RELEASE_ASSERT(m_processPool);
@@ -815,7 +823,11 @@
void WebProcessProxy::getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply)
{
- websiteDataStore().getNetworkProcessConnection(*this, WTFMove(reply));
+ auto* dataStore = websiteDataStore();
+ if (!dataStore)
+ return reply({ });
+
+ dataStore->getNetworkProcessConnection(*this, WTFMove(reply));
}
#if ENABLE(GPU_PROCESS)
@@ -1701,11 +1713,12 @@
}
auto registrableDomain = WebCore::RegistrableDomain { url };
- if (m_registrableDomain && *m_registrableDomain != registrableDomain) {
+ auto* dataStore = websiteDataStore();
+ if (dataStore && m_registrableDomain && *m_registrableDomain != registrableDomain) {
if (isRunningServiceWorkers())
- websiteDataStore().networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::ServiceWorker, websiteDataStore().sessionID(), *m_registrableDomain, coreProcessIdentifier());
+ dataStore->networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::ServiceWorker, dataStore->sessionID(), *m_registrableDomain, coreProcessIdentifier());
if (isRunningSharedWorkers())
- websiteDataStore().networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::SharedWorker, websiteDataStore().sessionID(), *m_registrableDomain, coreProcessIdentifier());
+ dataStore->networkProcess().terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType::SharedWorker, dataStore->sessionID(), *m_registrableDomain, coreProcessIdentifier());
// Null out registrable domain since this process has now been used for several domains.
m_registrableDomain = WebCore::RegistrableDomain { };
@@ -1752,8 +1765,8 @@
PAL::SessionID WebProcessProxy::sessionID() const
{
- ASSERT(m_websiteDataStore);
- return m_websiteDataStore->sessionID();
+ ASSERT(m_sessionID);
+ return *m_sessionID;
}
void WebProcessProxy::createSpeechRecognitionServer(SpeechRecognitionServerIdentifier identifier)
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2022-05-18 03:23:38 UTC (rev 294381)
@@ -167,7 +167,7 @@
void enableRemoteWorkers(RemoteWorkerType, const UserContentControllerIdentifier&);
void disableRemoteWorkers(RemoteWorkerType);
- WebsiteDataStore& websiteDataStore() const { ASSERT(m_websiteDataStore); return *m_websiteDataStore; }
+ WebsiteDataStore* websiteDataStore() const;
void setWebsiteDataStore(WebsiteDataStore&);
PAL::SessionID sessionID() const;
@@ -617,9 +617,8 @@
Vector<CompletionHandler<void(bool webProcessIsResponsive)>> m_isResponsiveCallbacks;
VisibleWebPageCounter m_visiblePageCounter;
+ std::optional<PAL::SessionID> m_sessionID;
- RefPtr<WebsiteDataStore> m_websiteDataStore;
-
bool m_isUnderMemoryPressure { false };
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp (294380 => 294381)
--- trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp 2022-05-18 02:19:29 UTC (rev 294380)
+++ trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp 2022-05-18 03:23:38 UTC (rev 294381)
@@ -42,7 +42,7 @@
launchOptions.extraInitializationData.set("enable-sandbox"_s, m_processPool->sandboxEnabled() ? "true"_s : "false"_s);
if (m_processPool->sandboxEnabled()) {
- WebsiteDataStore* dataStore = m_websiteDataStore.get();
+ WebsiteDataStore* dataStore = websiteDataStore();
if (!dataStore) {
// Prewarmed processes don't have a WebsiteDataStore yet, so use the primary WebsiteDataStore from the WebProcessPool.
// The process won't be used if current WebsiteDataStore is different than the WebProcessPool primary one.