Source/WebCore/ChangeLog

 12019-09-27 Alex Christensen <achristensen@webkit.org>
 2
 3 Move service worker process termination delay disabling from process pool to website data store
 4 https://bugs.webkit.org/show_bug.cgi?id=202308
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * workers/service/server/SWServer.cpp:
 9 (WebCore::SWServer::SWServer):
 10 (WebCore::SWServer::unregisterServiceWorkerClient):
 11 * workers/service/server/SWServer.h:
 12 (WebCore::SWServer::disableServiceWorkerProcessTerminationDelay): Deleted.
 13
1142019-09-25 Wenson Hsieh <wenson_hsieh@apple.com>
215
316 [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
250350

Source/WebCore/workers/service/server/SWServer.cpp

@@void SWServer::Connection::syncTerminate
299299 m_server.syncTerminateWorker(*worker);
300300}
301301
302 SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback)
 302SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback)
303303 : m_originStore(WTFMove(originStore))
304304 , m_sessionID(sessionID)
 305 , m_processTerminationDelayEnabled(processTerminationDelayEnabled)
305306 , m_createContextConnectionCallback(WTFMove(callback))
306307{
307308 ASSERT(!registrationDatabaseDirectory.isEmpty() || m_sessionID.isEphemeral());

@@void SWServer::unregisterServiceWorkerCl
842843
843844 m_clientIdentifiersPerOrigin.remove(clientOrigin);
844845 });
845  iterator->value.terminateServiceWorkersTimer->startOneShot(m_shouldDisableServiceWorkerProcessTerminationDelay ? 0_s : terminationDelay);
 846 iterator->value.terminateServiceWorkersTimer->startOneShot(m_processTerminationDelayEnabled ? terminationDelay : 0_s);
846847 }
847848
848849 auto clientsByRegistrableDomainIterator = m_clientsByRegistrableDomain.find(clientRegistrableDomain);
250350

Source/WebCore/workers/service/server/SWServer.h

@@public:
125125 };
126126
127127 using CreateContextConnectionCallback = Function<void(const WebCore::RegistrableDomain&)>;
128  WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&);
 128 WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&);
129129
130130 WEBCORE_EXPORT ~SWServer();
131131

@@public:
194194 PAL::SessionID sessionID() const { return m_sessionID; }
195195 WEBCORE_EXPORT bool needsContextConnectionForRegistrableDomain(const RegistrableDomain&) const;
196196
197  void disableServiceWorkerProcessTerminationDelay() { m_shouldDisableServiceWorkerProcessTerminationDelay = true; }
198 
199197 void removeFromScopeToRegistrationMap(const ServiceWorkerRegistrationKey&);
200198
201199 WEBCORE_EXPORT void addContextConnection(SWServerToContextConnection&);

@@private:
256254 HashMap<RegistrableDomain, HashMap<ServiceWorkerIdentifier, Vector<RunServiceWorkerCallback>>> m_serviceWorkerRunRequests;
257255 PAL::SessionID m_sessionID;
258256 bool m_importCompleted { false };
259  bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
 257 bool m_processTerminationDelayEnabled { true };
260258 Vector<CompletionHandler<void()>> m_clearCompletionCallbacks;
261259 Vector<Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks;
262260 HashMap<RegistrableDomain, SWServerToContextConnection*> m_contextConnections;
250350

