Title: [229163] trunk/Source
Revision
229163
Author
[email protected]
Date
2018-03-01 22:04:24 -0800 (Thu, 01 Mar 2018)

Log 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

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (229162 => 229163)


--- trunk/Source/WebCore/ChangeLog	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/ChangeLog	2018-03-02 06:04:24 UTC (rev 229163)
@@ -1,3 +1,19 @@
+2018-03-01  Commit Queue  <[email protected]>
+
+        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
+
 2018-03-01  Youenn Fablet  <[email protected]>
 
         Clients should register to StorageProcess with their service worker registration identifier

Modified: trunk/Source/WebCore/dom/Document.cpp (229162 => 229163)


--- trunk/Source/WebCore/dom/Document.cpp	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/dom/Document.cpp	2018-03-02 06:04:24 UTC (rev 229163)
@@ -7743,8 +7743,8 @@
     if (!m_serviceWorkerConnection)
         return;
 
-    auto controllingServiceWorkerRegistrationIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerRegistrationIdentifier>(activeServiceWorker()->registrationIdentifier()) : std::nullopt;
-    m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorkerRegistrationIdentifier);
+    auto controllingServiceWorkerIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerIdentifier>(activeServiceWorker()->identifier()) : std::nullopt;
+    m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorkerIdentifier);
 }
 #endif
 

Modified: trunk/Source/WebCore/workers/service/SWClientConnection.h (229162 => 229163)


--- trunk/Source/WebCore/workers/service/SWClientConnection.h	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/workers/service/SWClientConnection.h	2018-03-02 06:04:24 UTC (rev 229163)
@@ -80,7 +80,7 @@
     virtual bool mayHaveServiceWorkerRegisteredForOrigin(const SecurityOrigin&) const = 0;
     virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0;
 
-    virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorkerRegistrationIdentifier>&) = 0;
+    virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorkerIdentifier>&) = 0;
     virtual void unregisterServiceWorkerClient(DocumentIdentifier) = 0;
 
     virtual void finishFetchingScriptInServer(const ServiceWorkerFetchResult&) = 0;

Modified: trunk/Source/WebCore/workers/service/server/SWServer.cpp (229162 => 229163)


--- trunk/Source/WebCore/workers/service/server/SWServer.cpp	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/workers/service/server/SWServer.cpp	2018-03-02 06:04:24 UTC (rev 229163)
@@ -417,7 +417,7 @@
 
     Vector<ServiceWorkerClientData> matchingClients;
     forEachClientForOrigin(worker.origin(), [&](auto& clientData) {
-        if (!options.includeUncontrolled && worker.data().registrationIdentifier != m_clientToControllingRegistration.get(clientData.identifier))
+        if (!options.includeUncontrolled && worker.identifier() != m_clientToControllingWorker.get(clientData.identifier))
             return;
         if (options.type != ServiceWorkerClientType::All && options.type != clientData.type)
             return;
@@ -447,13 +447,13 @@
         if (!(registration && registration->key() == worker.registrationKey()))
             return;
 
-        auto result = m_clientToControllingRegistration.add(clientData.identifier, registration->identifier());
+        auto result = m_clientToControllingWorker.add(clientData.identifier, worker.identifier());
         if (!result.isNewEntry) {
             auto previousIdentifier = result.iterator->value;
-            if (previousIdentifier == registration->identifier())
+            if (previousIdentifier == worker.identifier())
                 return;
-            result.iterator->value = registration->identifier();
-            if (auto* controllingRegistration = m_registrationsByID.get(previousIdentifier))
+            result.iterator->value = worker.identifier();
+            if (auto* controllingRegistration = this->registrationFromServiceWorkerIdentifier(previousIdentifier))
                 controllingRegistration->removeClientUsingRegistration(clientData.identifier);
         }
         registration->controlClient(clientData.identifier);
@@ -726,6 +726,11 @@
     return (selectedRegistration && !selectedRegistration->isUninstalling()) ? selectedRegistration : nullptr;
 }
 
+void SWServer::setClientActiveWorker(ServiceWorkerClientIdentifier clientIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier)
+{
+    m_clientToControllingWorker.set(clientIdentifier, serviceWorkerIdentifier);
+}
+
 SWServerRegistration* SWServer::registrationFromServiceWorkerIdentifier(ServiceWorkerIdentifier identifier)
 {
     auto iterator = m_runningOrTerminatingWorkers.find(identifier);
@@ -735,7 +740,7 @@
     return m_registrations.get(iterator->value->registrationKey());
 }
 
-void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
+void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
 {
     auto clientIdentifier = data.identifier;
     auto addResult = m_clientsById.add(clientIdentifier, WTFMove(data));
@@ -747,16 +752,14 @@
     clientIdentifiersForOrigin.identifiers.append(clientIdentifier);
     clientIdentifiersForOrigin.terminateServiceWorkersTimer = nullptr;
 
-    if (!controllingServiceWorkerRegistrationIdentifier)
+    if (!controllingServiceWorkerIdentifier)
         return;
 
-    auto* controllingRegistration = m_registrationsByID.get(*controllingServiceWorkerRegistrationIdentifier);
-    if (!controllingRegistration || !controllingRegistration->activeWorker())
-        return;
-
-    controllingRegistration->addClientUsingRegistration(clientIdentifier);
-    auto result = m_clientToControllingRegistration.add(clientIdentifier, *controllingServiceWorkerRegistrationIdentifier);
-    ASSERT_UNUSED(result, result.isNewEntry);
+    if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(*controllingServiceWorkerIdentifier)) {
+        controllingRegistration->addClientUsingRegistration(clientIdentifier);
+        auto result = m_clientToControllingWorker.add(clientIdentifier, *controllingServiceWorkerIdentifier);
+        ASSERT_UNUSED(result, result.isNewEntry);
+    }
 }
 
 void SWServer::unregisterServiceWorkerClient(const ClientOrigin& clientOrigin, ServiceWorkerClientIdentifier clientIdentifier)
