Changeset 229163 in webkit
- Timestamp:
- Mar 1, 2018 10:04:24 PM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r229153 r229163 1 2018-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 1 17 2018-03-01 Youenn Fablet <youenn@apple.com> 2 18 -
trunk/Source/WebCore/dom/Document.cpp
r229153 r229163 7744 7744 return; 7745 7745 7746 auto controllingServiceWorker RegistrationIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerRegistrationIdentifier>(activeServiceWorker()->registrationIdentifier()) : std::nullopt;7747 m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorker RegistrationIdentifier);7746 auto controllingServiceWorkerIdentifier = activeServiceWorker() ? std::make_optional<ServiceWorkerIdentifier>(activeServiceWorker()->identifier()) : std::nullopt; 7747 m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), ServiceWorkerClientData::from(*this, *serviceWorkerConnection), controllingServiceWorkerIdentifier); 7748 7748 } 7749 7749 #endif -
trunk/Source/WebCore/workers/service/SWClientConnection.h
r229153 r229163 81 81 virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0; 82 82 83 virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorker RegistrationIdentifier>&) = 0;83 virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const std::optional<ServiceWorkerIdentifier>&) = 0; 84 84 virtual void unregisterServiceWorkerClient(DocumentIdentifier) = 0; 85 85 -
trunk/Source/WebCore/workers/service/server/SWServer.cpp
r229153 r229163 418 418 Vector<ServiceWorkerClientData> matchingClients; 419 419 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)) 421 421 return; 422 422 if (options.type != ServiceWorkerClientType::All && options.type != clientData.type) … … 448 448 return; 449 449 450 auto result = m_clientToControlling Registration.add(clientData.identifier, registration->identifier());450 auto result = m_clientToControllingWorker.add(clientData.identifier, worker.identifier()); 451 451 if (!result.isNewEntry) { 452 452 auto previousIdentifier = result.iterator->value; 453 if (previousIdentifier == registration->identifier())453 if (previousIdentifier == worker.identifier()) 454 454 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)) 457 457 controllingRegistration->removeClientUsingRegistration(clientData.identifier); 458 458 } … … 727 727 } 728 728 729 void SWServer::setClientActiveWorker(ServiceWorkerClientIdentifier clientIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier) 730 { 731 m_clientToControllingWorker.set(clientIdentifier, serviceWorkerIdentifier); 732 } 733 729 734 SWServerRegistration* SWServer::registrationFromServiceWorkerIdentifier(ServiceWorkerIdentifier identifier) 730 735 { … … 736 741 } 737 742 738 void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorker RegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)743 void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier) 739 744 { 740 745 auto clientIdentifier = data.identifier; … … 748 753 clientIdentifiersForOrigin.terminateServiceWorkersTimer = nullptr; 749 754 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 } 760 763 } 761 764 … … 784 787 } 785 788 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_clientToControlling Registration.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); 794 797 } 795 798 -
trunk/Source/WebCore/workers/service/server/SWServer.h
r229153 r229163 162 162 WEBCORE_EXPORT static HashSet<SWServer*>& allServers(); 163 163 164 WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorker RegistrationIdentifier>&);164 WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientData&&, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier); 165 165 WEBCORE_EXPORT void unregisterServiceWorkerClient(const ClientOrigin&, ServiceWorkerClientIdentifier); 166 166 … … 168 168 WEBCORE_EXPORT void runServiceWorkerIfNecessary(ServiceWorkerIdentifier, RunServiceWorkerCallback&&); 169 169 170 void setClientActiveWorker(ServiceWorkerClientIdentifier, ServiceWorkerIdentifier); 170 171 void resolveRegistrationReadyRequests(SWServerRegistration&); 171 172 … … 221 222 HashMap<ClientOrigin, Clients> m_clientIdentifiersPerOrigin; 222 223 HashMap<ServiceWorkerClientIdentifier, ServiceWorkerClientData> m_clientsById; 223 HashMap<ServiceWorkerClientIdentifier, ServiceWorker RegistrationIdentifier> m_clientToControllingRegistration;224 HashMap<ServiceWorkerClientIdentifier, ServiceWorkerIdentifier> m_clientToControllingWorker; 224 225 225 226 UniqueRef<SWOriginStore> m_originStore; -
trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp
r229153 r229163 308 308 // For each service worker client who is using registration: 309 309 // - 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 } 311 314 // - Invoke Notify Controller Change algorithm with client as the argument. 312 315 notifyClientsOfControllerChange(); -
trunk/Source/WebKit/ChangeLog
r229154 r229163 1 2018-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 1 17 2018-03-01 Brent Fulgham <bfulgham@apple.com> 2 18 -
trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp
r229153 r229163 279 279 } 280 280 281 void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorker RegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)281 void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier) 282 282 { 283 283 auto clientOrigin = ClientOrigin { WTFMove(topOrigin), SecurityOriginData::fromSecurityOrigin(SecurityOrigin::create(data.url)) }; 284 284 m_clientOrigins.add(data.identifier, clientOrigin); 285 server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorker RegistrationIdentifier);285 server().registerServiceWorkerClient(WTFMove(clientOrigin), WTFMove(data), controllingServiceWorkerIdentifier); 286 286 } 287 287 -
trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h
r229153 r229163 93 93 void getRegistrations(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL); 94 94 95 void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorker RegistrationIdentifier>&);95 void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerIdentifier>&); 96 96 void unregisterServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier&); 97 97 -
trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in
r229153 r229163 39 39 WhenRegistrationReady(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL) 40 40 GetRegistrations(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, WebCore::URL clientURL) 41 RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorker RegistrationIdentifier> controllingServiceWorkerRegistrationIdentifier)41 RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerIdentifier> controllingServiceWorkerIdentifier) 42 42 UnregisterServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier identifier) 43 43 -
trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp
r229153 r229163 94 94 } 95 95 96 void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorker RegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier)97 { 98 send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), data, controllingServiceWorker RegistrationIdentifier });96 void 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 }); 99 99 } 100 100 -
trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h
r229153 r229163 76 76 void finishFetchingScriptInServer(const WebCore::ServiceWorkerFetchResult&) final; 77 77 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::ServiceWorker RegistrationIdentifier>&) final;78 void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData&, const std::optional<WebCore::ServiceWorkerIdentifier>&) final; 79 79 void unregisterServiceWorkerClient(WebCore::DocumentIdentifier) final; 80 80
Note: See TracChangeset
for help on using the changeset viewer.