Changeset 229163 in webkit


Ignore:
Timestamp:
Mar 1, 2018 10:04:24 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r229153.
https://bugs.webkit.org/show_bug.cgi?id=183274

it is breaking imported/w3c/web-platform-tests/service-workers
/service-worker/clients-matchall-exact-controller.https.html
(Requested by youenn on #webkit).

Reverted changeset:

"Clients should register to StorageProcess with their service
worker registration identifier"
https://bugs.webkit.org/show_bug.cgi?id=182313
https://trac.webkit.org/changeset/229153

Location:
trunk/Source
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r229153 r229163  
     12018-03-01  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r229153.
     4        https://bugs.webkit.org/show_bug.cgi?id=183274
     5
     6        it is breaking imported/w3c/web-platform-tests/service-workers
     7        /service-worker/clients-matchall-exact-controller.https.html
     8        (Requested by youenn on #webkit).
     9
     10        Reverted changeset:
     11
     12        "Clients should register to StorageProcess with their service
     13        worker registration identifier"
     14        https://bugs.webkit.org/show_bug.cgi?id=182313
     15        https://trac.webkit.org/changeset/229153
     16
    1172018-03-01  Youenn Fablet  <youenn@apple.com>
    218
  • trunk/Source/WebCore/dom/Document.cpp

    r229153 r229163  
    77447744        return;
    77457745
    7746     auto controllingServiceWorkerRegistrationIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerRegistrationIdentifier>(activeServiceWorker()->registrationIdentifier()) : std::nullopt;
    7747     m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorkerRegistrationIdentifier);
     7746    auto controllingServiceWorkerIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerIdentifier>(activeServiceWorker()->identifier()) : std::nullopt;
     7747    m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorkerIdentifier);
    77487748}
    77497749#endif
  • trunk/Source/WebCore/workers/service/SWClientConnection.h

    r229153 r229163  
    8181    virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0;
    8282
    83     virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorkerRegistrationIdentifier>&) = 0;
     83    virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorkerIdentifier>&) = 0;
    8484    virtual void unregisterServiceWorkerClient(DocumentIdentifier) = 0;
    8585
  • trunk/Source/WebCore/workers/service/server/SWServer.cpp

    r229153 r229163  
    418418    Vector<ServiceWorkerClientData> matchingClients;
    419419    forEachClientForOrigin(worker.origin(), [&](auto& clientData) {
    420         if (!options.includeUncontrolled && worker.data().registrationIdentifier != m_clientToControllingRegistration.get(clientData.identifier))
     420        if (!options.includeUncontrolled && worker.identifier() != m_clientToControllingWorker.get(clientData.identifier))
    421421            return;
    422422        if (options.type != ServiceWorkerClientType::All && options.type != clientData.type)
     
    448448            return;
    449449
    450         auto result = m_clientToControllingRegistration.add(clientData.identifier, registration->identifier());
     450        auto result = m_clientToControllingWorker.add(clientData.identifier, worker.identifier());
    451451        if (!result.isNewEntry) {
    452452            auto previousIdentifier = result.iterator->value;
    453             if (previousIdentifier == registration->identifier())
     453            if (previousIdentifier == worker.identifier())
    454454                return;
    455             result.iterator->value = registration->identifier();
    456             if (auto* controllingRegistration = m_registrationsByID.get(previousIdentifier))
     455            result.iterator->value = worker.identifier();
     456            if (auto* controllingRegistration = this->registrationFromServiceWorkerIdentifier(previousIdentifier))
    457457                controllingRegistration->removeClientUsingRegistration(clientData.identifier);
    458458        }
     
    727727}
    728728
     729void SWServer::setClientActiveWorker(ServiceWorkerClientIdentifier clientIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier)
     730{
     731    m_clientToControllingWorker.set(clientIdentifier, serviceWorkerIdentifier);
     732}
     733
    729734SWServerRegistration* SWServer::registrationFromServiceWorkerIdentifier(ServiceWorkerIdentifier identifier)
    730735{
     
    736741}
    737742
    738 void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
     743void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
    739744{
    740745    auto clientIdentifier = data.identifier;
     
    748753    clientIdentifiersForOrigin.terminateServiceWorkersTimer = nullptr;
    749754
    750     if (!controllingServiceWorkerRegistrationIdentifier)
    751         return;
    752 
    753     auto* controllingRegistration = m_registrationsByID.get(*controllingServiceWorkerRegistrationIdentifier);
    754     if (!controllingRegistration || !controllingRegistration->activeWorker())
    755         return;
    756 
    757     controllingRegistration->addClientUsingRegistration(clientIdentifier);
    758     auto result = m_clientToControllingRegistration.add(clientIdentifier, *controllingServiceWorkerRegistrationIdentifier);
    759     ASSERT_UNUSED(result, result.isNewEntry);
     755    if (!controllingServiceWorkerIdentifier)
     756        return;
     757
     758    if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(*controllingServiceWorkerIdentifier)) {
     759        controllingRegistration->addClientUsingRegistration(clientIdentifier);
     760        auto result = m_clientToControllingWorker.add(clientIdentifier, *controllingServiceWorkerIdentifier);
     761        ASSERT_UNUSED(result, result.isNewEntry);
     762    }
    760763}
    761764
     
    784787    }
    785788
    786     auto registrationIterator = m_clientToControllingRegistration.find(clientIdentifier);
    787     if (registrationIterator == m_clientToControllingRegistration.end())
    788         return;
    789 
    790     if (auto* registration = m_registrationsByID.get(registrationIterator->value))
    791         registration->removeClientUsingRegistration(clientIdentifier);
    792 
    793     m_clientToControllingRegistration.remove(registrationIterator);
     789    auto workerIterator = m_clientToControllingWorker.find(clientIdentifier);
     790    if (workerIterator == m_clientToControllingWorker.end())
     791        return;
     792
     793    if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(workerIterator->value))
     794        controllingRegistration->removeClientUsingRegistration(clientIdentifier);
     795
     796    m_clientToControllingWorker.remove(workerIterator);
    794797}
    795798
  • trunk/Source/WebCore/workers/service/server/SWServer.h

    r229153 r229163  
    162162    WEBCORE_EXPORT static HashSet<SWServer*>& allServers();
    163163
    164     WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorkerRegistrationIdentifier>&);
     164    WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier);
    165165    WEBCORE_EXPORT void unregisterServiceWorkerClient(const ClientOrigin&, ServiceWorkerClientIdentifier);
    166166
     
    168168    WEBCORE_EXPORT void runServiceWorkerIfNecessary(ServiceWorkerIdentifier, RunServiceWorkerCallback&&);
    169169
     170    void setClientActiveWorker(ServiceWorkerClientIdentifier, ServiceWorkerIdentifier);
    170171    void resolveRegistrationReadyRequests(SWServerRegistration&);
    171172
     
    221222    HashMap<ClientOrigin, Clients> m_clientIdentifiersPerOrigin;
    222223    HashMap<ServiceWorkerClientIdentifier, ServiceWorkerClientData> m_clientsById;
    223     HashMap<ServiceWorkerClientIdentifier, ServiceWorkerRegistrationIdentifier> m_clientToControllingRegistration;
     224    HashMap<ServiceWorkerClientIdentifier, ServiceWorkerIdentifier> m_clientToControllingWorker;
    224225
    225226    UniqueRef<SWOriginStore> m_originStore;
  • trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp

    r229153 r229163  
    308308    // For each service worker client who is using registration:
    309309    // - Set client's active worker to registration's active worker.
    310 
     310    for (auto keyValue : m_clientsUsingRegistration) {
     311        for (auto& clientIdentifier : keyValue.value)
     312            m_server.setClientActiveWorker(ServiceWorkerClientIdentifier { keyValue.key, clientIdentifier }, activeWorker()->identifier());
     313    }
    311314    // - Invoke Notify Controller Change algorithm with client as the argument.
    312315    notifyClientsOfControllerChange();
  • trunk/Source/WebKit/ChangeLog

    r229154 r229163  
     12018-03-01  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r229153.
     4        https://bugs.webkit.org/show_bug.cgi?id=183274
     5
     6        it is breaking imported/w3c/web-platform-tests/service-workers
     7        /service-worker/clients-matchall-exact-controller.https.html
     8        (Requested by youenn on #webkit).
     9
     10        Reverted changeset:
     11
     12        "Clients should register to StorageProcess with their service
     13        worker registration identifier"
     14        https://bugs.webkit.org/show_bug.cgi?id=182313
     15        https://trac.webkit.org/changeset/229153
     16
    1172018-03-01  Brent Fulgham  <bfulgham@apple.com>
    218
  • trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp

    r229153 r229163  
    279279}
    280280
    281 void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
     281void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
    282282{
    283283    auto clientOrigin = ClientOrigin { WTFMove(topOrigin), SecurityOriginData::fromSecurityOrigin(SecurityOrigin::create(data.url)) };
    284284    m_clientOrigins.add(data.identifier, clientOrigin);
    285     server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorkerRegistrationIdentifier);
     285    server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorkerIdentifier);
    286286}
    287287
  • trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h

    r229153 r229163  
    9393    void getRegistrations(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL);
    9494
    95     void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>&);
     95    void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerIdentifier>&);
    9696    void unregisterServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier&);
    9797
  • trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in

    r229153 r229163  
    3939    WhenRegistrationReady(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL)
    4040    GetRegistrations(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL)
    41     RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerRegistrationIdentifier> controllingServiceWorkerRegistrationIdentifier)
     41    RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerIdentifier> controllingServiceWorkerIdentifier)
    4242    UnregisterServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier identifier)
    4343
  • trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp

    r229153 r229163  
    9494}
    9595
    96 void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
    97 {
    98     send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), data, controllingServiceWorkerRegistrationIdentifier });
     96void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
     97{
     98    send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), data, controllingServiceWorkerIdentifier });
    9999}
    100100
  • trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h

    r229153 r229163  
    7676    void finishFetchingScriptInServer(const WebCore::ServiceWorkerFetchResult&) final;
    7777    void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destinationIdentifier, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source) final;
    78     void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData&, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>&) final;
     78    void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData&, const std::optional<WebCore::ServiceWorkerIdentifier>&) final;
    7979    void unregisterServiceWorkerClient(WebCore::DocumentIdentifier) final;
    8080
Note: See TracChangeset for help on using the changeset viewer.