@@ -783,14 +786,14 @@
         iterator->value.terminateServiceWorkersTimer->startOneShot(terminationDelay);
     }
 
-    auto registrationIterator = m_clientToControllingRegistration.find(clientIdentifier);
-    if (registrationIterator == m_clientToControllingRegistration.end())
+    auto workerIterator = m_clientToControllingWorker.find(clientIdentifier);
+    if (workerIterator == m_clientToControllingWorker.end())
         return;
 
-    if (auto* registration = m_registrationsByID.get(registrationIterator->value))
-        registration->removeClientUsingRegistration(clientIdentifier);
+    if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(workerIterator->value))
+        controllingRegistration->removeClientUsingRegistration(clientIdentifier);
 
-    m_clientToControllingRegistration.remove(registrationIterator);
+    m_clientToControllingWorker.remove(workerIterator);
 }
 
 void SWServer::resolveRegistrationReadyRequests(SWServerRegistration& registration)

Modified: trunk/Source/WebCore/workers/service/server/SWServer.h (229162 => 229163)


--- trunk/Source/WebCore/workers/service/server/SWServer.h	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/workers/service/server/SWServer.h	2018-03-02 06:04:24 UTC (rev 229163)
@@ -161,12 +161,13 @@
     
     WEBCORE_EXPORT static HashSet<SWServer*>& allServers();
 
-    WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorkerRegistrationIdentifier>&);
+    WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier);
     WEBCORE_EXPORT void unregisterServiceWorkerClient(const ClientOrigin&, ServiceWorkerClientIdentifier);
 
     using RunServiceWorkerCallback = WTF::Function<void(bool, SWServerToContextConnection&)>;
     WEBCORE_EXPORT void runServiceWorkerIfNecessary(ServiceWorkerIdentifier, RunServiceWorkerCallback&&);
 
+    void setClientActiveWorker(ServiceWorkerClientIdentifier, ServiceWorkerIdentifier);
     void resolveRegistrationReadyRequests(SWServerRegistration&);
 
     void addRegistrationFromStore(ServiceWorkerContextData&&);
@@ -220,7 +221,7 @@
     };
     HashMap<ClientOrigin, Clients> m_clientIdentifiersPerOrigin;
     HashMap<ServiceWorkerClientIdentifier, ServiceWorkerClientData> m_clientsById;
-    HashMap<ServiceWorkerClientIdentifier, ServiceWorkerRegistrationIdentifier> m_clientToControllingRegistration;
+    HashMap<ServiceWorkerClientIdentifier, ServiceWorkerIdentifier> m_clientToControllingWorker;
 
     UniqueRef<SWOriginStore> m_originStore;
     RegistrationStore m_registrationStore;

