Changeset 250426 in webkit


Ignore:
Timestamp:
Sep 27, 2019, 9:07:18 AM (6 years ago)
Author:
achristensen@apple.com
Message:

Move service worker process termination delay disabling from process pool to website data store
https://bugs.webkit.org/show_bug.cgi?id=202308

Reviewed by Chris Dumez.

Source/WebCore:

  • workers/service/server/SWServer.cpp:

(WebCore::SWServer::SWServer):
(WebCore::SWServer::unregisterServiceWorkerClient):

  • workers/service/server/SWServer.h:

(WebCore::SWServer::disableServiceWorkerProcessTerminationDelay): Deleted.

Source/WebKit:

It's only there for a test, which still works quickly.

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::initializeNetworkProcess):
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::fetchWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
(WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
(WebKit::NetworkProcess::swServerForSession):
(WebKit::NetworkProcess::addServiceWorkerSession):
(WebKit::NetworkProcess::disableServiceWorkerProcessTerminationDelay): Deleted.

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/NetworkProcess.messages.in:
  • Shared/WebsiteDataStoreParameters.cpp:

(WebKit::WebsiteDataStoreParameters::encode const):
(WebKit::WebsiteDataStoreParameters::decode):

  • Shared/WebsiteDataStoreParameters.h:
  • UIProcess/API/Cocoa/WKProcessPool.mm:

(-[WKProcessPool _disableServiceWorkerProcessTerminationDelay]): Deleted.

  • UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:

(-[_WKWebsiteDataStoreConfiguration serviceWorkerProcessTerminationDelayEnabled]):
(-[_WKWebsiteDataStoreConfiguration setServiceWorkerProcessTerminationDelayEnabled:]):

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::ensureNetworkProcess):
(WebKit::WebProcessPool::disableServiceWorkerProcessTerminationDelay): Deleted.

  • UIProcess/WebProcessPool.h:
  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:

(WebKit::WebsiteDataStoreConfiguration::copy):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

