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;