Modified: trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp (229162 => 229163)


--- trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp	2018-03-02 06:04:24 UTC (rev 229163)
@@ -307,7 +307,10 @@
 
     // For each service worker client who is using registration:
     // - Set client's active worker to registration's active worker.
-
+    for (auto keyValue : m_clientsUsingRegistration) {
+        for (auto& clientIdentifier : keyValue.value)
+            m_server.setClientActiveWorker(ServiceWorkerClientIdentifier { keyValue.key, clientIdentifier }, activeWorker()->identifier());
+    }
     // - Invoke Notify Controller Change algorithm with client as the argument.
     notifyClientsOfControllerChange();
 

Modified: trunk/Source/WebKit/ChangeLog (229162 => 229163)


--- trunk/Source/WebKit/ChangeLog	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/ChangeLog	2018-03-02 06:04:24 UTC (rev 229163)
@@ -1,3 +1,19 @@
+2018-03-01  Commit Queue  <[email protected]>
+
+        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
+
 2018-03-01  Brent Fulgham  <[email protected]>
 
         Add the "com.apple.security.cs.disable-library-validation” entitlement to the Plugin Process

Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp (229162 => 229163)


--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp	2018-03-02 06:04:24 UTC (rev 229163)
@@ -278,11 +278,11 @@
     send(Messages::WebSWClientConnection::DidGetRegistrations { registrationMatchRequestIdentifier, registrations });
 }
 
-void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
+void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
 {
     auto clientOrigin = ClientOrigin { WTFMove(topOrigin), SecurityOriginData::fromSecurityOrigin(SecurityOrigin::create(data.url)) };
     m_clientOrigins.add(data.identifier, clientOrigin);
-    server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorkerRegistrationIdentifier);
+    server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorkerIdentifier);
 }
 
 void WebSWServerConnection::unregisterServiceWorkerClient(const ServiceWorkerClientIdentifier& clientIdentifier)

Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h (229162 => 229163)


--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h	2018-03-02 06:04:24 UTC (rev 229163)
@@ -92,7 +92,7 @@
     void matchRegistration(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL);
     void getRegistrations(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL);
 
-    void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>&);
+    void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerIdentifier>&);
     void unregisterServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier&);
 
     IPC::Connection* messageSenderConnection() final { return m_contentConnection.ptr(); }

Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in (229162 => 229163)


--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in	2018-03-02 06:04:24 UTC (rev 229163)
@@ -38,7 +38,7 @@
     MatchRegistration(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL)
     WhenRegistrationReady(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL)
     GetRegistrations(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL)
-    RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerRegistrationIdentifier> controllingServiceWorkerRegistrationIdentifier)
+    RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerIdentifier> controllingServiceWorkerIdentifier)
     UnregisterServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier identifier)
 
     SyncTerminateWorker(WebCore::ServiceWorkerIdentifier workerIdentifier) -> ()

Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (229162 => 229163)


--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2018-03-02 06:04:24 UTC (rev 229163)
@@ -93,9 +93,9 @@
     WebProcess::singleton().send(Messages::WebProcessPool::PostMessageToServiceWorker(destinationIdentifier, WTFMove(message), sourceIdentifier, serverConnectionIdentifier()), 0);
 }
 
-void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)
+void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)
 {
-    send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), data, controllingServiceWorkerRegistrationIdentifier });
+    send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), data, controllingServiceWorkerIdentifier });
 }
 
 void WebSWClientConnection::unregisterServiceWorkerClient(DocumentIdentifier contextIdentifier)

Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h (229162 => 229163)


--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h	2018-03-02 05:55:39 UTC (rev 229162)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h	2018-03-02 06:04:24 UTC (rev 229163)
@@ -75,7 +75,7 @@
     void scheduleJobInServer(const WebCore::ServiceWorkerJobData&) final;
     void finishFetchingScriptInServer(const WebCore::ServiceWorkerFetchResult&) final;
     void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destinationIdentifier, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source) final;
-    void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData&, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>&) final;
+    void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData&, const std::optional<WebCore::ServiceWorkerIdentifier>&) final;
     void unregisterServiceWorkerClient(WebCore::DocumentIdentifier) final;
 
     void matchRegistration(const WebCore::SecurityOrigin& topOrigin, const WebCore::URL& clientURL, RegistrationCallback&&) final;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to