Changeset 245873 in webkit


Ignore:
Timestamp:
May 29, 2019 3:21:08 PM (5 years ago)
Author:
youenn@apple.com
Message:

Reestablish WebSWClientConnection in case of network process crash
https://bugs.webkit.org/show_bug.cgi?id=198333

Reviewed by Alex Christensen.

Source/WebCore:

Refactor DocumentLoader to no longer take a ref to the SWClientConnection.
Instead, store the sessionID and get the SWClientConnection from it.
Remove unused code from ServiceWorkerContainer.

Test: http/wpt/service-workers/service-worker-networkprocess-crash.html

  • loader/DocumentLoader.cpp:

(WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
(WebCore::DocumentLoader::unregisterTemporaryServiceWorkerClient):

  • loader/DocumentLoader.h:
  • workers/service/ServiceWorkerContainer.cpp:
  • workers/service/ServiceWorkerContainer.h:
  • workers/service/ServiceWorkerJobClient.h:

Source/WebKit:

WebSWClientConnection now takes a RefPtr<IPC::Connection> so that on network process crash, it will set it back to null.
On the next call that needs the connection, WebSWClientConnection will reinitialize its underlying IPC connection and its own identifier.
Make sure that all code paths requiring this initialization are covered.

  • WebProcess/Network/NetworkProcessConnection.cpp:

(WebKit::NetworkProcessConnection::didClose):
(WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
(WebKit::NetworkProcessConnection::isRegisteredActiveSWClientConnection):
(WebKit::NetworkProcessConnection::initializeSWClientConnection):

  • WebProcess/Network/NetworkProcessConnection.h:
  • WebProcess/Storage/WebSWClientConnection.cpp:

(WebKit::WebSWClientConnection::WebSWClientConnection):
(WebKit::WebSWClientConnection::~WebSWClientConnection):
(WebKit::WebSWClientConnection::initializeConnectionIfNeeded):
(WebKit::WebSWClientConnection::ensureConnectionAndSend):
(WebKit::WebSWClientConnection::scheduleJobInServer):
(WebKit::WebSWClientConnection::finishFetchingScriptInServer):
(WebKit::WebSWClientConnection::addServiceWorkerRegistrationInServer):
(WebKit::WebSWClientConnection::removeServiceWorkerRegistrationInServer):
(WebKit::WebSWClientConnection::registerServiceWorkerClient):
(WebKit::WebSWClientConnection::unregisterServiceWorkerClient):
(WebKit::WebSWClientConnection::didResolveRegistrationPromise):
(WebKit::WebSWClientConnection::matchRegistration):
(WebKit::WebSWClientConnection::runOrDelayTaskForImport):
(WebKit::WebSWClientConnection::whenRegistrationReady):
(WebKit::WebSWClientConnection::getRegistrations):
(WebKit::WebSWClientConnection::startFetch):
(WebKit::WebSWClientConnection::cancelFetch):
(WebKit::WebSWClientConnection::continueDidReceiveFetchResponse):
(WebKit::WebSWClientConnection::connectionToServerLost):
(WebKit::WebSWClientConnection::syncTerminateWorker):
(WebKit::WebSWClientConnection::serverConnectionIdentifier const):
(WebKit::WebSWClientConnection::updateThrottleState):

  • WebProcess/Storage/WebSWClientConnection.h:

LayoutTests:

  • http/wpt/service-workers/service-worker-networkprocess-crash-expected.txt: Added.
  • http/wpt/service-workers/service-worker-networkprocess-crash.html: Added.
Location:
trunk
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r245854 r245873  
     12019-05-29  Youenn Fablet  <youenn@apple.com>
     2
     3        Reestablish WebSWClientConnection in case of network process crash
     4        https://bugs.webkit.org/show_bug.cgi?id=198333
     5
     6        Reviewed by Alex Christensen.
     7
     8        * http/wpt/service-workers/service-worker-networkprocess-crash-expected.txt: Added.
     9        * http/wpt/service-workers/service-worker-networkprocess-crash.html: Added.
     10
    1112019-05-29  Antti Koivisto  <antti@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r245871 r245873  
     12019-05-29  Youenn Fablet  <youenn@apple.com>
     2
     3        Reestablish WebSWClientConnection in case of network process crash
     4        https://bugs.webkit.org/show_bug.cgi?id=198333
     5
     6        Reviewed by Alex Christensen.
     7
     8        Refactor DocumentLoader to no longer take a ref to the SWClientConnection.
     9        Instead, store the sessionID and get the SWClientConnection from it.
     10        Remove unused code from ServiceWorkerContainer.
     11
     12        Test: http/wpt/service-workers/service-worker-networkprocess-crash.html
     13
     14        * loader/DocumentLoader.cpp:
     15        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
     16        (WebCore::DocumentLoader::unregisterTemporaryServiceWorkerClient):
     17        * loader/DocumentLoader.h:
     18        * workers/service/ServiceWorkerContainer.cpp:
     19        * workers/service/ServiceWorkerContainer.h:
     20        * workers/service/ServiceWorkerJobClient.h:
     21
    1222019-05-29  David Kilzer  <ddkilzer@apple.com>
    223
  • trunk/Source/WebCore/loader/DocumentLoader.cpp

    r245481 r245873  
    18161816    m_temporaryServiceWorkerClient = TemporaryServiceWorkerClient {
    18171817        DocumentIdentifier::generate(),
    1818         *ServiceWorkerProvider::singleton().existingServiceWorkerConnectionForSession(m_frame->page()->sessionID())
     1818        m_frame->page()->sessionID()
    18191819    };
    18201820
     1821    auto& serviceWorkerConnection = ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(m_temporaryServiceWorkerClient->sessionID);
     1822
    18211823    // FIXME: Compute ServiceWorkerClientFrameType appropriately.
    1822     ServiceWorkerClientData data { { m_temporaryServiceWorkerClient->serviceWorkerConnection->serverConnectionIdentifier(), m_temporaryServiceWorkerClient->documentIdentifier }, ServiceWorkerClientType::Window, ServiceWorkerClientFrameType::None, url };
     1824    ServiceWorkerClientData data { { serviceWorkerConnection.serverConnectionIdentifier(), m_temporaryServiceWorkerClient->documentIdentifier }, ServiceWorkerClientType::Window, ServiceWorkerClientFrameType::None, url };
    18231825
    18241826    RefPtr<SecurityOrigin> topOrigin;
     
    18271829    else
    18281830        topOrigin = &m_frame->mainFrame().document()->topOrigin();
    1829     m_temporaryServiceWorkerClient->serviceWorkerConnection->registerServiceWorkerClient(*topOrigin, WTFMove(data), m_serviceWorkerRegistrationData->identifier, m_frame->loader().userAgent(url));
     1831    serviceWorkerConnection.registerServiceWorkerClient(*topOrigin, WTFMove(data), m_serviceWorkerRegistrationData->identifier, m_frame->loader().userAgent(url));
    18301832#else
    18311833    UNUSED_PARAM(url);
     
    18391841        return;
    18401842
    1841     m_temporaryServiceWorkerClient->serviceWorkerConnection->unregisterServiceWorkerClient(m_temporaryServiceWorkerClient->documentIdentifier);
     1843    auto& serviceWorkerConnection = ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(m_temporaryServiceWorkerClient->sessionID);
     1844    serviceWorkerConnection.unregisterServiceWorkerClient(m_temporaryServiceWorkerClient->documentIdentifier);
    18421845    m_temporaryServiceWorkerClient = WTF::nullopt;
    18431846#endif
  • trunk/Source/WebCore/loader/DocumentLoader.h

    r245483 r245873  
    612612    struct TemporaryServiceWorkerClient {
    613613        DocumentIdentifier documentIdentifier;
    614         Ref<SWClientConnection> serviceWorkerConnection;
     614        PAL::SessionID sessionID;
    615615    };
    616616    Optional<TemporaryServiceWorkerClient> m_temporaryServiceWorkerClient;
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp

    r244225 r245873  
    576576}
    577577
    578 SWServerConnectionIdentifier ServiceWorkerContainer::connectionIdentifier()
    579 {
    580     ASSERT(m_swConnection);
    581     return m_swConnection->serverConnectionIdentifier();
    582 }
    583 
    584578const char* ServiceWorkerContainer::activeDOMObjectName() const
    585579{
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h

    r244160 r245873  
    104104    void didFinishGetRegistrationsRequest(uint64_t requestIdentifier, Vector<ServiceWorkerRegistrationData>&&);
    105105
    106     SWServerConnectionIdentifier connectionIdentifier() final;
    107106    DocumentOrWorkerIdentifier contextIdentifier() final;
    108107
  • trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h

    r240727 r245873  
    5252    virtual void jobFinishedLoadingScript(ServiceWorkerJob&, const String& script, const ContentSecurityPolicyResponseHeaders&, const String& referrerPolicy) = 0;
    5353    virtual void jobFailedLoadingScript(ServiceWorkerJob&, const ResourceError&, Exception&&) = 0;
    54 
    55     virtual SWServerConnectionIdentifier connectionIdentifier() = 0;
    5654};
    5755
  • trunk/Source/WebKit/ChangeLog

    r245872 r245873  
     12019-05-29  Youenn Fablet  <youenn@apple.com>
     2
     3        Reestablish WebSWClientConnection in case of network process crash
     4        https://bugs.webkit.org/show_bug.cgi?id=198333
     5
     6        Reviewed by Alex Christensen.
     7
     8        WebSWClientConnection now takes a RefPtr<IPC::Connection> so that on network process crash, it will set it back to null.
     9        On the next call that needs the connection, WebSWClientConnection will reinitialize its underlying IPC connection and its own identifier.
     10        Make sure that all code paths requiring this initialization are covered.
     11
     12        * WebProcess/Network/NetworkProcessConnection.cpp:
     13        (WebKit::NetworkProcessConnection::didClose):
     14        (WebKit::NetworkProcessConnection::serviceWorkerConnectionForSession):
     15        (WebKit::NetworkProcessConnection::isRegisteredActiveSWClientConnection):
     16        (WebKit::NetworkProcessConnection::initializeSWClientConnection):
     17        * WebProcess/Network/NetworkProcessConnection.h:
     18        * WebProcess/Storage/WebSWClientConnection.cpp:
     19        (WebKit::WebSWClientConnection::WebSWClientConnection):
     20        (WebKit::WebSWClientConnection::~WebSWClientConnection):
     21        (WebKit::WebSWClientConnection::initializeConnectionIfNeeded):
     22        (WebKit::WebSWClientConnection::ensureConnectionAndSend):
     23        (WebKit::WebSWClientConnection::scheduleJobInServer):
     24        (WebKit::WebSWClientConnection::finishFetchingScriptInServer):
     25        (WebKit::WebSWClientConnection::addServiceWorkerRegistrationInServer):
     26        (WebKit::WebSWClientConnection::removeServiceWorkerRegistrationInServer):
     27        (WebKit::WebSWClientConnection::registerServiceWorkerClient):
     28        (WebKit::WebSWClientConnection::unregisterServiceWorkerClient):
     29        (WebKit::WebSWClientConnection::didResolveRegistrationPromise):
     30        (WebKit::WebSWClientConnection::matchRegistration):
     31        (WebKit::WebSWClientConnection::runOrDelayTaskForImport):
     32        (WebKit::WebSWClientConnection::whenRegistrationReady):
     33        (WebKit::WebSWClientConnection::getRegistrations):
     34        (WebKit::WebSWClientConnection::startFetch):
     35        (WebKit::WebSWClientConnection::cancelFetch):
     36        (WebKit::WebSWClientConnection::continueDidReceiveFetchResponse):
     37        (WebKit::WebSWClientConnection::connectionToServerLost):
     38        (WebKit::WebSWClientConnection::syncTerminateWorker):
     39        (WebKit::WebSWClientConnection::serverConnectionIdentifier const):
     40        (WebKit::WebSWClientConnection::updateThrottleState):
     41        * WebProcess/Storage/WebSWClientConnection.h:
     42
    1432019-05-29  Said Abou-Hallawa  <sabouhallawa@apple.com>
    244
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp

    r245796 r245873  
    196196
    197197#if ENABLE(SERVICE_WORKER)
     198    m_swConnectionsByIdentifier.clear();
    198199    for (auto& connection : m_swConnectionsBySession.values())
    199200        connection->connectionToServerLost();
    200    
    201     m_swConnectionsByIdentifier.clear();
    202     m_swConnectionsBySession.clear();
    203201#endif
    204202}
     
    263261{
    264262    ASSERT(sessionID.isValid());
    265     return *m_swConnectionsBySession.ensure(sessionID, [&] {
    266         auto connection = WebSWClientConnection::create(m_connection, sessionID);
    267        
    268         auto result = m_swConnectionsByIdentifier.add(connection->serverConnectionIdentifier(), connection.ptr());
    269         ASSERT_UNUSED(result, result.isNewEntry);
    270        
    271         return connection;
     263    return *m_swConnectionsBySession.ensure(sessionID, [sessionID] {
     264        return WebSWClientConnection::create(sessionID);
    272265    }).iterator->value;
    273266}
     267
     268SWServerConnectionIdentifier NetworkProcessConnection::initializeSWClientConnection(WebSWClientConnection& connection)
     269{
     270    SWServerConnectionIdentifier identifier;
     271    bool result = m_connection->sendSync(Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection(connection.sessionID()), Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection::Reply(identifier), 0);
     272    ASSERT_UNUSED(result, result);
     273
     274    ASSERT(!m_swConnectionsByIdentifier.contains(identifier));
     275    m_swConnectionsByIdentifier.add(identifier, &connection);
     276
     277    return identifier;
     278}
     279
    274280#endif
    275281} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h

    r238655 r245873  
    3030#include "ShareableResource.h"
    3131#include "WebIDBConnectionToServer.h"
     32#include <WebCore/ServiceWorkerTypes.h>
    3233#include <wtf/RefCounted.h>
    3334#include <wtf/text/WTFString.h>
     
    7576    WebSWClientConnection* existingServiceWorkerConnectionForSession(PAL::SessionID sessionID) { return m_swConnectionsBySession.get(sessionID); }
    7677    WebSWClientConnection& serviceWorkerConnectionForSession(PAL::SessionID);
     78
     79    WebCore::SWServerConnectionIdentifier initializeSWClientConnection(WebSWClientConnection&);
    7780#endif
    7881
  • trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp

    r245299 r245873  
    3232#include "FormDataReference.h"
    3333#include "Logging.h"
    34 #include "NetworkConnectionToWebProcessMessages.h"
     34#include "NetworkProcessConnection.h"
    3535#include "ServiceWorkerClientFetch.h"
    3636#include "WebCoreArgumentCoders.h"
     
    5252using namespace WebCore;
    5353
    54 WebSWClientConnection::WebSWClientConnection(IPC::Connection& connection, SessionID sessionID)
     54
     55WebSWClientConnection::WebSWClientConnection(SessionID sessionID)
    5556    : m_sessionID(sessionID)
    56     , m_connection(connection)
    5757    , m_swOriginTable(makeUniqueRef<WebSWOriginTable>())
    5858{
    5959    ASSERT(sessionID.isValid());
    60     bool result = sendSync(Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection(sessionID), Messages::NetworkConnectionToWebProcess::EstablishSWServerConnection::Reply(m_identifier));
    61 
    62     ASSERT_UNUSED(result, result);
     60    initializeConnectionIfNeeded();
     61}
     62
     63WebSWClientConnection::~WebSWClientConnection()
     64{
     65}
     66
     67void WebSWClientConnection::initializeConnectionIfNeeded()
     68{
     69    if (m_connection)
     70        return;
     71
     72    auto& networkProcessConnection = WebProcess::singleton().ensureNetworkProcessConnection();
     73
     74    m_connection = &networkProcessConnection.connection();
     75    m_identifier = networkProcessConnection.initializeSWClientConnection(*this);
     76
    6377    updateThrottleState();
    6478}
    6579
    66 WebSWClientConnection::~WebSWClientConnection()
    67 {
     80template<typename U>
     81void WebSWClientConnection::ensureConnectionAndSend(const U& message)
     82{
     83    initializeConnectionIfNeeded();
     84    send(message);
    6885}
    6986
    7087void WebSWClientConnection::scheduleJobInServer(const ServiceWorkerJobData& jobData)
    7188{
    72     send(Messages::WebSWServerConnection::ScheduleJobInServer(jobData));
     89    ensureConnectionAndSend(Messages::WebSWServerConnection::ScheduleJobInServer(jobData));
    7390}
    7491
    7592void WebSWClientConnection::finishFetchingScriptInServer(const ServiceWorkerFetchResult& result)
    7693{
    77     send(Messages::WebSWServerConnection::FinishFetchingScriptInServer(result));
     94    ensureConnectionAndSend(Messages::WebSWServerConnection::FinishFetchingScriptInServer(result));
    7895}
    7996
    8097void WebSWClientConnection::addServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier identifier)
    8198{
    82     send(Messages::WebSWServerConnection::AddServiceWorkerRegistrationInServer(identifier));
     99    ensureConnectionAndSend(Messages::WebSWServerConnection::AddServiceWorkerRegistrationInServer(identifier));
    83100}
    84101
    85102void WebSWClientConnection::removeServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier identifier)
    86103{
    87     send(Messages::WebSWServerConnection::RemoveServiceWorkerRegistrationInServer(identifier));
     104    ensureConnectionAndSend(Messages::WebSWServerConnection::RemoveServiceWorkerRegistrationInServer(identifier));
    88105}
    89106
     
    97114void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const Optional<WebCore::ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier, const String& userAgent)
    98115{
    99     send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { topOrigin.data(), data, controllingServiceWorkerRegistrationIdentifier, userAgent });
     116    ensureConnectionAndSend(Messages::WebSWServerConnection::RegisterServiceWorkerClient { topOrigin.data(), data, controllingServiceWorkerRegistrationIdentifier, userAgent });
    100117}
    101118
    102119void WebSWClientConnection::unregisterServiceWorkerClient(DocumentIdentifier contextIdentifier)
    103120{
    104     send(Messages::WebSWServerConnection::UnregisterServiceWorkerClient { ServiceWorkerClientIdentifier { serverConnectionIdentifier(), contextIdentifier } });
     121    ensureConnectionAndSend(Messages::WebSWServerConnection::UnregisterServiceWorkerClient { ServiceWorkerClientIdentifier { serverConnectionIdentifier(), contextIdentifier } });
    105122}
    106123
    107124void WebSWClientConnection::didResolveRegistrationPromise(const ServiceWorkerRegistrationKey& key)
    108125{
    109     send(Messages::WebSWServerConnection::DidResolveRegistrationPromise(key));
     126    ensureConnectionAndSend(Messages::WebSWServerConnection::DidResolveRegistrationPromise(key));
    110127}
    111128
     
    158175        uint64_t callbackID = ++m_previousCallbackIdentifier;
    159176        m_ongoingMatchRegistrationTasks.add(callbackID, WTFMove(callback));
    160         send(Messages::WebSWServerConnection::MatchRegistration(callbackID, topOrigin, clientURL));
     177        ensureConnectionAndSend(Messages::WebSWServerConnection::MatchRegistration(callbackID, topOrigin, clientURL));
    161178    });
    162179}
     
    164181void WebSWClientConnection::runOrDelayTaskForImport(WTF::Function<void()>&& task)
    165182{
    166     if (m_swOriginTable->isImported())
     183    if (m_swOriginTable->isImported()) {
    167184        task();
    168     else
    169         m_tasksPendingOriginImport.append(WTFMove(task));
     185        return;
     186    }
     187    m_tasksPendingOriginImport.append(WTFMove(task));
     188    initializeConnectionIfNeeded();
    170189}
    171190
     
    174193    uint64_t callbackID = ++m_previousCallbackIdentifier;
    175194    m_ongoingRegistrationReadyTasks.add(callbackID, WTFMove(callback));
    176     send(Messages::WebSWServerConnection::WhenRegistrationReady(callbackID, topOrigin.data(), clientURL));
     195    ensureConnectionAndSend(Messages::WebSWServerConnection::WhenRegistrationReady(callbackID, topOrigin.data(), clientURL));
    177196}
    178197
     
    196215        uint64_t callbackID = ++m_previousCallbackIdentifier;
    197216        m_ongoingGetRegistrationsTasks.add(callbackID, WTFMove(callback));
    198         send(Messages::WebSWServerConnection::GetRegistrations(callbackID, topOrigin, clientURL));
     217        ensureConnectionAndSend(Messages::WebSWServerConnection::GetRegistrations(callbackID, topOrigin, clientURL));
    199218    });
    200219}
     
    202221void WebSWClientConnection::startFetch(FetchIdentifier fetchIdentifier, ServiceWorkerRegistrationIdentifier serviceWorkerRegistrationIdentifier, const ResourceRequest& request, const FetchOptions& options, const String& referrer)
    203222{
    204     send(Messages::WebSWServerConnection::StartFetch { serviceWorkerRegistrationIdentifier, fetchIdentifier, request, options, IPC::FormDataReference { request.httpBody() }, referrer });
     223    ensureConnectionAndSend(Messages::WebSWServerConnection::StartFetch { serviceWorkerRegistrationIdentifier, fetchIdentifier, request, options, IPC::FormDataReference { request.httpBody() }, referrer });
    205224}
    206225
    207226void WebSWClientConnection::cancelFetch(FetchIdentifier fetchIdentifier, ServiceWorkerRegistrationIdentifier serviceWorkerRegistrationIdentifier)
    208227{
    209     send(Messages::WebSWServerConnection::CancelFetch { serviceWorkerRegistrationIdentifier, fetchIdentifier });
     228    ensureConnectionAndSend(Messages::WebSWServerConnection::CancelFetch { serviceWorkerRegistrationIdentifier, fetchIdentifier });
    210229}
    211230
    212231void WebSWClientConnection::continueDidReceiveFetchResponse(FetchIdentifier fetchIdentifier, ServiceWorkerRegistrationIdentifier serviceWorkerRegistrationIdentifier)
    213232{
    214     send(Messages::WebSWServerConnection::ContinueDidReceiveFetchResponse { serviceWorkerRegistrationIdentifier, fetchIdentifier });
     233    ensureConnectionAndSend(Messages::WebSWServerConnection::ContinueDidReceiveFetchResponse { serviceWorkerRegistrationIdentifier, fetchIdentifier });
    215234}
    216235
    217236void WebSWClientConnection::connectionToServerLost()
    218237{
     238    m_connection = nullptr;
     239
    219240    auto registrationTasks = WTFMove(m_ongoingMatchRegistrationTasks);
    220241    for (auto& callback : registrationTasks.values())
     
    230251void WebSWClientConnection::syncTerminateWorker(ServiceWorkerIdentifier identifier)
    231252{
     253    initializeConnectionIfNeeded();
     254
    232255    sendSync(Messages::WebSWServerConnection::SyncTerminateWorkerFromClient(identifier), Messages::WebSWServerConnection::SyncTerminateWorkerFromClient::Reply());
    233256}
    234257
     258WebCore::SWServerConnectionIdentifier WebSWClientConnection::serverConnectionIdentifier() const
     259{
     260    const_cast<WebSWClientConnection*>(this)->initializeConnectionIfNeeded();
     261    return m_identifier;
     262}
     263
    235264void WebSWClientConnection::updateThrottleState()
    236265{
    237266    m_isThrottleable = WebProcess::singleton().areAllPagesThrottleable();
    238     send(Messages::WebSWServerConnection::SetThrottleState { m_isThrottleable });
     267    ensureConnectionAndSend(Messages::WebSWServerConnection::SetThrottleState { m_isThrottleable });
    239268}
    240269
  • trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h

    r245299 r245873  
    4848class WebServiceWorkerProvider;
    4949
    50 class WebSWClientConnection final : public WebCore::SWClientConnection, public IPC::MessageSender, public IPC::MessageReceiver {
     50class WebSWClientConnection final : public WebCore::SWClientConnection, private IPC::MessageSender, public IPC::MessageReceiver {
    5151public:
    52     static Ref<WebSWClientConnection> create(IPC::Connection& connection, PAL::SessionID sessionID) { return adoptRef(*new WebSWClientConnection { connection, sessionID }); }
     52    static Ref<WebSWClientConnection> create(PAL::SessionID sessionID) { return adoptRef(*new WebSWClientConnection { sessionID }); }
    5353    ~WebSWClientConnection();
    5454
    55     WebCore::SWServerConnectionIdentifier serverConnectionIdentifier() const final { return m_identifier; }
     55    WebCore::SWServerConnectionIdentifier serverConnectionIdentifier() const final;
    5656
    5757    void addServiceWorkerRegistrationInServer(WebCore::ServiceWorkerRegistrationIdentifier) final;
     
    7070    void syncTerminateWorker(WebCore::ServiceWorkerIdentifier) final;
    7171
     72    PAL::SessionID sessionID() const { return m_sessionID; }
     73
    7274private:
    73     WebSWClientConnection(IPC::Connection&, PAL::SessionID);
     75    explicit WebSWClientConnection(PAL::SessionID);
     76
     77    void initializeConnectionIfNeeded();
    7478
    7579    void scheduleJobInServer(const WebCore::ServiceWorkerJobData&) final;
     
    9599    void runOrDelayTaskForImport(WTF::Function<void()>&& task);
    96100
    97     IPC::Connection* messageSenderConnection() const final { return m_connection.ptr(); }
     101    IPC::Connection* messageSenderConnection() const final { return m_connection.get(); }
    98102    uint64_t messageSenderDestinationID() const final { return m_identifier.toUInt64(); }
    99103
     
    101105    void setSWOriginTableIsImported();
    102106
     107    template<typename U> void ensureConnectionAndSend(const U& message);
     108
    103109    PAL::SessionID m_sessionID;
    104110    WebCore::SWServerConnectionIdentifier m_identifier;
    105111
    106     Ref<IPC::Connection> m_connection;
     112    RefPtr<IPC::Connection> m_connection;
    107113    UniqueRef<WebSWOriginTable> m_swOriginTable;
    108114
Note: See TracChangeset for help on using the changeset viewer.