(WebKit::WebsiteDataStoreConfiguration::serviceWorkerProcessTerminationDelayEnabled const):
(WebKit::WebsiteDataStoreConfiguration::setServiceWorkerProcessTerminationDelayEnabled):

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
Location:
trunk
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r250425 r250426  
     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 Chris Dumez.
     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-27  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Source/WebCore/workers/service/server/SWServer.cpp

    r250195 r250426  
    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_isProcessTerminationDelayEnabled(processTerminationDelayEnabled)
    305306    , m_createContextConnectionCallback(WTFMove(callback))
    306307{
     
    843844            m_clientIdentifiersPerOrigin.remove(clientOrigin);
    844845        });
    845         iterator->value.terminateServiceWorkersTimer->startOneShot(m_shouldDisableServiceWorkerProcessTerminationDelay ? 0_s : terminationDelay);
     846        iterator->value.terminateServiceWorkersTimer->startOneShot(m_isProcessTerminationDelayEnabled ? terminationDelay : 0_s);
    846847    }
    847848
  • trunk/Source/WebCore/workers/service/server/SWServer.h

    r250287 r250426  
    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();
     
    194194    PAL::SessionID sessionID() const { return m_sessionID; }
    195195    WEBCORE_EXPORT bool needsContextConnectionForRegistrableDomain(const RegistrableDomain&) const;
    196 
    197     void disableServiceWorkerProcessTerminationDelay() { m_shouldDisableServiceWorkerProcessTerminationDelay = true; }
    198196
    199197    void removeFromScopeToRegistrationMap(const ServiceWorkerRegistrationKey&);
     
    257255    PAL::SessionID m_sessionID;
    258256    bool m_importCompleted { false };
    259     bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
     257    bool m_isProcessTerminationDelayEnabled { true };
    260258    Vector<CompletionHandler<void()>> m_clearCompletionCallbacks;
    261259    Vector<Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks;
  • trunk/Source/WebKit/ChangeLog

    r250424 r250426  
     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 Chris Dumez.
     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-27  Alex Christensen  <achristensen@webkit.org>
    246
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r250424 r250426  
    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
     
    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
     
    597596#if ENABLE(SERVICE_WORKER)
    598597    m_swServers.remove(sessionID);
    599     m_swDatabasePaths.remove(sessionID);
     598    m_serviceWorkerInfo.remove(sessionID);
    600599#endif
    601600
     
    13751374
    13761375#if ENABLE(SERVICE_WORKER)
    1377     path = m_swDatabasePaths.get(sessionID);
     1376    path = m_serviceWorkerInfo.get(sessionID).databasePath;
    13781377    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
    13791378        swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
     
    17561755   
    17571756#if ENABLE(SERVICE_WORKER)
    1758     path = m_swDatabasePaths.get(sessionID);
     1757    path = m_serviceWorkerInfo.get(sessionID).databasePath;
    17591758    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
    17601759        swServerForSession(sessionID).getOriginsWithRegistrations([this, sessionID, domainsToDeleteAllButCookiesFor, callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
     
    18931892   
    18941893#if ENABLE(SERVICE_WORKER)
    1895     path = m_swDatabasePaths.get(sessionID);
     1894    path = m_serviceWorkerInfo.get(sessionID).databasePath;
    18961895    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
    18971896        swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator = callbackAggregator.copyRef()](const HashSet<SecurityOriginData>& securityOrigins) mutable {
     
    23932392{
    23942393    auto result = m_swServers.ensure(sessionID, [&] {
    2395         auto path = m_swDatabasePaths.get(sessionID);
     2394        auto info = m_serviceWorkerInfo.get(sessionID);
     2395        auto path = info.databasePath;
    23962396        // There should already be a registered path for this PAL::SessionID.
    23972397        // If there's not, then where did this PAL::SessionID come from?
    23982398        ASSERT(sessionID.isEphemeral() || !path.isEmpty());
    2399        
    2400         auto value = makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
     2399
     2400        return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
    24012401            ASSERT(!registrableDomain.isEmpty());
    24022402            parentProcessConnection()->send(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, 0);
    24032403        });
    2404         if (m_shouldDisableServiceWorkerProcessTerminationDelay)
    2405             value->disableServiceWorkerProcessTerminationDelay();
    2406         return value;
    24072404    });
    2408 
    24092405    return *result.iterator->value;
    24102406}
     
    24332429}
    24342430
    2435 void NetworkProcess::disableServiceWorkerProcessTerminationDelay()
    2436 {
    2437     if (m_shouldDisableServiceWorkerProcessTerminationDelay)
    2438         return;
    2439    
    2440     m_shouldDisableServiceWorkerProcessTerminationDelay = true;
    2441     for (auto& swServer : m_swServers.values())
    2442         swServer->disableServiceWorkerProcessTerminationDelay();
    2443 }
    2444 
    2445 void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
    2446 {
    2447     auto addResult = m_swDatabasePaths.add(sessionID, serviceWorkerRegistrationDirectory);
     2431void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
     2432{
     2433    ServiceWorkerInfo info {
     2434        serviceWorkerRegistrationDirectory,
     2435        processTerminationDelayEnabled,
     2436    };
     2437    auto addResult = m_serviceWorkerInfo.add(sessionID, WTFMove(info));
    24482438    if (addResult.isNewEntry) {
    24492439        SandboxExtension::consumePermanently(handle);
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r250424 r250426  
    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
     
    527527   
    528528#if ENABLE(SERVICE_WORKER)
    529     bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
    530     HashMap<PAL::SessionID, String> m_swDatabasePaths;
     529    struct ServiceWorkerInfo {
     530        String databasePath;
     531        bool processTerminationDelayEnabled { true };
     532    };
     533    HashMap<PAL::SessionID, ServiceWorkerInfo> m_serviceWorkerInfo;
    531534    HashMap<PAL::SessionID, std::unique_ptr<WebCore::SWServer>> m_swServers;
    532535#endif
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in

    r250424 r250426  
    152152    SetCacheStorageParameters(PAL::SessionID sessionID, String cacheStorageDirectory, WebKit::SandboxExtension::Handle handle);
    153153
    154 #if ENABLE(SERVICE_WORKER)
    155     DisableServiceWorkerProcessTerminationDelay()
    156 #endif
    157 
    158154    SyncLocalStorage() -> () Synchronous
    159155    ClearLegacyPrivateBrowsingLocalStorage()
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp

    r250351 r250426  
    5151
    5252#if ENABLE(SERVICE_WORKER)
    53     encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle;
     53    encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << serviceWorkerProcessTerminationDelayEnabled;
    5454#endif
    5555
     
    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
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h

    r250351 r250426  
    6666    String serviceWorkerRegistrationDirectory;
    6767    SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle;
     68    bool serviceWorkerProcessTerminationDelayEnabled { true };
    6869#endif
    6970
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

    r250422 r250426  
    453453}
    454454
    455 - (void)_disableServiceWorkerProcessTerminationDelay
    456 {
    457     _processPool->disableServiceWorkerProcessTerminationDelay();
    458 }
    459 
    460455- (pid_t)_networkProcessIdentifier
    461456{
     
    467462    return _processPool->prewarmedProcessIdentifier();
    468463}
    469 
    470464
    471465- (void)_syncNetworkProcessCookies
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

    r250377 r250426  
    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.
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h

    r250377 r250426  
    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));
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm

    r250377 r250426  
    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{
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r250424 r250426  
    553553    if (!m_schemesServiceWorkersCanHandle.isEmpty())
    554554        parameters.urlSchemesServiceWorkersCanHandle = copyToVector(m_schemesServiceWorkersCanHandle);
    555 
    556     parameters.shouldDisableServiceWorkerProcessTerminationDelay = m_shouldDisableServiceWorkerProcessTerminationDelay;
    557555#endif
    558556
     
    728726}
    729727#endif
    730 
    731 void WebProcessPool::disableServiceWorkerProcessTerminationDelay()
    732 {
    733 #if ENABLE(SERVICE_WORKER)
    734     if (m_shouldDisableServiceWorkerProcessTerminationDelay)
    735         return;
    736 
    737     m_shouldDisableServiceWorkerProcessTerminationDelay = true;
    738     if (m_networkProcess)
    739         m_networkProcess->send(Messages::NetworkProcess::DisableServiceWorkerProcessTerminationDelay(), 0);
    740 #endif
    741 }
    742728
    743729void WebProcessPool::windowServerConnectionStateChanged()
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r250424 r250426  
    317317    void sendNetworkProcessDidResume();
    318318    void terminateServiceWorkerProcesses();
    319     void disableServiceWorkerProcessTerminationDelay();
    320319
    321320    void syncNetworkProcessCookies();
     
    618617    bool m_waitingForWorkerContextProcessConnection { false };
    619618    bool m_allowsAnySSLCertificateForServiceWorker { false };
    620     bool m_shouldDisableServiceWorkerProcessTerminationDelay { false };
    621619    String m_serviceWorkerUserAgent;
    622620    Optional<WebPreferencesStore> m_serviceWorkerPreferences;
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r250377 r250426  
    177177    if (!parameters.serviceWorkerRegistrationDirectory.isEmpty())
    178178        SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
     179    parameters.serviceWorkerProcessTerminationDelayEnabled = m_configuration->serviceWorkerProcessTerminationDelayEnabled();
    179180#endif
    180181
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp

    r250377 r250426  
    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;
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h

    r250421 r250426  
    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); }
     
    164167    bool m_allowsCellularAccess { true };
    165168    bool m_fastServerTrustEvaluationEnabled { false };
     169    bool m_serviceWorkerProcessTerminationDelayEnabled { true };
    166170#if PLATFORM(COCOA)
    167171    RetainPtr<CFDictionaryRef> m_proxyConfiguration;
  • trunk/Tools/ChangeLog

    r250422 r250426  
     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 Chris Dumez.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
     9
    1102019-09-27  Alex Christensen  <achristensen@webkit.org>
    211
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

    r249853 r250426  
    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    }];
     
    17091715
    17101716    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     1717    configuration.get().websiteDataStore = dataStore.get();
    17111718
    17121719    RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]);
     
    17281735    [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];
    17291736    [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw2"];
    1730 
    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];
    17341737
    17351738    RetainPtr<WKWebView> webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
Note: See TracChangeset for help on using the changeset viewer.