Source/WebKit/ChangeLog

 12019-09-27 Alex Christensen <achristensen@webkit.org>
 2
 3 Move service worker process termination delay disabling from process pool to website data store
 4 https://bugs.webkit.org/show_bug.cgi?id=202308
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 It's only there for a test, which still works quickly.
 9
 10 * NetworkProcess/NetworkProcess.cpp:
 11 (WebKit::NetworkProcess::initializeNetworkProcess):
 12 (WebKit::NetworkProcess::addWebsiteDataStore):
 13 (WebKit::NetworkProcess::destroySession):
 14 (WebKit::NetworkProcess::fetchWebsiteData):
 15 (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
 16 (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
 17 (WebKit::NetworkProcess::swServerForSession):
 18 (WebKit::NetworkProcess::addServiceWorkerSession):
 19 (WebKit::NetworkProcess::disableServiceWorkerProcessTerminationDelay): Deleted.
 20 * NetworkProcess/NetworkProcess.h:
 21 * NetworkProcess/NetworkProcess.messages.in:
 22 * Shared/WebsiteDataStoreParameters.cpp:
 23 (WebKit::WebsiteDataStoreParameters::encode const):
 24 (WebKit::WebsiteDataStoreParameters::decode):
 25 * Shared/WebsiteDataStoreParameters.h:
 26 * UIProcess/API/Cocoa/WKProcessPool.mm:
 27 (-[WKProcessPool _disableServiceWorkerProcessTerminationDelay]): Deleted.
 28 * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
 29 * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
 30 * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
 31 (-[_WKWebsiteDataStoreConfiguration serviceWorkerProcessTerminationDelayEnabled]):
 32 (-[_WKWebsiteDataStoreConfiguration setServiceWorkerProcessTerminationDelayEnabled:]):
 33 * UIProcess/WebProcessPool.cpp:
 34 (WebKit::WebProcessPool::ensureNetworkProcess):
 35 (WebKit::WebProcessPool::disableServiceWorkerProcessTerminationDelay): Deleted.
 36 * UIProcess/WebProcessPool.h:
 37 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
 38 (WebKit::WebsiteDataStore::parameters):
 39 * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
 40 (WebKit::WebsiteDataStoreConfiguration::copy):
 41 * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
 42 (WebKit::WebsiteDataStoreConfiguration::serviceWorkerProcessTerminationDelayEnabled const):
 43 (WebKit::WebsiteDataStoreConfiguration::setServiceWorkerProcessTerminationDelayEnabled):
 44
1452019-09-26 Dean Jackson <dino@apple.com>
246
347 ContextMenu on a link in an email no longer shows web preview
250404

Source/WebKit/NetworkProcess/NetworkProcess.cpp

@@void NetworkProcess::initializeNetworkPr
331331
332332#if ENABLE(SERVICE_WORKER)
333333 if (parentProcessHasServiceWorkerEntitlement()) {
334  addServiceWorkerSession(PAL::SessionID::defaultSessionID(), parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
 334 bool serviceWorkerProcessTerminationDelayEnabled = true;
 335 addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
335336
336337 for (auto& scheme : parameters.urlSchemesServiceWorkersCanHandle)
337338 registerURLSchemeServiceWorkersCanHandle(scheme);
338 
339  m_shouldDisableServiceWorkerProcessTerminationDelay = parameters.shouldDisableServiceWorkerProcessTerminationDelay;
340339 }
341340#endif
342341 initializeStorageQuota(parameters.defaultDataStoreParameters);

@@void NetworkProcess::addWebsiteDataStore
464463
465464#if ENABLE(SERVICE_WORKER)
466465 if (parentProcessHasServiceWorkerEntitlement())
467  addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
 466 addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
468467#endif
469468
470469 m_storageManagerSet->add(parameters.networkSessionParameters.sessionID, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle);

@@void NetworkProcess::destroySession(PAL:
596595
597596#if ENABLE(SERVICE_WORKER)
598597 m_swServers.remove(sessionID);
599  m_swDatabasePaths.remove(sessionID);
 598 m_serviceWorkerInfo.remove(sessionID);
600599#endif
601600
602601 m_storageManagerSet->remove(sessionID);

@@void NetworkProcess::fetchWebsiteData(PA
13561355#endif
13571356
13581357#if ENABLE(SERVICE_WORKER)
1359  path = m_swDatabasePaths.get(sessionID);
 1358 path = m_serviceWorkerInfo.get(sessionID).databasePath;
13601359 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
13611360 swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
13621361 for (auto& origin : securityOrigins)

@@void NetworkProcess::deleteWebsiteDataFo
17371736#endif
17381737
17391738#if ENABLE(SERVICE_WORKER)
1740  path = m_swDatabasePaths.get(sessionID);
 1739 path = m_serviceWorkerInfo.get(sessionID).databasePath;
17411740 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
17421741 swServerForSession(sessionID).getOriginsWithRegistrations([this, sessionID, domainsToDeleteAllButCookiesFor, callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
17431742 for (auto& securityOrigin : securityOrigins) {

@@void NetworkProcess::registrableDomainsW
18741873#endif
18751874
18761875#if ENABLE(SERVICE_WORKER)
1877  path = m_swDatabasePaths.get(sessionID);
 1876 path = m_serviceWorkerInfo.get(sessionID).databasePath;
18781877 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
18791878 swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
18801879 for (auto& securityOrigin : securityOrigins)

@@void NetworkProcess::forEachSWServer(con
23792378SWServer& NetworkProcess::swServerForSession(PAL::SessionID sessionID)
23802379{
23812380 auto result = m_swServers.ensure(sessionID, [&] {
2382  auto path = m_swDatabasePaths.get(sessionID);
 2381 auto info = m_serviceWorkerInfo.get(sessionID);
 2382 auto path = info.databasePath;
23832383 // There should already be a registered path for this PAL::SessionID.
23842384 // If there's not, then where did this PAL::SessionID come from?
23852385 ASSERT(sessionID.isEphemeral() || !path.isEmpty());
2386 
2387  auto value = makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
 2386
 2387 return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
23882388 ASSERT(!registrableDomain.isEmpty());
23892389 parentProcessConnection()->send(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, 0);
23902390 });
2391  if (m_shouldDisableServiceWorkerProcessTerminationDelay)
2392  value->disableServiceWorkerProcessTerminationDelay();
2393  return value;
23942391 });
2395 
23962392 return *result.iterator->value;
23972393}
23982394

@@void NetworkProcess::unregisterSWServerC
24192415 store->unregisterSWServerConnection(connection);
24202416}
24212417
2422 void NetworkProcess::disableServiceWorkerProcessTerminationDelay()
2423 {
2424  if (m_shouldDisableServiceWorkerProcessTerminationDelay)
2425  return;
2426 
2427  m_shouldDisableServiceWorkerProcessTerminationDelay = true;
2428  for (auto& swServer : m_swServers.values())
2429  swServer->disableServiceWorkerProcessTerminationDelay();
2430 }
2431 
2432 void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
 2418void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
24332419{
2434  auto addResult = m_swDatabasePaths.add(sessionID, serviceWorkerRegistrationDirectory);
 2420 ServiceWorkerInfo info {
 2421 serviceWorkerRegistrationDirectory,
 2422 processTerminationDelayEnabled,
 2423 };
 2424 auto addResult = m_serviceWorkerInfo.add(sessionID, WTFMove(info));
24352425 if (addResult.isNewEntry) {
24362426 SandboxExtension::consumePermanently(handle);
24372427 if (!serviceWorkerRegistrationDirectory.isEmpty())
250351

Source/WebKit/NetworkProcess/NetworkProcess.h

@@private:
459459
460460 WebSWOriginStore* existingSWOriginStoreForSession(PAL::SessionID) const;
461461
462  void addServiceWorkerSession(PAL::SessionID, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
 462 void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
463463#endif
464464
465465 void postStorageTask(CrossThreadTask&&);

@@private:
527527 Lock m_storageTaskMutex;
528528
529529#if ENABLE(SERVICE_WORKER)
530  bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
531  HashMap<PAL::SessionID, String> m_swDatabasePaths;
 530 struct ServiceWorkerInfo {
 531 String databasePath;
 532 bool processTerminationDelayEnabled { true };
 533 };
 534 HashMap<PAL::SessionID, ServiceWorkerInfo> m_serviceWorkerInfo;
532535 HashMap<PAL::SessionID, std::unique_ptr<WebCore::SWServer>> m_swServers;
533536#endif
534537
250350

Source/WebKit/NetworkProcess/NetworkProcess.messages.in

@@messages -> NetworkProcess LegacyReceive
150150
151151 SetCacheStorageParameters(PAL::SessionID sessionID, String cacheStorageDirectory, WebKit::SandboxExtension::Handle handle);
152152
153 #if ENABLE(SERVICE_WORKER)
154  DisableServiceWorkerProcessTerminationDelay()
155 #endif
156 
157153 SyncLocalStorage() -> () Synchronous
158154 ClearLegacyPrivateBrowsingLocalStorage()
159155
250350

Source/WebKit/Shared/WebsiteDataStoreParameters.cpp

@@void WebsiteDataStoreParameters::encode(
5050#endif
5151
5252#if ENABLE(SERVICE_WORKER)
53  encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle;
 53 encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << serviceWorkerProcessTerminationDelayEnabled;
5454#endif
5555
5656 encoder << localStorageDirectory << localStorageDirectoryExtensionHandle;

@@Optional<WebsiteDataStoreParameters> Web
121121 if (!serviceWorkerRegistrationDirectoryExtensionHandle)
122122 return WTF::nullopt;
123123 parameters.serviceWorkerRegistrationDirectoryExtensionHandle = WTFMove(*serviceWorkerRegistrationDirectoryExtensionHandle);
 124
 125 Optional<bool> serviceWorkerProcessTerminationDelayEnabled;
 126 decoder >> serviceWorkerProcessTerminationDelayEnabled;
 127 if (!serviceWorkerProcessTerminationDelayEnabled)
 128 return WTF::nullopt;
 129 parameters.serviceWorkerProcessTerminationDelayEnabled = WTFMove(*serviceWorkerProcessTerminationDelayEnabled);
124130#endif
125131
126132 Optional<String> localStorageDirectory;
250351

Source/WebKit/Shared/WebsiteDataStoreParameters.h

@@struct WebsiteDataStoreParameters {
6565#if ENABLE(SERVICE_WORKER)
6666 String serviceWorkerRegistrationDirectory;
6767 SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle;
 68 bool serviceWorkerProcessTerminationDelayEnabled { true };
6869#endif
6970
7071 String localStorageDirectory;
250351

Source/WebKit/UIProcess/WebProcessPool.cpp

@@NetworkProcessProxy& WebProcessPool::ens
556556
557557 if (!m_schemesServiceWorkersCanHandle.isEmpty())
558558 parameters.urlSchemesServiceWorkersCanHandle = copyToVector(m_schemesServiceWorkersCanHandle);
559 
560  parameters.shouldDisableServiceWorkerProcessTerminationDelay = m_shouldDisableServiceWorkerProcessTerminationDelay;
561559#endif
562560
563561 auto localStorageDirectory = m_websiteDataStore ? m_websiteDataStore->resolvedLocalStorageDirectory() : nullString();

@@void WebProcessPool::establishWorkerCont
730728}
731729#endif
732730
733 void WebProcessPool::disableServiceWorkerProcessTerminationDelay()
734 {
735 #if ENABLE(SERVICE_WORKER)
736  if (m_shouldDisableServiceWorkerProcessTerminationDelay)
737  return;
738 
739  m_shouldDisableServiceWorkerProcessTerminationDelay = true;
740  if (m_networkProcess)
741  m_networkProcess->send(Messages::NetworkProcess::DisableServiceWorkerProcessTerminationDelay(), 0);
742 #endif
743 }
744 
745731void WebProcessPool::windowServerConnectionStateChanged()
746732{
747733 size_t processCount = m_processes.size();
250352

Source/WebKit/UIProcess/WebProcessPool.h

@@public:
317317 void sendNetworkProcessWillSuspendImminentlyForTesting();
318318 void sendNetworkProcessDidResume();
319319 void terminateServiceWorkerProcesses();
320  void disableServiceWorkerProcessTerminationDelay();
321320
322321 void syncNetworkProcessCookies();
323322 void syncLocalStorage(CompletionHandler<void()>&& callback);

@@private:
619618 HashMap<RegistrableDomainWithSessionID, WebProcessProxy*> m_serviceWorkerProcesses;
620619 bool m_waitingForWorkerContextProcessConnection { false };
621620 bool m_allowsAnySSLCertificateForServiceWorker { false };
622  bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
623621 String m_serviceWorkerUserAgent;
624622 Optional<WebPreferencesStore> m_serviceWorkerPreferences;
625623 HashMap<String, bool> m_mayHaveRegisteredServiceWorkers;
250350

Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

@@- (void)_terminateServiceWorkerProcesses
453453 _processPool->terminateServiceWorkerProcesses();
454454}
455455
456 - (void)_disableServiceWorkerProcessTerminationDelay
457 {
458  _processPool->disableServiceWorkerProcessTerminationDelay();
459 }
460 
461456- (pid_t)_networkProcessIdentifier
462457{
463458 return _processPool->networkProcessIdentifier();

@@- (pid_t)_prewarmedProcessIdentifier
468463 return _processPool->prewarmedProcessIdentifier();
469464}
470465
471 
472466- (void)_syncNetworkProcessCookies
473467{
474468 _processPool->syncNetworkProcessCookies();
250350

Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

9393- (void)_sendNetworkProcessWillSuspendImminently WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
9494- (void)_sendNetworkProcessDidResume WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
9595- (void)_terminateServiceWorkerProcesses WK_API_AVAILABLE(macos(10.14), ios(12.0));
96 - (void)_disableServiceWorkerProcessTerminationDelay WK_API_AVAILABLE(macos(10.14), ios(12.0));
9796
9897// Test only.
9998- (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(10.13), ios(11.0));
250377

Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h

@@WK_CLASS_AVAILABLE(macos(10.13), ios(11.
6060@property (nonatomic, copy, setter=_setResourceLoadStatisticsDirectory:) NSURL *_resourceLoadStatisticsDirectory WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
6161@property (nonatomic, copy, setter=_setCacheStorageDirectory:) NSURL *_cacheStorageDirectory WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
6262@property (nonatomic, copy, setter=_setServiceWorkerRegistrationDirectory:) NSURL *_serviceWorkerRegistrationDirectory WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
 63@property (nonatomic) BOOL serviceWorkerProcessTerminationDelayEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
6364@property (nonatomic, nullable, copy) NSURL *networkCacheDirectory WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
6465@property (nonatomic, nullable, copy) NSURL *deviceIdHashSaltsStorageDirectory WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
6566@property (nonatomic, nullable, copy) NSURL *applicationCacheDirectory WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
250377

Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm

@@- (void)_setServiceWorkerRegistrationDir
209209 _configuration->setServiceWorkerRegistrationDirectory(url.path);
210210}
211211
 212- (BOOL)serviceWorkerProcessTerminationDelayEnabled
 213{
 214 return _configuration->serviceWorkerProcessTerminationDelayEnabled();
 215}
 216
 217- (void)setServiceWorkerProcessTerminationDelayEnabled:(BOOL)enabled
 218{
 219 _configuration->setServiceWorkerProcessTerminationDelayEnabled(enabled);
 220}
 221
212222- (void)setSourceApplicationBundleIdentifier:(NSString *)identifier
213223{
214224 _configuration->setSourceApplicationBundleIdentifier(identifier);
250377

Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp

@@Ref<WebsiteDataStoreConfiguration> Websi
5353{
5454 auto copy = WebsiteDataStoreConfiguration::create(m_isPersistent);
5555
 56 copy->m_serviceWorkerProcessTerminationDelayEnabled = this->m_serviceWorkerProcessTerminationDelayEnabled;
5657 copy->m_fastServerTrustEvaluationEnabled = this->m_fastServerTrustEvaluationEnabled;
5758 copy->m_networkCacheSpeculativeValidationEnabled = this->m_networkCacheSpeculativeValidationEnabled;
5859 copy->m_cacheStorageDirectory = this->m_cacheStorageDirectory;
250377

Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h

@@public:
108108 const String& serviceWorkerRegistrationDirectory() const { return m_serviceWorkerRegistrationDirectory; }
109109 void setServiceWorkerRegistrationDirectory(String&& directory) { m_serviceWorkerRegistrationDirectory = WTFMove(directory); }
110110
 111 bool serviceWorkerProcessTerminationDelayEnabled() const { return m_serviceWorkerProcessTerminationDelayEnabled; }
 112 void setServiceWorkerProcessTerminationDelayEnabled(bool enabled) { m_serviceWorkerProcessTerminationDelayEnabled = enabled; }
 113
111114 const String& sourceApplicationBundleIdentifier() const { return m_sourceApplicationBundleIdentifier; }
112115 void setSourceApplicationBundleIdentifier(String&& identifier) { m_sourceApplicationBundleIdentifier = WTFMove(identifier); }
113116

@@private:
161164 bool m_allowsCellularAccess { true };
162165 bool m_fastServerTrustEvaluationEnabled { false };
163166 bool m_networkCacheSpeculativeValidationEnabled { false };
 167 bool m_serviceWorkerProcessTerminationDelayEnabled { true };
164168#if PLATFORM(COCOA)
165169 RetainPtr<CFDictionaryRef> m_proxyConfiguration;
166170#endif
250377

Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

@@WebsiteDataStoreParameters WebsiteDataSt
176176 parameters.serviceWorkerRegistrationDirectory = resolvedServiceWorkerRegistrationDirectory();
177177 if (!parameters.serviceWorkerRegistrationDirectory.isEmpty())
178178 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
 179 parameters.serviceWorkerProcessTerminationDelayEnabled = m_configuration->serviceWorkerProcessTerminationDelayEnabled();
179180#endif
180181
181182 parameters.localStorageDirectory = resolvedLocalStorageDirectory();
250377

Tools/ChangeLog

 12019-09-27 Alex Christensen <achristensen@webkit.org>
 2
 3 Move service worker process termination delay disabling from process pool to website data store
 4 https://bugs.webkit.org/show_bug.cgi?id=202308
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
 9
1102019-09-27 Youenn Fablet <youenn@apple.com>
211
312 Make IsNSURLSessionWebSocketEnabled an experimental flag
250420

Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

@@TEST(ServiceWorkers, ProcessPerSite)
17001700
17011701 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
17021702
 1703 // Normally, service workers get terminated several seconds after their clients are gone.
 1704 // Disable this delay for the purpose of testing.
 1705 _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
 1706 dataStoreConfiguration.serviceWorkerProcessTerminationDelayEnabled = NO;
 1707 auto dataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration]);
 1708
17031709 // Start with a clean slate data store
1704  [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
 1710 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
17051711 done = true;
17061712 }];
17071713 TestWebKitAPI::Util::run(&done);
17081714 done = false;
17091715
17101716 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
 1717 configuration.get().websiteDataStore = dataStore.get();
17111718
17121719 RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]);
17131720 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];

@@TEST(ServiceWorkers, ProcessPerSite)
17281735 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];
17291736 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw2"];
17301737
1731  // Normally, service workers get terminated several seconds after their clients are gone.
1732  // Disable this delay for the purpose of testing.
1733  [processPool _disableServiceWorkerProcessTerminationDelay];
1734 
17351738 RetainPtr<WKWebView> webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
17361739
17371740 NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]];
250350