Diff
Modified: trunk/Source/WebKit/ChangeLog (249646 => 249647)
--- trunk/Source/WebKit/ChangeLog 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/ChangeLog 2019-09-09 17:02:14 UTC (rev 249647)
@@ -1,5 +1,55 @@
2019-09-09 Youenn Fablet <[email protected]>
+ Remove ServiceWorkerProcessProxy
+ https://bugs.webkit.org/show_bug.cgi?id=201506
+
+ Reviewed by Chris Dumez.
+
+ Instead of using a specific ServiceWorkerProcessProxy, move the logic directly in WebProcessProxy.
+ This will allow us in the future to run a service worker in a process that already runs a web page,
+ thus saving the need to spin off a new process.
+
+ This patch adds a new WebProcessProxy::createForServiceWorkers method instead of creating a
+ ServiceWorkerProcessProxy. The behavior is then similar: a process running a service worker cannot run a page.
+
+ * Sources.txt:
+ * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+ (-[WKWebsiteDataStore _hasRegisteredServiceWorker]):
+ * UIProcess/BackgroundProcessResponsivenessTimer.cpp:
+ (WebKit::BackgroundProcessResponsivenessTimer::shouldBeActive const):
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::openNetworkProcessConnection):
+ * UIProcess/ServiceWorkerProcessProxy.cpp: Removed.
+ * UIProcess/ServiceWorkerProcessProxy.h: Removed.
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
+ (WebKit::WebProcessPool::disconnectProcess):
+ (WebKit::WebProcessPool::processForRegistrableDomain):
+ (WebKit::WebProcessPool::createWebPage):
+ (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
+ (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers):
+ (WebKit::WebProcessPool::updateProcessAssertions):
+ (WebKit::WebProcessPool::isServiceWorkerPageID const):
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::createForServiceWorkers):
+ (WebKit::WebProcessProxy::getLaunchOptions):
+ (WebKit::WebProcessProxy::didBecomeUnresponsive):
+ (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const):
+ (WebKit::WebProcessProxy::didSetAssertionState):
+ (WebKit::WebProcessProxy::didExceedCPULimit):
+ (WebKit::WebProcessProxy::establishServiceWorkerContext):
+ (WebKit::WebProcessProxy::setServiceWorkerUserAgent):
+ (WebKit::WebProcessProxy::updateServiceWorkerPreferencesStore):
+ * UIProcess/WebProcessProxy.h:
+ (WebKit::WebProcessProxy::isRunningServiceWorkers const):
+ (WebKit::WebProcessProxy::hasServiceWorkerPageProxy):
+ * UIProcess/glib/WebProcessPoolGLib.cpp:
+ (WebKit::WebProcessPool::platformInitializeWebProcess):
+ * WebKit.xcodeproj/project.pbxproj:
+
+2019-09-09 Youenn Fablet <[email protected]>
+
Use WebProcess processIdentifier to identify IDB connections between WebProcess and NetworkProcess
https://bugs.webkit.org/show_bug.cgi?id=201419
Modified: trunk/Source/WebKit/Sources.txt (249646 => 249647)
--- trunk/Source/WebKit/Sources.txt 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/Sources.txt 2019-09-09 17:02:14 UTC (rev 249647)
@@ -250,7 +250,6 @@
UIProcess/ProvisionalPageProxy.cpp
UIProcess/RemoteWebInspectorProxy.cpp
UIProcess/ResponsivenessTimer.cpp
-UIProcess/ServiceWorkerProcessProxy.cpp
UIProcess/StatisticsRequest.cpp
UIProcess/SuspendedPageProxy.cpp
UIProcess/SystemPreviewController.cpp
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2019-09-09 17:02:14 UTC (rev 249647)
@@ -41,7 +41,7 @@
#import "_WKWebsiteDataStoreConfiguration.h"
#import "_WKWebsiteDataStoreDelegate.h"
#import <WebCore/Credential.h>
-#import <WebKit/ServiceWorkerProcessProxy.h>
+#import <WebCore/RegistrationDatabase.h>
#import <wtf/BlockPtr.h>
#import <wtf/URL.h>
#import <wtf/WeakObjCPtr.h>
@@ -578,7 +578,7 @@
- (bool)_hasRegisteredServiceWorker
{
- return WebKit::ServiceWorkerProcessProxy::hasRegisteredServiceWorkers(_websiteDataStore->websiteDataStore().serviceWorkerRegistrationDirectory());
+ return FileSystem::fileExists(WebCore::serviceWorkerRegistrationDatabaseFilename(_websiteDataStore->websiteDataStore().serviceWorkerRegistrationDirectory()));
}
- (id <_WKWebsiteDataStoreDelegate>)_delegate
Modified: trunk/Source/WebKit/UIProcess/BackgroundProcessResponsivenessTimer.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/BackgroundProcessResponsivenessTimer.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/BackgroundProcessResponsivenessTimer.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -135,7 +135,7 @@
{
#if !PLATFORM(IOS_FAMILY)
// Service worker process are always in the background.
- if (m_webProcessProxy.isServiceWorkerProcess())
+ if (m_webProcessProxy.isRunningServiceWorkers())
return true;
return !m_webProcessProxy.visiblePageCount() && m_webProcessProxy.pageCount();
#else
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -145,9 +145,9 @@
bool isServiceWorkerProcess = false;
RegistrableDomain registrableDomain;
#if ENABLE(SERVICE_WORKER)
- if (is<ServiceWorkerProcessProxy>(webProcessProxy)) {
+ if (webProcessProxy.isRunningServiceWorkers()) {
isServiceWorkerProcess = true;
- registrableDomain = downcast<ServiceWorkerProcessProxy>(webProcessProxy).registrableDomain();
+ registrableDomain = webProcessProxy.registrableDomain();
}
#endif
Deleted: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "ServiceWorkerProcessProxy.h"
-
-#if ENABLE(SERVICE_WORKER)
-
-#include "AuthenticationChallengeDisposition.h"
-#include "AuthenticationChallengeProxy.h"
-#include "AuthenticationDecisionListener.h"
-#include "WebCredential.h"
-#include "WebPageGroup.h"
-#include "WebPreferencesStore.h"
-#include "WebProcessMessages.h"
-#include "WebProcessPool.h"
-#include "WebSWContextManagerConnectionMessages.h"
-#include <WebCore/NotImplemented.h>
-#include <WebCore/RegistrationDatabase.h>
-
-namespace WebKit {
-using namespace WebCore;
-
-Ref<ServiceWorkerProcessProxy> ServiceWorkerProcessProxy::create(WebProcessPool& pool, const RegistrableDomain& registrableDomain, WebsiteDataStore& store)
-{
- auto proxy = adoptRef(*new ServiceWorkerProcessProxy { pool, registrableDomain, store });
- proxy->connect();
- return proxy;
-}
-
-ServiceWorkerProcessProxy::ServiceWorkerProcessProxy(WebProcessPool& pool, const RegistrableDomain& registrableDomain, WebsiteDataStore& store)
- : WebProcessProxy { pool, &store, IsPrewarmed::No }
- , m_registrableDomain(registrableDomain)
- , m_serviceWorkerPageProxyID(WebPageProxyIdentifier::generate())
- , m_serviceWorkerPageID(PageIdentifier::generate())
-{
-}
-
-ServiceWorkerProcessProxy::~ServiceWorkerProcessProxy()
-{
-}
-
-bool ServiceWorkerProcessProxy::hasRegisteredServiceWorkers(const String& serviceWorkerDirectory)
-{
- String registrationFile = WebCore::serviceWorkerRegistrationDatabaseFilename(serviceWorkerDirectory);
- return FileSystem::fileExists(registrationFile);
-}
-
-void ServiceWorkerProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
-{
- WebProcessProxy::getLaunchOptions(launchOptions);
-
- launchOptions.extraInitializationData.add("service-worker-process"_s, "1"_s);
- launchOptions.extraInitializationData.add("registrable-domain"_s, registrableDomain().string());
-}
-
-void ServiceWorkerProcessProxy::start(const WebPreferencesStore& store, Optional<PAL::SessionID> initialSessionID)
-{
- send(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerPageProxyID, m_serviceWorkerPageID, store, initialSessionID.valueOr(PAL::SessionID::defaultSessionID()) }, 0);
-}
-
-void ServiceWorkerProcessProxy::setUserAgent(const String& userAgent)
-{
- send(Messages::WebSWContextManagerConnection::SetUserAgent { userAgent }, 0);
-}
-
-void ServiceWorkerProcessProxy::updatePreferencesStore(const WebPreferencesStore& store)
-{
- send(Messages::WebSWContextManagerConnection::UpdatePreferencesStore { store }, 0);
-}
-
-} // namespace WebKit
-
-#endif // ENABLE(SERVICE_WORKER)
Deleted: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h 2019-09-09 17:02:14 UTC (rev 249647)
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(SERVICE_WORKER)
-
-#include "WebProcessProxy.h"
-#include <WebCore/RegistrableDomain.h>
-
-namespace WebKit {
-class AuthenticationChallengeProxy;
-struct WebPreferencesStore;
-
-class ServiceWorkerProcessProxy final : public WebProcessProxy {
-public:
- static Ref<ServiceWorkerProcessProxy> create(WebProcessPool&, const WebCore::RegistrableDomain&, WebsiteDataStore&);
- ~ServiceWorkerProcessProxy();
-
- static bool hasRegisteredServiceWorkers(const String& serviceWorkerDirectory);
-
- void start(const WebPreferencesStore&, Optional<PAL::SessionID> initialSessionID);
- void setUserAgent(const String&);
- void updatePreferencesStore(const WebPreferencesStore&);
-
- const WebCore::RegistrableDomain& registrableDomain() { return m_registrableDomain; }
- WebPageProxyIdentifier webPageProxyID() const { return m_serviceWorkerPageProxyID; }
- WebCore::PageIdentifier webPageID() const { return m_serviceWorkerPageID; }
-
-private:
- // AuxiliaryProcessProxy
- void getLaunchOptions(ProcessLauncher::LaunchOptions&) final;
-
- bool isServiceWorkerProcess() const final { return true; }
-
- ServiceWorkerProcessProxy(WebProcessPool&, const WebCore::RegistrableDomain&, WebsiteDataStore&);
-
- WebCore::RegistrableDomain m_registrableDomain;
- WebPageProxyIdentifier m_serviceWorkerPageProxyID;
- WebCore::PageIdentifier m_serviceWorkerPageID;
-};
-
-} // namespace WebKit
-
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebKit::ServiceWorkerProcessProxy)
- static bool isType(const WebKit::WebProcessProxy& webProcessProxy) { return webProcessProxy.isServiceWorkerProcess(); }
-SPECIALIZE_TYPE_TRAITS_END()
-
-#endif // ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -49,7 +49,6 @@
#include "PerActivityStateCPUUsageSampler.h"
#include "PluginProcessManager.h"
#include "SandboxExtension.h"
-#include "ServiceWorkerProcessProxy.h"
#include "StatisticsData.h"
#include "TextChecker.h"
#include "UIGamepad.h"
@@ -86,6 +85,7 @@
#include <WebCore/PlatformScreen.h>
#include <WebCore/ProcessIdentifier.h>
#include <WebCore/ProcessWarming.h>
+#include <WebCore/RegistrationDatabase.h>
#include <WebCore/ResourceRequest.h>
#include <WebCore/RuntimeApplicationChecks.h>
#include <WebCore/RuntimeEnabledFeatures.h>
@@ -709,8 +709,8 @@
if (m_serviceWorkerProcesses.isEmpty())
sendToAllProcesses(Messages::WebProcess::RegisterServiceWorkerClients { });
- auto serviceWorkerProcessProxy = ServiceWorkerProcessProxy::create(*this, registrableDomain, *websiteDataStore);
- m_serviceWorkerProcesses.add(WTFMove(registrableDomain), serviceWorkerProcessProxy.ptr());
+ auto serviceWorkerProcessProxy = WebProcessProxy::createForServiceWorkers(*this, WTFMove(registrableDomain), *websiteDataStore);
+ m_serviceWorkerProcesses.add(serviceWorkerProcessProxy->registrableDomain(), serviceWorkerProcessProxy.ptr());
updateProcessAssertions();
initializeNewWebProcess(serviceWorkerProcessProxy, websiteDataStore);
@@ -718,9 +718,9 @@
auto* serviceWorkerProcessProxyPtr = serviceWorkerProcessProxy.ptr();
m_processes.append(WTFMove(serviceWorkerProcessProxy));
- serviceWorkerProcessProxyPtr->start(m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() : m_defaultPageGroup->preferences().store(), sessionID);
+ serviceWorkerProcessProxyPtr->establishServiceWorkerContext(m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() : m_defaultPageGroup->preferences().store(), sessionID.valueOr(PAL::SessionID::defaultSessionID()));
if (!m_serviceWorkerUserAgent.isNull())
- serviceWorkerProcessProxyPtr->setUserAgent(m_serviceWorkerUserAgent);
+ serviceWorkerProcessProxyPtr->setServiceWorkerUserAgent(m_serviceWorkerUserAgent);
}
#endif
@@ -1126,8 +1126,8 @@
});
#if ENABLE(SERVICE_WORKER)
- if (is<ServiceWorkerProcessProxy>(*process)) {
- auto* removedProcess = m_serviceWorkerProcesses.take(downcast<ServiceWorkerProcessProxy>(*process).registrableDomain());
+ if (process->isRunningServiceWorkers()) {
+ auto* removedProcess = m_serviceWorkerProcesses.take(process->registrableDomain());
ASSERT_UNUSED(removedProcess, removedProcess == process);
updateProcessAssertions();
}
@@ -1187,7 +1187,7 @@
if (process == m_prewarmedProcess || process == m_dummyProcessProxy)
continue;
#if ENABLE(SERVICE_WORKER)
- if (is<ServiceWorkerProcessProxy>(*process))
+ if (process->isRunningServiceWorkers())
continue;
#endif
if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
@@ -1241,12 +1241,12 @@
auto page = process->createWebPage(pageClient, WTFMove(pageConfiguration));
#if ENABLE(SERVICE_WORKER)
- ASSERT(!is<ServiceWorkerProcessProxy>(*process));
+ ASSERT(!process->isRunningServiceWorkers());
if (!m_serviceWorkerPreferences) {
m_serviceWorkerPreferences = page->preferencesStore();
for (auto* serviceWorkerProcess : m_serviceWorkerProcesses.values())
- serviceWorkerProcess->updatePreferencesStore(*m_serviceWorkerPreferences);
+ serviceWorkerProcess->updateServiceWorkerPreferencesStore(*m_serviceWorkerPreferences);
}
#endif
@@ -1274,7 +1274,7 @@
return;
m_serviceWorkerUserAgent = userAgent;
for (auto* serviceWorkerProcess : m_serviceWorkerProcesses.values())
- serviceWorkerProcess->setUserAgent(m_serviceWorkerUserAgent);
+ serviceWorkerProcess->setServiceWorkerUserAgent(m_serviceWorkerUserAgent);
}
bool WebProcessPool::mayHaveRegisteredServiceWorkers(const WebsiteDataStore& store)
@@ -1288,7 +1288,7 @@
return m_mayHaveRegisteredServiceWorkers.ensure(serviceWorkerRegistrationDirectory, [&] {
// FIXME: Make this computation on a background thread.
- return ServiceWorkerProcessProxy::hasRegisteredServiceWorkers(serviceWorkerRegistrationDirectory);
+ return FileSystem::fileExists(WebCore::serviceWorkerRegistrationDatabaseFilename(serviceWorkerRegistrationDirectory));
}).iterator->value;
}
#endif
@@ -2132,9 +2132,9 @@
if (!m_serviceWorkerProcesses.isEmpty() && m_foregroundWebProcessCounter.value()) {
// FIXME: We can do better than this once we have process per origin.
for (auto* serviceWorkerProcess : m_serviceWorkerProcesses.values()) {
- auto& registrableDomain = serviceWorkerProcess->registrableDomain();
+ auto registrableDomain = serviceWorkerProcess->registrableDomain();
if (!m_foregroundTokensForServiceWorkerProcesses.contains(registrableDomain))
- m_foregroundTokensForServiceWorkerProcesses.add(registrableDomain, serviceWorkerProcess->throttler().foregroundActivityToken());
+ m_foregroundTokensForServiceWorkerProcesses.add(WTFMove(registrableDomain), serviceWorkerProcess->throttler().foregroundActivityToken());
}
m_backgroundTokensForServiceWorkerProcesses.clear();
return;
@@ -2142,9 +2142,9 @@
if (!m_serviceWorkerProcesses.isEmpty() && m_backgroundWebProcessCounter.value()) {
// FIXME: We can do better than this once we have process per origin.
for (auto* serviceWorkerProcess : m_serviceWorkerProcesses.values()) {
- auto& registrableDomain = serviceWorkerProcess->registrableDomain();
+ auto registrableDomain = serviceWorkerProcess->registrableDomain();
if (!m_backgroundTokensForServiceWorkerProcesses.contains(registrableDomain))
- m_backgroundTokensForServiceWorkerProcesses.add(registrableDomain, serviceWorkerProcess->throttler().backgroundActivityToken());
+ m_backgroundTokensForServiceWorkerProcesses.add(WTFMove(registrableDomain), serviceWorkerProcess->throttler().backgroundActivityToken());
}
m_foregroundTokensForServiceWorkerProcesses.clear();
return;
@@ -2198,10 +2198,9 @@
{
#if ENABLE(SERVICE_WORKER)
// FIXME: This is inefficient.
- for (auto* serviceWorkerProcess : m_serviceWorkerProcesses.values()) {
- if (serviceWorkerProcess->webPageProxyID() == pageID)
- return true;
- }
+ return WTF::anyOf(m_serviceWorkerProcesses.values(), [pageID](auto* process) {
+ return process->hasServiceWorkerPageProxy(pageID);
+ });
#endif
return false;
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-09 17:02:14 UTC (rev 249647)
@@ -38,7 +38,6 @@
#include "PlugInAutoStartProvider.h"
#include "PluginInfoStore.h"
#include "ProcessThrottler.h"
-#include "ServiceWorkerProcessProxy.h"
#include "StatisticsRequest.h"
#include "VisitedLinkStore.h"
#include "WebContextClient.h"
@@ -100,7 +99,6 @@
class HighPerformanceGraphicsUsageSampler;
class UIGamepad;
class PerActivityStateCPUUsageSampler;
-class ServiceWorkerProcessProxy;
class SuspendedPageProxy;
class WebAutomationSession;
class WebContextSupplement;
@@ -382,7 +380,7 @@
bool isServiceWorkerPageID(WebPageProxyIdentifier) const;
#if ENABLE(SERVICE_WORKER)
void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, Optional<PAL::SessionID>);
- const HashMap<WebCore::RegistrableDomain, ServiceWorkerProcessProxy*>& serviceWorkerProxies() const { return m_serviceWorkerProcesses; }
+ const HashMap<WebCore::RegistrableDomain, WebProcessProxy*>& serviceWorkerProxies() const { return m_serviceWorkerProcesses; }
void setAllowsAnySSLCertificateForServiceWorker(bool allows) { m_allowsAnySSLCertificateForServiceWorker = allows; }
bool allowsAnySSLCertificateForServiceWorker() const { return m_allowsAnySSLCertificateForServiceWorker; }
void updateServiceWorkerUserAgent(const String& userAgent);
@@ -620,7 +618,7 @@
WebProcessProxy* m_processWithPageCache { nullptr };
#if ENABLE(SERVICE_WORKER)
- HashMap<WebCore::RegistrableDomain, ServiceWorkerProcessProxy*> m_serviceWorkerProcesses;
+ HashMap<WebCore::RegistrableDomain, WebProcessProxy*> m_serviceWorkerProcesses;
bool m_waitingForWorkerContextProcessConnection { false };
bool m_allowsAnySSLCertificateForServiceWorker { false };
bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -49,6 +49,7 @@
#include "WebProcessMessages.h"
#include "WebProcessPool.h"
#include "WebProcessProxyMessages.h"
+#include "WebSWContextManagerConnectionMessages.h"
#include "WebUserContentControllerProxy.h"
#include "WebsiteData.h"
#include "WebsiteDataFetchOption.h"
@@ -133,6 +134,15 @@
return proxy;
}
+Ref<WebProcessProxy> WebProcessProxy::createForServiceWorkers(WebProcessPool& processPool, RegistrableDomain&& registrableDomain, WebsiteDataStore& websiteDataStore)
+{
+ auto proxy = adoptRef(*new WebProcessProxy(processPool, &websiteDataStore, IsPrewarmed::No));
+ proxy->m_registrableDomain = WTFMove(registrableDomain);
+ proxy->m_serviceWorkerInformation = ServiceWorkerInformation { WebPageProxyIdentifier::generate(), PageIdentifier::generate() };
+ proxy->connect();
+ return proxy;
+}
+
WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore* websiteDataStore, IsPrewarmed isPrewarmed)
: AuxiliaryProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
, m_responsivenessTimer(*this)
@@ -277,6 +287,11 @@
processPool().setShouldMakeNextWebProcessLaunchFailForTesting(false);
launchOptions.shouldMakeProcessLaunchFailForTesting = true;
}
+
+ if (m_serviceWorkerInformation) {
+ launchOptions.extraInitializationData.add("service-worker-process"_s, "1"_s);
+ launchOptions.extraInitializationData.add("registrable-domain"_s, m_registrableDomain->string());
+ }
}
#if !PLATFORM(GTK) && !PLATFORM(WPE)
@@ -751,9 +766,9 @@
for (auto& callback : isResponsiveCallbacks)
callback(isWebProcessResponsive);
- // If the service worker process becomes unresponsive, kill it ourselves since there are no native clients to do it.
- if (isServiceWorkerProcess()) {
- RELEASE_LOG_ERROR(PerformanceLogging, "%p - WebProcessProxy::didBecomeUnresponsive() Terminating Service Worker process with pid %d because it is unresponsive", this, processIdentifier());
+ // If the web process becomes unresponsive and only runs service workers, kill it ourselves since there are no native clients to do it.
+ if (isRunningServiceWorkers() && m_pageMap.isEmpty()) {
+ RELEASE_LOG_ERROR(PerformanceLogging, "%p - WebProcessProxy::didBecomeUnresponsive() Terminating service worker-only web process with pid %d because it is unresponsive", this, processIdentifier());
terminate();
}
}
@@ -886,7 +901,7 @@
bool WebProcessProxy::canBeAddedToWebProcessCache() const
{
- if (isServiceWorkerProcess())
+ if (isRunningServiceWorkers())
return false;
if (WebKit::isInspectorProcessPool(processPool()))
@@ -1202,7 +1217,7 @@
void WebProcessProxy::didSetAssertionState(AssertionState state)
{
#if PLATFORM(IOS_FAMILY)
- if (isServiceWorkerProcess())
+ if (isRunningServiceWorkers())
return;
ASSERT(!m_backgroundToken || !m_foregroundToken);
@@ -1378,10 +1393,7 @@
if (hasVisiblePage)
return;
- if (isServiceWorkerProcess())
- RELEASE_LOG_ERROR(PerformanceLogging, "%p - WebProcessProxy::didExceedCPULimit() Terminating Service Worker process with pid %d that has exceeded the background CPU limit", this, processIdentifier());
- else
- RELEASE_LOG_ERROR(PerformanceLogging, "%p - WebProcessProxy::didExceedCPULimit() Terminating background WebProcess with pid %d that has exceeded the background CPU limit", this, processIdentifier());
+ RELEASE_LOG_ERROR(PerformanceLogging, "%p - WebProcessProxy::didExceedCPULimit() Terminating background WebProcess with pid %d that has exceeded the background CPU limit", this, processIdentifier());
logDiagnosticMessageForResourceLimitTermination(DiagnosticLoggingKeys::exceededBackgroundCPULimitKey());
requestTermination(ProcessTerminationReason::ExceededCPULimit);
}
@@ -1480,6 +1492,25 @@
#endif
+#if ENABLE(SERVICE_WORKER)
+void WebProcessProxy::establishServiceWorkerContext(const WebPreferencesStore& store, PAL::SessionID sessionID)
+{
+ send(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerInformation->serviceWorkerPageProxyID, m_serviceWorkerInformation->serviceWorkerPageID, store, sessionID }, 0);
+}
+
+void WebProcessProxy::setServiceWorkerUserAgent(const String& userAgent)
+{
+ ASSERT(m_serviceWorkerInformation);
+ send(Messages::WebSWContextManagerConnection::SetUserAgent { userAgent }, 0);
+}
+
+void WebProcessProxy::updateServiceWorkerPreferencesStore(const WebPreferencesStore& store)
+{
+ ASSERT(m_serviceWorkerInformation);
+ send(Messages::WebSWContextManagerConnection::UpdatePreferencesStore { store }, 0);
+}
+#endif
+
} // namespace WebKit
#undef MESSAGE_CHECK
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-09-09 17:02:14 UTC (rev 249647)
@@ -82,6 +82,7 @@
enum class WebsiteDataType;
struct WebNavigationDataStore;
struct WebPageCreationParameters;
+struct WebPreferencesStore;
struct WebsiteData;
#if PLATFORM(IOS_FAMILY)
@@ -109,6 +110,8 @@
enum class ShouldLaunchProcess : bool { No, Yes };
static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore*, IsPrewarmed, ShouldLaunchProcess = ShouldLaunchProcess::Yes);
+ static Ref<WebProcessProxy> createForServiceWorkers(WebProcessPool&, WebCore::RegistrableDomain&&, WebsiteDataStore&);
+
~WebProcessProxy();
static void forWebPagesWithOrigin(PAL::SessionID, const WebCore::SecurityOriginData&, const Function<void(WebPageProxy&)>&);
@@ -149,7 +152,7 @@
void activePagesDomainsForTesting(CompletionHandler<void(Vector<String>&&)>&&); // This is what is reported to ActivityMonitor.
- virtual bool isServiceWorkerProcess() const { return false; }
+ bool isRunningServiceWorkers() const { return !!m_serviceWorkerInformation; }
void didCreateWebPageInProcess(WebCore::PageIdentifier);
@@ -309,6 +312,14 @@
void ref() final { ThreadSafeRefCounted::ref(); }
void deref() final { ThreadSafeRefCounted::deref(); }
+#if ENABLE(SERVICE_WORKER)
+ void establishServiceWorkerContext(const WebPreferencesStore&, PAL::SessionID);
+ void startForServiceWorkers(const WebPreferencesStore&, PAL::SessionID);
+ void setServiceWorkerUserAgent(const String&);
+ void updateServiceWorkerPreferencesStore(const WebPreferencesStore&);
+ bool hasServiceWorkerPageProxy(WebPageProxyIdentifier pageProxyID) { return m_serviceWorkerInformation && m_serviceWorkerInformation->serviceWorkerPageProxyID == pageProxyID; }
+#endif
+
protected:
WebProcessProxy(WebProcessPool&, WebsiteDataStore*, IsPrewarmed);
@@ -476,6 +487,12 @@
#if PLATFORM(COCOA)
MediaCaptureSandboxExtensions m_mediaCaptureSandboxExtensions { SandboxExtensionType::None };
#endif
+
+ struct ServiceWorkerInformation {
+ WebPageProxyIdentifier serviceWorkerPageProxyID;
+ WebCore::PageIdentifier serviceWorkerPageID;
+ };
+ Optional<ServiceWorkerInformation> m_serviceWorkerInformation;
};
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp (249646 => 249647)
--- trunk/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp 2019-09-09 17:02:14 UTC (rev 249647)
@@ -103,7 +103,7 @@
void WebProcessPool::platformInitializeWebProcess(const WebProcessProxy& process, WebProcessCreationParameters& parameters)
{
#if PLATFORM(WPE)
- parameters.isServiceWorkerProcess = process.isServiceWorkerProcess();
+ parameters.isServiceWorkerProcess = process.isRunningServiceWorkers();
if (!parameters.isServiceWorkerProcess) {
parameters.hostClientFileDescriptor = wpe_renderer_host_create_client();
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (249646 => 249647)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-09-09 15:35:48 UTC (rev 249646)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-09-09 17:02:14 UTC (rev 249647)
@@ -879,7 +879,6 @@
4143751C20EAEA2D00FAD06C /* cn.microdone.cmb.safari.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 4143751B20EAEA1E00FAD06C /* cn.microdone.cmb.safari.sb */; };
414DD37920BF43F5006959FB /* com.cisco.webex.plugin.gpc64.sb in Resources */ = {isa = PBXBuildFile; fileRef = 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */; };
414DD37A20BF49A5006959FB /* com.cisco.webex.plugin.gpc64.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */; };
- 414DEDD71F9EDDE50047C40D /* ServiceWorkerProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 414DEDD51F9EDDDF0047C40D /* ServiceWorkerProcessProxy.h */; };
4157E4B020E2ECDF00A6C0D7 /* com.google.o1dbrowserplugin.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 4157E4AF20E2EC9800A6C0D7 /* com.google.o1dbrowserplugin.sb */; };
4176901422FDD41B00B1576D /* NetworkRTCProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4176901322FDD41B00B1576D /* NetworkRTCProvider.mm */; };
417915AF2256BB7500D6F97E /* WebSocketChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 417915AD2256BB7400D6F97E /* WebSocketChannel.h */; };
@@ -3137,8 +3136,6 @@
413CCD4F20DEBC2F0065A21A /* com.google.googletalkbrowserplugin.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.google.googletalkbrowserplugin.sb; sourceTree = "<group>"; };
4143751B20EAEA1E00FAD06C /* cn.microdone.cmb.safari.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cn.microdone.cmb.safari.sb; sourceTree = "<group>"; };
414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.cisco.webex.plugin.gpc64.sb; sourceTree = "<group>"; };
- 414DEDD51F9EDDDF0047C40D /* ServiceWorkerProcessProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerProcessProxy.h; sourceTree = "<group>"; };
- 414DEDD61F9EDDE00047C40D /* ServiceWorkerProcessProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerProcessProxy.cpp; sourceTree = "<group>"; };
41518535222704F5005430C6 /* ServiceWorkerFetchTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerFetchTask.h; sourceTree = "<group>"; };
41518536222704F6005430C6 /* ServiceWorkerFetchTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerFetchTask.cpp; sourceTree = "<group>"; };
4151853822270F53005430C6 /* ServiceWorkerFetchTask.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ServiceWorkerFetchTask.messages.in; sourceTree = "<group>"; };
@@ -7777,8 +7774,6 @@
BC111B08112F5E3C00337BAB /* ResponsivenessTimer.cpp */,
1A30066C1110F4F70031937C /* ResponsivenessTimer.h */,
5CA98549210BEB5A0057EB6B /* SafeBrowsingWarning.h */,
- 414DEDD61F9EDDE00047C40D /* ServiceWorkerProcessProxy.cpp */,
- 414DEDD51F9EDDDF0047C40D /* ServiceWorkerProcessProxy.h */,
51A4D5A816CAC4FF000E615E /* StatisticsRequest.cpp */,
514BDED216C98EDD00E4E25E /* StatisticsRequest.h */,
515C415A207D74E000726E02 /* SuspendedPageProxy.cpp */,
@@ -9746,7 +9741,6 @@
E18E6918169B667B009B6670 /* SecItemShimProxyMessages.h in Headers */,
570AB8F320AE3BD700B8BE87 /* SecKeyProxyStore.h in Headers */,
514D9F5719119D35000063A7 /* ServicesController.h in Headers */,
- 414DEDD71F9EDDE50047C40D /* ServiceWorkerProcessProxy.h in Headers */,
1AFDE65A1954A42B00C48FFA /* SessionState.h in Headers */,
1A002D49196B345D00B9AD44 /* SessionStateCoding.h in Headers */,
46BEB6DF22FBB16B00269867 /* SessionStorageNamespace.h in Headers */,