WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-180382-20171204163549.patch (text/plain), 29.11 KB, created by
youenn fablet
on 2017-12-04 16:35:50 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2017-12-04 16:35:50 PST
Size:
29.11 KB
patch
obsolete
>Subversion Revision: 225498 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 987e97da68a4c482a803f087812c256cbbb802cc..81057b85a359087f2c6a8d0345d2bdb3e42a8ec0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,36 @@ >+2017-12-04 Youenn Fablet <youenn@apple.com> >+ >+ Implement setting of service worker to client in SWServer without going to WebProcess >+ https://bugs.webkit.org/show_bug.cgi?id=180382 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ No change of behavior. >+ >+ This patch removes the notification of active worker setting from ScriptExecution/WebProcess up to SWServer/StorageProcess. >+ Instead, active worker setting is fully done/controlled in SWServer. >+ Whenever there is a change, SWServer notifies WebProcess and ScriptExecutionContext gets updated accordingly. >+ >+ * dom/Document.cpp: >+ (WebCore::Document::setServiceWorkerConnection): >+ * dom/ScriptExecutionContext.cpp: >+ (WebCore::ScriptExecutionContext::setActiveServiceWorker): >+ * loader/DocumentLoader.cpp: >+ (WebCore::DocumentLoader::commitData): >+ * workers/service/SWClientConnection.h: >+ * workers/service/server/SWServer.cpp: >+ (WebCore::SWServer::setClientActiveWorker): >+ (WebCore::SWServer::registerServiceWorkerClient): >+ (WebCore::SWServer::registrationFromServiceWorkerIdentifier): >+ (WebCore::SWServer::unregisterServiceWorkerClient): >+ (WebCore::SWServer::Connection::serviceWorkerStartedControllingClient): Deleted. >+ (WebCore::SWServer::Connection::serviceWorkerStoppedControllingClient): Deleted. >+ (WebCore::SWServer::serviceWorkerStartedControllingClient): Deleted. >+ (WebCore::SWServer::serviceWorkerStoppedControllingClient): Deleted. >+ * workers/service/server/SWServer.h: >+ * workers/service/server/SWServerRegistration.cpp: >+ (WebCore::SWServerRegistration::activate): >+ > 2017-12-04 Zalan Bujtas <zalan@apple.com> > > REGRESSION (r211531): Text flow changes and overlaps other text after double-click selecting paragraph >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 552d6147a15a62fc064668385d0ea5f2f02a91bd..208045bab2b4b7cb5434144681b40b7594677dc2 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,21 @@ >+2017-12-04 Youenn Fablet <youenn@apple.com> >+ >+ Implement setting of service worker to client in SWServer without going to WebProcess >+ https://bugs.webkit.org/show_bug.cgi?id=180382 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in: >+ * StorageProcess/ServiceWorker/WebSWServerConnection.cpp: >+ (WebKit::WebSWServerConnection::registerServiceWorkerClient): >+ * StorageProcess/ServiceWorker/WebSWServerConnection.h: >+ * StorageProcess/ServiceWorker/WebSWServerConnection.messages.in: >+ * WebProcess/Storage/WebSWClientConnection.cpp: >+ (WebKit::WebSWClientConnection::registerServiceWorkerClient): >+ (WebKit::WebSWClientConnection::serviceWorkerStartedControllingClient): Deleted. >+ (WebKit::WebSWClientConnection::serviceWorkerStoppedControllingClient): Deleted. >+ * WebProcess/Storage/WebSWClientConnection.h: >+ > 2017-12-04 Brady Eidson <beidson@apple.com> > > Get a directory path to SWServers for storing ServiceWorker registrations. >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index feb5f975da1b10f3f2d2f58de0df3400c11525a4..9bbfa6af0786ec5677a0bea4e561aeec79ed2936 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -4967,6 +4967,7 @@ void Document::storageBlockingStateDidChange() > void Document::privateBrowsingStateDidChange() > { > m_sessionID = SessionID::emptySessionID(); >+ > if (m_logger) > m_logger->setEnabled(this, sessionID().isAlwaysOnLoggingAllowed()); > >@@ -7597,8 +7598,13 @@ void Document::setServiceWorkerConnection(SWClientConnection* serviceWorkerConne > > m_serviceWorkerConnection = serviceWorkerConnection; > >- if (m_serviceWorkerConnection) >- m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), identifier(), ServiceWorkerClientData::from(*this)); >+ if (!m_serviceWorkerConnection) >+ return; >+ >+ std::optional<ServiceWorkerIdentifier> controllingServiceWorkerIdentifier; >+ if (auto* worker = activeServiceWorker()) >+ controllingServiceWorkerIdentifier = worker->identifier(); >+ m_serviceWorkerConnection->registerServiceWorkerClient(topOrigin(), identifier(), ServiceWorkerClientData::from(*this), controllingServiceWorkerIdentifier); > } > #endif > >diff --git a/Source/WebCore/dom/ScriptExecutionContext.cpp b/Source/WebCore/dom/ScriptExecutionContext.cpp >index b6e85ea99c5da0c2da7ff62571ef759a445c18dd..3ed80aff440ea80ad33418cc29a52fa22e7f5b8f 100644 >--- a/Source/WebCore/dom/ScriptExecutionContext.cpp >+++ b/Source/WebCore/dom/ScriptExecutionContext.cpp >@@ -543,21 +543,7 @@ ServiceWorker* ScriptExecutionContext::activeServiceWorker() const > > void ScriptExecutionContext::setActiveServiceWorker(RefPtr<ServiceWorker>&& serviceWorker) > { >- // Add support for workers. >- if (!is<Document>(*this)) >- return; >- >- if (m_activeServiceWorker == serviceWorker) >- return; >- >- auto& connection = ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(sessionID()); >- if (m_activeServiceWorker) >- connection.serviceWorkerStoppedControllingClient(m_activeServiceWorker->identifier(), m_activeServiceWorker->registrationIdentifier(), downcast<Document>(*this).identifier()); >- > m_activeServiceWorker = WTFMove(serviceWorker); >- >- if (m_activeServiceWorker) >- connection.serviceWorkerStartedControllingClient(m_activeServiceWorker->identifier(), m_activeServiceWorker->registrationIdentifier(), downcast<Document>(*this).identifier()); > } > > void ScriptExecutionContext::registerServiceWorker(ServiceWorker& serviceWorker) >diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp >index ac885900de4edf16294bb442fa61f3a7358ea865..eee0403857ca621e1d79feee4b5b6cf399880c98 100644 >--- a/Source/WebCore/loader/DocumentLoader.cpp >+++ b/Source/WebCore/loader/DocumentLoader.cpp >@@ -874,11 +874,11 @@ void DocumentLoader::commitData(const char* bytes, size_t length) > if (RuntimeEnabledFeatures::sharedFeatures().serviceWorkerEnabled()) { > // FIXME: We should probably register the client as soon as we do the related navigation fetch. > // We can probably implement this when supporting FetchEvent.reservedClientId. >- m_frame->document()->setServiceWorkerConnection(&ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(m_frame->page()->sessionID())); > if (m_serviceWorkerRegistrationData && m_serviceWorkerRegistrationData->activeWorker) { > m_frame->document()->setActiveServiceWorker(ServiceWorker::getOrCreate(*m_frame->document(), WTFMove(m_serviceWorkerRegistrationData->activeWorker.value()))); > m_serviceWorkerRegistrationData = { }; > } >+ m_frame->document()->setServiceWorkerConnection(&ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(m_frame->page()->sessionID())); > } > #endif > // Call receivedFirstData() exactly once per load. We should only reach this point multiple times >diff --git a/Source/WebCore/workers/service/SWClientConnection.h b/Source/WebCore/workers/service/SWClientConnection.h >index d411ebf18d7a97505a34275e63b13c1604ee6b63..d44e797dded0af9fd0568c59778a2b75f27475e9 100644 >--- a/Source/WebCore/workers/service/SWClientConnection.h >+++ b/Source/WebCore/workers/service/SWClientConnection.h >@@ -78,10 +78,7 @@ public: > virtual bool mayHaveServiceWorkerRegisteredForOrigin(const SecurityOrigin&) const = 0; > virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0; > >- virtual void serviceWorkerStartedControllingClient(ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier) = 0; >- virtual void serviceWorkerStoppedControllingClient(ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier) = 0; >- >- virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, DocumentIdentifier, const ServiceWorkerClientData&) = 0; >+ virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, DocumentIdentifier, const ServiceWorkerClientData&, const std::optional<ServiceWorkerIdentifier>&) = 0; > virtual void unregisterServiceWorkerClient(DocumentIdentifier) = 0; > > protected: >diff --git a/Source/WebCore/workers/service/server/SWServer.cpp b/Source/WebCore/workers/service/server/SWServer.cpp >index ed44bcc601a225bdc6bff15de29503ce05a604fa..e92113ab43a970bf0a6176907d2887c60dffc4ed 100644 >--- a/Source/WebCore/workers/service/server/SWServer.cpp >+++ b/Source/WebCore/workers/service/server/SWServer.cpp >@@ -188,16 +188,6 @@ void SWServer::Connection::removeServiceWorkerRegistrationInServer(ServiceWorker > m_server.removeClientServiceWorkerRegistration(*this, identifier); > } > >-void SWServer::Connection::serviceWorkerStartedControllingClient(ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >-{ >- m_server.serviceWorkerStartedControllingClient(*this, serviceWorkerIdentifier, registrationIdentifier, contextIdentifier); >-} >- >-void SWServer::Connection::serviceWorkerStoppedControllingClient(ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >-{ >- m_server.serviceWorkerStoppedControllingClient(*this, serviceWorkerIdentifier, registrationIdentifier, contextIdentifier); >-} >- > void SWServer::Connection::syncTerminateWorker(ServiceWorkerIdentifier identifier) > { > if (auto* worker = m_server.workerByID(identifier)) >@@ -384,33 +374,6 @@ void SWServer::removeClientServiceWorkerRegistration(Connection& connection, Ser > registration->removeClientServiceWorkerRegistration(connection.identifier()); > } > >-void SWServer::serviceWorkerStartedControllingClient(Connection& connection, ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >-{ >- auto* registration = m_registrationsByID.get(registrationIdentifier); >- if (!registration) >- return; >- >- ServiceWorkerClientIdentifier clientIdentifier { connection.identifier(), contextIdentifier }; >- registration->addClientUsingRegistration(clientIdentifier); >- >- auto result = m_clientToControllingWorker.add(clientIdentifier, serviceWorkerIdentifier); >- ASSERT_UNUSED(result, result.isNewEntry); >-} >- >-void SWServer::serviceWorkerStoppedControllingClient(Connection& connection, ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >-{ >- UNUSED_PARAM(serviceWorkerIdentifier); >- auto* registration = m_registrationsByID.get(registrationIdentifier); >- if (!registration) >- return; >- >- ServiceWorkerClientIdentifier clientIdentifier { connection.identifier(), contextIdentifier }; >- registration->removeClientUsingRegistration(clientIdentifier); >- >- auto result = m_clientToControllingWorker.take(clientIdentifier); >- ASSERT_UNUSED(result, result == serviceWorkerIdentifier); >-} >- > void SWServer::updateWorker(Connection&, const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerRegistration& registration, const URL& url, const String& script, WorkerType type) > { > auto serviceWorkerIdentifier = generateServiceWorkerIdentifier(); >@@ -616,39 +579,59 @@ const SWServerRegistration* SWServer::doRegistrationMatching(const SecurityOrigi > return (selectedRegistration && !selectedRegistration->isUninstalling()) ? selectedRegistration : nullptr; > } > >-void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientIdentifier identifier, ServiceWorkerClientData&& data) >+void SWServer::setClientActiveWorker(ServiceWorkerClientIdentifier clientIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier) >+{ >+ m_clientToControllingWorker.set(clientIdentifier, serviceWorkerIdentifier); >+} >+ >+SWServerRegistration* SWServer::registrationFromServiceWorkerIdentifier(ServiceWorkerIdentifier identifier) >+{ >+ auto iterator = m_runningOrTerminatingWorkers.find(identifier); >+ if (iterator == m_runningOrTerminatingWorkers.end()) >+ return nullptr; >+ >+ return m_registrations.get(iterator->value->registrationKey()); >+} >+ >+void SWServer::registerServiceWorkerClient(ClientOrigin&& clientOrigin, ServiceWorkerClientIdentifier clientIdentifier, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier) > { >- auto& clientsData = m_clients.ensure(WTFMove(clientOrigin), [] { >+ m_clients.ensure(WTFMove(clientOrigin), [] { > return Clients { }; >- }).iterator->value; >+ }).iterator->value.clients.append(ServiceWorkerClientInformation { clientIdentifier, WTFMove(data) }); > >- clientsData.clients.append(ServiceWorkerClientInformation { identifier, WTFMove(data) }); >- if (clientsData.terminateServiceWorkersTimer) >- clientsData.terminateServiceWorkersTimer = nullptr; >+ if (!controllingServiceWorkerIdentifier) >+ return; >+ >+ auto serviceWorkerIdentifier = controllingServiceWorkerIdentifier.value(); >+ if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(serviceWorkerIdentifier)) >+ controllingRegistration->addClientUsingRegistration(clientIdentifier); >+ >+ auto result = m_clientToControllingWorker.add(clientIdentifier, serviceWorkerIdentifier); >+ ASSERT_UNUSED(result, result.isNewEntry); > } > >-void SWServer::unregisterServiceWorkerClient(const ClientOrigin& clientOrigin, ServiceWorkerClientIdentifier identifier) >+void SWServer::unregisterServiceWorkerClient(const ClientOrigin& clientOrigin, ServiceWorkerClientIdentifier clientIdentifier) > { >- auto iterator = m_clients.find(clientOrigin); >- ASSERT(iterator != m_clients.end()); >+ auto clientIterator = m_clients.find(clientOrigin); >+ ASSERT(clientIterator != m_clients.end()); > >- auto& clients = iterator->value.clients; >- clients.removeFirstMatching([&] (const auto& item) { >- return identifier == item.identifier; >+ auto& clients = clientIterator->value.clients; >+ clients.removeFirstMatching([&] (const auto& client) { >+ return clientIdentifier == client.identifier; > }); >+ if (clients.isEmpty()) { >+ // FIXME: We might want to terminate any clientOrigin related service worker. >+ m_clients.remove(clientIterator); >+ } > >- if (!clients.isEmpty() || m_runningOrTerminatingWorkers.isEmpty()) >+ auto workerIterator = m_clientToControllingWorker.find(clientIdentifier); >+ if (workerIterator == m_clientToControllingWorker.end()) > return; > >- ASSERT(!iterator->value.terminateServiceWorkersTimer); >- iterator->value.terminateServiceWorkersTimer = std::make_unique<Timer>([clientOrigin, this] { >- for (auto& worker : m_runningOrTerminatingWorkers.values()) { >- if (worker->origin() == clientOrigin) >- terminateWorker(worker); >- } >- m_clients.remove(clientOrigin); >- }); >- iterator->value.terminateServiceWorkersTimer->startOneShot(terminationDelay); >+ if (auto* controllingRegistration = registrationFromServiceWorkerIdentifier(workerIterator->value)) >+ controllingRegistration->removeClientUsingRegistration(clientIdentifier); >+ >+ m_clientToControllingWorker.remove(workerIterator); > } > > } // namespace WebCore >diff --git a/Source/WebCore/workers/service/server/SWServer.h b/Source/WebCore/workers/service/server/SWServer.h >index 15640434126075b77d8e5f99f63d9a261e6eafbc..2c3bfcb66565f033230f3141835acd6b67dd2460 100644 >--- a/Source/WebCore/workers/service/server/SWServer.h >+++ b/Source/WebCore/workers/service/server/SWServer.h >@@ -90,8 +90,6 @@ public: > WEBCORE_EXPORT void finishFetchingScriptInServer(const ServiceWorkerFetchResult&); > WEBCORE_EXPORT void addServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier); > WEBCORE_EXPORT void removeServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier); >- WEBCORE_EXPORT void serviceWorkerStartedControllingClient(ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier); >- WEBCORE_EXPORT void serviceWorkerStoppedControllingClient(ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier); > WEBCORE_EXPORT void syncTerminateWorker(ServiceWorkerIdentifier); > > private: >@@ -147,11 +145,13 @@ public: > > WEBCORE_EXPORT static HashSet<SWServer*>& allServers(); > >- WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientIdentifier, ServiceWorkerClientData&&); >+ WEBCORE_EXPORT void registerServiceWorkerClient(ClientOrigin&&, ServiceWorkerClientIdentifier, ServiceWorkerClientData&&, const std::optional<ServiceWorkerIdentifier>&); > WEBCORE_EXPORT void unregisterServiceWorkerClient(const ClientOrigin&, ServiceWorkerClientIdentifier); > > WEBCORE_EXPORT bool invokeRunServiceWorker(ServiceWorkerIdentifier); > >+ void setClientActiveWorker(ServiceWorkerClientIdentifier, ServiceWorkerIdentifier); >+ > private: > void registerConnection(Connection&); > void unregisterConnection(Connection&); >@@ -165,13 +165,13 @@ private: > > void addClientServiceWorkerRegistration(Connection&, ServiceWorkerRegistrationIdentifier); > void removeClientServiceWorkerRegistration(Connection&, ServiceWorkerRegistrationIdentifier); >- void serviceWorkerStartedControllingClient(Connection&, ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier); >- void serviceWorkerStoppedControllingClient(Connection&, ServiceWorkerIdentifier, ServiceWorkerRegistrationIdentifier, DocumentIdentifier); > > WEBCORE_EXPORT const SWServerRegistration* doRegistrationMatching(const SecurityOriginData& topOrigin, const URL& clientURL) const; > > void installContextData(const ServiceWorkerContextData&); > >+ SWServerRegistration* registrationFromServiceWorkerIdentifier(ServiceWorkerIdentifier); >+ > enum TerminationMode { > Synchronous, > Asynchronous, >diff --git a/Source/WebCore/workers/service/server/SWServerRegistration.cpp b/Source/WebCore/workers/service/server/SWServerRegistration.cpp >index 4b2a3112ef611905625da88354d5b153db400578..8ea6fceffc7a67455dab52019e052469919ec3ec 100644 >--- a/Source/WebCore/workers/service/server/SWServerRegistration.cpp >+++ b/Source/WebCore/workers/service/server/SWServerRegistration.cpp >@@ -259,10 +259,14 @@ void SWServerRegistration::activate() > updateRegistrationState(ServiceWorkerRegistrationState::Waiting, nullptr); > // Run the Update Worker State algorithm passing registration's active worker and activating as the arguments. > updateWorkerState(*activeWorker(), ServiceWorkerState::Activating); >- // FIXME: For each service worker client client whose creation URL matches registration's scope url... >+ // FIXME: For each service worker client whose creation URL matches registration's scope url... > >- // For each service worker client client who is using registration: >+ // 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(); > >diff --git a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp >index b04a939bcc35fdef4a8a9459933e9c7b50ee2235..f220fa4b5d8af1d2c44eb14fa65abfa133d22729 100644 >--- a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp >+++ b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp >@@ -204,11 +204,11 @@ void WebSWServerConnection::getRegistrations(uint64_t registrationMatchRequestId > send(Messages::WebSWClientConnection::DidGetRegistrations { registrationMatchRequestIdentifier, registrations }); > } > >-void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, DocumentIdentifier contextIdentifier, ServiceWorkerClientData&& data) >+void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, DocumentIdentifier contextIdentifier, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier) > { > auto clientOrigin = ClientOrigin { WTFMove(topOrigin), SecurityOriginData::fromSecurityOrigin(SecurityOrigin::create(data.url)) }; > m_clientOrigins.add(contextIdentifier, clientOrigin); >- server().registerServiceWorkerClient(WTFMove(clientOrigin), ServiceWorkerClientIdentifier { this->identifier(), contextIdentifier } , WTFMove(data)); >+ server().registerServiceWorkerClient(WTFMove(clientOrigin), ServiceWorkerClientIdentifier { this->identifier(), contextIdentifier } , WTFMove(data), controllingServiceWorkerIdentifier); > } > > void WebSWServerConnection::unregisterServiceWorkerClient(DocumentIdentifier contextIdentifier) >diff --git a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h >index 90b4e66fc42a28be30bbe1cb8d950f38d0687511..fd00d1a4e99e58f73c98b70d6cdf04155bd2ee79 100644 >--- a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h >+++ b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h >@@ -86,7 +86,7 @@ private: > 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::DocumentIdentifier, WebCore::ServiceWorkerClientData&&); >+ void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::DocumentIdentifier, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerIdentifier>&); > void unregisterServiceWorkerClient(WebCore::DocumentIdentifier); > > IPC::Connection* messageSenderConnection() final { return m_contentConnection.ptr(); } >diff --git a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in >index 102f00b5850275f76d07a8c141a8299876feea73..6c734c8e4ec58d3b134c2b6d4c3d9a4fc5f9c2d9 100644 >--- a/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in >+++ b/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.messages.in >@@ -28,8 +28,6 @@ messages -> WebSWServerConnection { > FinishFetchingScriptInServer(struct WebCore::ServiceWorkerFetchResult result) > AddServiceWorkerRegistrationInServer(WebCore::ServiceWorkerRegistrationIdentifier identifier) > RemoveServiceWorkerRegistrationInServer(WebCore::ServiceWorkerRegistrationIdentifier identifier) >- ServiceWorkerStartedControllingClient(WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::ServiceWorkerRegistrationIdentifier registrationIdentifier, WebCore::DocumentIdentifier contextIdentifier) >- ServiceWorkerStoppedControllingClient(WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::ServiceWorkerRegistrationIdentifier registrationIdentifier, WebCore::DocumentIdentifier contextIdentifier) > > StartFetch(uint64_t identifier, std::optional<WebCore::ServiceWorkerIdentifier> serviceWorkerIdentifier, WebCore::ResourceRequest request, struct WebCore::FetchOptions options, IPC::FormDataReference requestBody) > PostMessageToServiceWorkerFromClient(WebCore::ServiceWorkerIdentifier destinationServiceWorkerIdentifier, IPC::DataReference message, struct WebCore::ServiceWorkerClientIdentifier sourceIdentifier, struct WebCore::ServiceWorkerClientData sourceData) >@@ -39,7 +37,7 @@ messages -> WebSWServerConnection { > > MatchRegistration(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, WebCore::DocumentIdentifier identifier, struct WebCore::ServiceWorkerClientData data) >+ RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, WebCore::DocumentIdentifier identifier, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerIdentifier> controllingServiceWorkerIdentifier) > UnregisterServiceWorkerClient(WebCore::DocumentIdentifier identifier) > > SyncTerminateWorker(WebCore::ServiceWorkerIdentifier workerIdentifier) -> () >diff --git a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >index 12cdd0ab7e240c8bbd33b8231615c5ad820129d2..9fe6d566d3fa94b3cdd51c8069508ae15e7048a0 100644 >--- a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >+++ b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp >@@ -92,19 +92,9 @@ void WebSWClientConnection::postMessageToServiceWorker(ServiceWorkerIdentifier d > send(Messages::WebSWServerConnection::PostMessageToServiceWorkerFromServiceWorker(destinationIdentifier, IPC::DataReference { scriptValue->data() }, sourceWorkerIdentifier)); > } > >-void WebSWClientConnection::serviceWorkerStartedControllingClient(ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >+void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, WebCore::DocumentIdentifier contextIdentifier, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier) > { >- send(Messages::WebSWServerConnection::ServiceWorkerStartedControllingClient(serviceWorkerIdentifier, registrationIdentifier, contextIdentifier)); >-} >- >-void WebSWClientConnection::serviceWorkerStoppedControllingClient(ServiceWorkerIdentifier serviceWorkerIdentifier, ServiceWorkerRegistrationIdentifier registrationIdentifier, DocumentIdentifier contextIdentifier) >-{ >- send(Messages::WebSWServerConnection::ServiceWorkerStoppedControllingClient(serviceWorkerIdentifier, registrationIdentifier, contextIdentifier)); >-} >- >-void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, WebCore::DocumentIdentifier contextIdentifier, const WebCore::ServiceWorkerClientData& data) >-{ >- send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), contextIdentifier, data }); >+ send(Messages::WebSWServerConnection::RegisterServiceWorkerClient { SecurityOriginData::fromSecurityOrigin(topOrigin), contextIdentifier, data, controllingServiceWorkerIdentifier }); > } > > void WebSWClientConnection::unregisterServiceWorkerClient(WebCore::DocumentIdentifier contextIdentifier) >diff --git a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h >index e56f4ea545ce4eb296ef41ed64327be327863f7f..5b6e209dc4bea3e81634fab8b175ac432b0a8b85 100644 >--- a/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h >+++ b/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h >@@ -75,9 +75,7 @@ private: > void finishFetchingScriptInServer(const WebCore::ServiceWorkerFetchResult&) final; > void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destinationIdentifier, Ref<WebCore::SerializedScriptValue>&&, WebCore::ServiceWorkerClientIdentifier sourceIdentifier, WebCore::ServiceWorkerClientData&& source) final; > void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destinationIdentifier, Ref<WebCore::SerializedScriptValue>&&, WebCore::ServiceWorkerIdentifier sourceWorkerIdentifier) final; >- void serviceWorkerStartedControllingClient(WebCore::ServiceWorkerIdentifier, WebCore::ServiceWorkerRegistrationIdentifier, WebCore::DocumentIdentifier) final; >- void serviceWorkerStoppedControllingClient(WebCore::ServiceWorkerIdentifier, WebCore::ServiceWorkerRegistrationIdentifier, WebCore::DocumentIdentifier) final; >- void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, WebCore::DocumentIdentifier, const WebCore::ServiceWorkerClientData&) final; >+ void registerServiceWorkerClient(const WebCore::SecurityOrigin& topOrigin, WebCore::DocumentIdentifier, 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;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 180382
:
328400
|
328408
|
328433
|
328463