A service worker process should not be created when enqueuing a service worker job
https://bugs.webkit.org/show_bug.cgi?id=202578
<rdar://problem/55979690>
Reviewed by Chris Dumez.
Source/WebCore:
Ask for a service worker context connection when planning to install or run a service worker.
This allows to not spin unnecessarily service worker processes for jobs that do not end up installing a service worker.
Covered by existing tests.
* workers/service/server/SWServer.cpp:
(WebCore::SWServer::tryInstallContextData):
(WebCore::SWServer::runServiceWorkerIfNecessary):
Source/WebKit:
Remove the calls to create service worker context connection.
They are now done at SWServer level when trying to either run a service worker or install one.
* NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
(WebKit::WebSWServerConnection::startFetch):
(WebKit::WebSWServerConnection::postMessageToServiceWorker):
(WebKit::WebSWServerConnection::scheduleJobInServer):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@250957 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index ae5cb6f..14339e7 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
+2019-10-09 youenn fablet <youenn@apple.com>
+
+ A service worker process should not be created when enqueuing a service worker job
+ https://bugs.webkit.org/show_bug.cgi?id=202578
+ <rdar://problem/55979690>
+
+ Reviewed by Chris Dumez.
+
+ Ask for a service worker context connection when planning to install or run a service worker.
+ This allows to not spin unnecessarily service worker processes for jobs that do not end up installing a service worker.
+
+ Covered by existing tests.
+
+ * workers/service/server/SWServer.cpp:
+ (WebCore::SWServer::tryInstallContextData):
+ (WebCore::SWServer::runServiceWorkerIfNecessary):
+
2019-10-09 Wenson Hsieh <wenson_hsieh@apple.com>
Unreviewed, fix the internal iOS build
diff --git a/Source/WebCore/workers/service/server/SWServer.cpp b/Source/WebCore/workers/service/server/SWServer.cpp
index d3ba788..9bb66ab 100644
--- a/Source/WebCore/workers/service/server/SWServer.cpp
+++ b/Source/WebCore/workers/service/server/SWServer.cpp
@@ -540,9 +540,11 @@
RegistrableDomain registrableDomain(data.scriptURL);
auto* connection = contextConnectionForRegistrableDomain(registrableDomain);
if (!connection) {
- m_pendingContextDatas.ensure(WTFMove(registrableDomain), [] {
+ m_pendingContextDatas.ensure(registrableDomain, [] {
return Vector<ServiceWorkerContextData> { };
}).iterator->value.append(WTFMove(data));
+
+ createContextConnection(registrableDomain);
return;
}
@@ -619,6 +621,8 @@
serviceWorkerRunRequestsForOrigin.ensure(identifier, [&] {
return Vector<RunServiceWorkerCallback> { };
}).iterator->value.append(WTFMove(callback));
+
+ createContextConnection(worker->registrableDomain());
return;
}
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 4d2c0d1..bfe3b17 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,19 @@
+2019-10-09 youenn fablet <youenn@apple.com>
+
+ A service worker process should not be created when enqueuing a service worker job
+ https://bugs.webkit.org/show_bug.cgi?id=202578
+ <rdar://problem/55979690>
+
+ Reviewed by Chris Dumez.
+
+ Remove the calls to create service worker context connection.
+ They are now done at SWServer level when trying to either run a service worker or install one.
+
+ * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
+ (WebKit::WebSWServerConnection::startFetch):
+ (WebKit::WebSWServerConnection::postMessageToServiceWorker):
+ (WebKit::WebSWServerConnection::scheduleJobInServer):
+
2019-10-09 Wenson Hsieh <wenson_hsieh@apple.com>
[Clipboard API] Refactor Pasteboard item reading functions to work on both iOS and macOS
diff --git a/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp b/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
index 012dac3..79e3265 100644
--- a/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
+++ b/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
@@ -179,9 +179,6 @@
return;
}
- if (!worker->contextConnection())
- server().createContextConnection(worker->registrableDomain());
-
server().runServiceWorkerIfNecessary(serviceWorkerIdentifier, [weakThis = WTFMove(weakThis), this, fetchIdentifier, serviceWorkerIdentifier, request = WTFMove(request), options = WTFMove(options), formData = WTFMove(formData), referrer = WTFMove(referrer), shouldSkipFetchEvent = worker->shouldSkipFetchEvent()](auto* contextConnection) {
if (!weakThis)
return;
@@ -230,9 +227,6 @@
if (!sourceData)
return;
- if (!destinationWorker->contextConnection())
- server().createContextConnection(destinationWorker->registrableDomain());
-
// It's possible this specific worker cannot be re-run (e.g. its registration has been removed)
server().runServiceWorkerIfNecessary(destinationIdentifier, [destinationIdentifier, message = WTFMove(message), sourceData = WTFMove(*sourceData)](auto* contextConnection) mutable {
if (contextConnection)
@@ -242,10 +236,6 @@
void WebSWServerConnection::scheduleJobInServer(ServiceWorkerJobData&& jobData)
{
- RegistrableDomain registrableDomain(jobData.scopeURL);
- if (!server().contextConnectionForRegistrableDomain(registrableDomain))
- server().createContextConnection(registrableDomain);
-
SWSERVERCONNECTION_RELEASE_LOG_IF_ALLOWED("Scheduling ServiceWorker job %s in server", jobData.identifier().loggingString().utf8().data());
ASSERT(identifier() == jobData.connectionIdentifier());