Title: [286301] trunk/Source
Revision
286301
Author
[email protected]
Date
2021-11-30 08:44:18 -0800 (Tue, 30 Nov 2021)

Log Message

Migrate some WebSWClientConnection messages to async replies
https://bugs.webkit.org/show_bug.cgi?id=233627

Reviewed by Chris Dumez.

Source/WebCore:

Migrate whenRegistrationReady to use a callback.
Use completion handler for whenRegistrationReady as AsyncReply uses CompletionHandler
and use optional to mark that the registration will never be resolved.
Covered by existing tests.

* workers/service/server/SWServer.cpp:
(WebCore::SWServer::Connection::whenRegistrationReady):
(WebCore::SWServer::Connection::resolveRegistrationReadyRequests):
* workers/service/server/SWServer.h:

Source/WebKit:

Migrate didMatchRegistration, didGetRegistrations and registrationReady to async replies.
This is easier to understand and is more robust to connection closure.

* NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
(WebKit::WebSWServerConnection::matchRegistration):
(WebKit::WebSWServerConnection::getRegistrations):
* NetworkProcess/ServiceWorker/WebSWServerConnection.h:
* NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
* WebProcess/Storage/WebSWClientConnection.cpp:
(WebKit::WebSWClientConnection::matchRegistration):
(WebKit::WebSWClientConnection::whenRegistrationReady):
(WebKit::WebSWClientConnection::getRegistrations):
(WebKit::WebSWClientConnection::clear):
(WebKit::WebSWClientConnection::didMatchRegistration): Deleted.
(WebKit::WebSWClientConnection::didGetRegistrations): Deleted.
(WebKit::WebSWClientConnection::registrationReady): Deleted.
* WebProcess/Storage/WebSWClientConnection.h:
* WebProcess/Storage/WebSWClientConnection.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286300 => 286301)


--- trunk/Source/WebCore/ChangeLog	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebCore/ChangeLog	2021-11-30 16:44:18 UTC (rev 286301)
@@ -1,5 +1,22 @@
 2021-11-30  Youenn Fablet  <[email protected]>
 
+        Migrate some WebSWClientConnection messages to async replies
+        https://bugs.webkit.org/show_bug.cgi?id=233627
+
+        Reviewed by Chris Dumez.
+
+        Migrate whenRegistrationReady to use a callback.
+        Use completion handler for whenRegistrationReady as AsyncReply uses CompletionHandler
+        and use optional to mark that the registration will never be resolved.
+        Covered by existing tests.
+
+        * workers/service/server/SWServer.cpp:
+        (WebCore::SWServer::Connection::whenRegistrationReady):
+        (WebCore::SWServer::Connection::resolveRegistrationReadyRequests):
+        * workers/service/server/SWServer.h:
+
+2021-11-30  Youenn Fablet  <[email protected]>
+
         Move TransformStreamAPIEnabled flag to Settings
         https://bugs.webkit.org/show_bug.cgi?id=233524
 

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


--- trunk/Source/WebCore/workers/service/server/SWServer.cpp	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebCore/workers/service/server/SWServer.cpp	2021-11-30 16:44:18 UTC (rev 286301)
@@ -57,6 +57,12 @@
 {
 }
 
+SWServer::Connection::~Connection()
+{
+    for (auto& request : std::exchange(m_registrationReadyRequests, { }))
+        request.callback({ });
+}
+
 HashSet<SWServer*>& SWServer::allServers()
 {
     static NeverDestroyed<HashSet<SWServer*>> servers;
@@ -1058,15 +1064,15 @@
         connection->resolveRegistrationReadyRequests(registration);
 }
 
-void SWServer::Connection::whenRegistrationReady(uint64_t registrationReadyRequestIdentifier, const SecurityOriginData& topOrigin, const URL& clientURL)
+void SWServer::Connection::whenRegistrationReady(const SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(std::optional<ServiceWorkerRegistrationData>&&)>&& callback)
 {
     if (auto* registration = doRegistrationMatching(topOrigin, clientURL)) {
         if (registration->activeWorker()) {
-            registrationReady(registrationReadyRequestIdentifier, registration->data());
+            callback(registration->data());
             return;
         }
     }
-    m_registrationReadyRequests.append({ topOrigin, clientURL, registrationReadyRequestIdentifier });
+    m_registrationReadyRequests.append({ topOrigin, clientURL, WTFMove(callback) });
 }
 
 void SWServer::Connection::storeRegistrationsOnDisk(CompletionHandler<void()>&& callback)
@@ -1084,7 +1090,7 @@
         if (!registration.key().isMatching(request.topOrigin, request.clientURL))
             return false;
 
-        this->registrationReady(request.identifier, registration.data());
+        request.callback(registration.data());
         return true;
     });
 }

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


--- trunk/Source/WebCore/workers/service/server/SWServer.h	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebCore/workers/service/server/SWServer.h	2021-11-30 16:44:18 UTC (rev 286301)
@@ -74,7 +74,7 @@
         WTF_MAKE_FAST_ALLOCATED;
         friend class SWServer;
     public:
-        virtual ~Connection() = default;
+        WEBCORE_EXPORT virtual ~Connection();
 
         using Identifier = SWServerConnectionIdentifier;
         Identifier identifier() const { return m_identifier; }
@@ -90,7 +90,6 @@
         virtual void setRegistrationLastUpdateTime(ServiceWorkerRegistrationIdentifier, WallTime) = 0;
         virtual void setRegistrationUpdateViaCache(ServiceWorkerRegistrationIdentifier, ServiceWorkerUpdateViaCache) = 0;
         virtual void notifyClientsOfControllerChange(const HashSet<ScriptExecutionContextIdentifier>& contextIdentifiers, const ServiceWorkerData& newController) = 0;
-        virtual void registrationReady(uint64_t registrationReadyRequestIdentifier, ServiceWorkerRegistrationData&&) = 0;
         virtual void postMessageToServiceWorkerClient(ScriptExecutionContextIdentifier, const MessageWithMessagePorts&, ServiceWorkerIdentifier, const String& sourceOrigin) = 0;
 
         virtual void contextConnectionCreated(SWServerToContextConnection&) = 0;
@@ -104,7 +103,7 @@
         WEBCORE_EXPORT void finishFetchingScriptInServer(const ServiceWorkerFetchResult&);
         WEBCORE_EXPORT void addServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier);
         WEBCORE_EXPORT void removeServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier);
-        WEBCORE_EXPORT void whenRegistrationReady(uint64_t registrationReadyRequestIdentifier, const SecurityOriginData& topOrigin, const URL& clientURL);
+        WEBCORE_EXPORT void whenRegistrationReady(const SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(std::optional<ServiceWorkerRegistrationData>&&)>&&);
 
         WEBCORE_EXPORT void storeRegistrationsOnDisk(CompletionHandler<void()>&&);
 
@@ -118,7 +117,7 @@
         struct RegistrationReadyRequest {
             SecurityOriginData topOrigin;
             URL clientURL;
-            uint64_t identifier;
+            CompletionHandler<void(std::optional<ServiceWorkerRegistrationData>&&)> callback;
         };
 
         SWServer& m_server;

Modified: trunk/Source/WebKit/ChangeLog (286300 => 286301)


--- trunk/Source/WebKit/ChangeLog	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/ChangeLog	2021-11-30 16:44:18 UTC (rev 286301)
@@ -1,5 +1,31 @@
 2021-11-30  Youenn Fablet  <[email protected]>
 
+        Migrate some WebSWClientConnection messages to async replies
+        https://bugs.webkit.org/show_bug.cgi?id=233627
+
+        Reviewed by Chris Dumez.
+
+        Migrate didMatchRegistration, didGetRegistrations and registrationReady to async replies.
+        This is easier to understand and is more robust to connection closure.
+
+        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
+        (WebKit::WebSWServerConnection::matchRegistration):
+        (WebKit::WebSWServerConnection::getRegistrations):
+        * NetworkProcess/ServiceWorker/WebSWServerConnection.h:
+        * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in:
+        * WebProcess/Storage/WebSWClientConnection.cpp:
+        (WebKit::WebSWClientConnection::matchRegistration):
+        (WebKit::WebSWClientConnection::whenRegistrationReady):
+        (WebKit::WebSWClientConnection::getRegistrations):
+        (WebKit::WebSWClientConnection::clear):
+        (WebKit::WebSWClientConnection::didMatchRegistration): Deleted.
+        (WebKit::WebSWClientConnection::didGetRegistrations): Deleted.
+        (WebKit::WebSWClientConnection::registrationReady): Deleted.
+        * WebProcess/Storage/WebSWClientConnection.h:
+        * WebProcess/Storage/WebSWClientConnection.messages.in:
+
+2021-11-30  Youenn Fablet  <[email protected]>
+
         ServiceWorkerContainer does not respond well to network process crash
         https://bugs.webkit.org/show_bug.cgi?id=233626
 

Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp (286300 => 286301)


--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp	2021-11-30 16:44:18 UTC (rev 286301)
@@ -337,26 +337,20 @@
     send(Messages::WebSWClientConnection::PostMessageToServiceWorkerClient { destinationContextIdentifier, message, sourceServiceWorker->data(), sourceOrigin });
 }
 
-void WebSWServerConnection::matchRegistration(uint64_t registrationMatchRequestIdentifier, const SecurityOriginData& topOrigin, const URL& clientURL)
+void WebSWServerConnection::matchRegistration(const SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(std::optional<ServiceWorkerRegistrationData>&&)>&& callback)
 {
     if (auto* registration = doRegistrationMatching(topOrigin, clientURL)) {
-        send(Messages::WebSWClientConnection::DidMatchRegistration { registrationMatchRequestIdentifier, registration->data() });
+        callback(registration->data());
         return;
     }
-    send(Messages::WebSWClientConnection::DidMatchRegistration { registrationMatchRequestIdentifier, std::nullopt });
+    callback({ });
 }
 
-void WebSWServerConnection::registrationReady(uint64_t registrationReadyRequestIdentifier, ServiceWorkerRegistrationData&& registrationData)
+void WebSWServerConnection::getRegistrations(const SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(const Vector<ServiceWorkerRegistrationData>&)>&& callback)
 {
-    send(Messages::WebSWClientConnection::RegistrationReady { registrationReadyRequestIdentifier, WTFMove(registrationData) });
+    callback(server().getRegistrations(topOrigin, clientURL));
 }
 
-void WebSWServerConnection::getRegistrations(uint64_t registrationMatchRequestIdentifier, const SecurityOriginData& topOrigin, const URL& clientURL)
-{
-    auto registrations = server().getRegistrations(topOrigin, clientURL);
-    send(Messages::WebSWClientConnection::DidGetRegistrations { registrationMatchRequestIdentifier, registrations });
-}
-
 void WebSWServerConnection::registerServiceWorkerClient(SecurityOriginData&& topOrigin, ServiceWorkerClientData&& data, const std::optional<ServiceWorkerRegistrationIdentifier>& controllingServiceWorkerRegistrationIdentifier, String&& userAgent)
 {
     auto contextOrigin = SecurityOriginData::fromURL(data.url);

Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h (286300 => 286301)


--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h	2021-11-30 16:44:18 UTC (rev 286301)
@@ -94,7 +94,6 @@
     void setRegistrationLastUpdateTime(WebCore::ServiceWorkerRegistrationIdentifier, WallTime) final;
     void setRegistrationUpdateViaCache(WebCore::ServiceWorkerRegistrationIdentifier, WebCore::ServiceWorkerUpdateViaCache) final;
     void notifyClientsOfControllerChange(const HashSet<WebCore::ScriptExecutionContextIdentifier>& contextIdentifiers, const WebCore::ServiceWorkerData& newController);
-    void registrationReady(uint64_t registrationReadyRequestIdentifier, WebCore::ServiceWorkerRegistrationData&&) final;
 
     void scheduleJobInServer(WebCore::ServiceWorkerJobData&&);
 
@@ -103,8 +102,8 @@
 
     void startFetch(ServiceWorkerFetchTask&, WebCore::SWServerWorker&);
 
-    void matchRegistration(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const URL& clientURL);
-    void getRegistrations(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const URL& clientURL);
+    void matchRegistration(const WebCore::SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(std::optional<WebCore::ServiceWorkerRegistrationData>&&)>&&);
+    void getRegistrations(const WebCore::SecurityOriginData& topOrigin, const URL& clientURL, CompletionHandler<void(const Vector<WebCore::ServiceWorkerRegistrationData>&)>&&);
 
     void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const std::optional<WebCore::ServiceWorkerRegistrationIdentifier>&, String&& userAgent);
     void unregisterServiceWorkerClient(const WebCore::ScriptExecutionContextIdentifier&);

Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in (286300 => 286301)


--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in	2021-11-30 16:44:18 UTC (rev 286301)
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 Apple Inc. All rights reserved.
+# Copyright (C) 2017-2021 Apple Inc. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -35,9 +35,9 @@
 
     DidResolveRegistrationPromise(WebCore::ServiceWorkerRegistrationKey key)
 
-    MatchRegistration(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, URL clientURL)
-    WhenRegistrationReady(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, URL clientURL)
-    GetRegistrations(uint64_t serviceRegistrationMatchRequestIdentifier, struct WebCore::SecurityOriginData topOrigin, URL clientURL)
+    MatchRegistration(struct WebCore::SecurityOriginData topOrigin, URL clientURL) -> (std::optional<WebCore::ServiceWorkerRegistrationData> registration) Async
+    WhenRegistrationReady(struct WebCore::SecurityOriginData topOrigin, URL clientURL) -> (std::optional<WebCore::ServiceWorkerRegistrationData> registration) Async
+    GetRegistrations(struct WebCore::SecurityOriginData topOrigin, URL clientURL) -> (Vector<WebCore::ServiceWorkerRegistrationData> registrations) Async
     RegisterServiceWorkerClient(struct WebCore::SecurityOriginData topOrigin, struct WebCore::ServiceWorkerClientData data, std::optional<WebCore::ServiceWorkerRegistrationIdentifier> controllingServiceWorkerRegistrationIdentifier, String userAgent)
     UnregisterServiceWorkerClient(WebCore::ScriptExecutionContextIdentifier identifier)
 

Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (286300 => 286301)


--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2021-11-30 16:44:18 UTC (rev 286301)
@@ -145,22 +145,6 @@
         m_tasksPendingOriginImport.takeFirst()();
 }
 
-void WebSWClientConnection::didMatchRegistration(uint64_t matchingRequest, std::optional<ServiceWorkerRegistrationData>&& result)
-{
-    ASSERT(isMainRunLoop());
-
-    if (auto completionHandler = m_ongoingMatchRegistrationTasks.take(matchingRequest))
-        completionHandler(WTFMove(result));
-}
-
-void WebSWClientConnection::didGetRegistrations(uint64_t matchingRequest, Vector<ServiceWorkerRegistrationData>&& registrations)
-{
-    ASSERT(isMainRunLoop());
-
-    if (auto completionHandler = m_ongoingGetRegistrationsTasks.take(matchingRequest))
-        completionHandler(WTFMove(registrations));
-}
-
 void WebSWClientConnection::matchRegistration(SecurityOriginData&& topOrigin, const URL& clientURL, RegistrationCallback&& callback)
 {
     ASSERT(isMainRunLoop());
@@ -171,9 +155,7 @@
     }
 
     runOrDelayTaskForImport([this, callback = WTFMove(callback), topOrigin = WTFMove(topOrigin), clientURL]() mutable {
-        uint64_t callbackID = ++m_previousCallbackIdentifier;
-        m_ongoingMatchRegistrationTasks.add(callbackID, WTFMove(callback));
-        send(Messages::WebSWServerConnection::MatchRegistration(callbackID, topOrigin, clientURL));
+        sendWithAsyncReply(Messages::WebSWServerConnection::MatchRegistration { topOrigin, clientURL }, WTFMove(callback));
     });
 }
 
@@ -188,18 +170,12 @@
 
 void WebSWClientConnection::whenRegistrationReady(const SecurityOriginData& topOrigin, const URL& clientURL, WhenRegistrationReadyCallback&& callback)
 {
-    uint64_t callbackID = ++m_previousCallbackIdentifier;
-    m_ongoingRegistrationReadyTasks.add(callbackID, WTFMove(callback));
-    send(Messages::WebSWServerConnection::WhenRegistrationReady(callbackID, topOrigin, clientURL));
+    sendWithAsyncReply(Messages::WebSWServerConnection::WhenRegistrationReady { topOrigin, clientURL }, [callback = WTFMove(callback)](auto result) mutable {
+        if (result)
+            callback(*WTFMove(result));
+    });
 }
 
-void WebSWClientConnection::registrationReady(uint64_t callbackID, ServiceWorkerRegistrationData&& registrationData)
-{
-    ASSERT(registrationData.activeWorker);
-    if (auto callback = m_ongoingRegistrationReadyTasks.take(callbackID))
-        callback(WTFMove(registrationData));
-}
-
 void WebSWClientConnection::setDocumentIsControlled(ScriptExecutionContextIdentifier documentIdentifier, ServiceWorkerRegistrationData&& data, CompletionHandler<void(bool)>&& completionHandler)
 {
     auto* documentLoader = DocumentLoader::fromTemporaryDocumentIdentifier(documentIdentifier);
@@ -217,9 +193,7 @@
     }
 
     runOrDelayTaskForImport([this, callback = WTFMove(callback), topOrigin = WTFMove(topOrigin), clientURL]() mutable {
-        uint64_t callbackID = ++m_previousCallbackIdentifier;
-        m_ongoingGetRegistrationsTasks.add(callbackID, WTFMove(callback));
-        send(Messages::WebSWServerConnection::GetRegistrations { callbackID, topOrigin, clientURL });
+        sendWithAsyncReply(Messages::WebSWServerConnection::GetRegistrations { topOrigin, clientURL }, WTFMove(callback));
     });
 }
 
@@ -231,16 +205,6 @@
 
 void WebSWClientConnection::clear()
 {
-    auto registrationTasks = WTFMove(m_ongoingMatchRegistrationTasks);
-    for (auto& callback : registrationTasks.values())
-        callback(std::nullopt);
-
-    auto getRegistrationTasks = WTFMove(m_ongoingGetRegistrationsTasks);
-    for (auto& callback : getRegistrationTasks.values())
-        callback({ });
-
-    m_ongoingRegistrationReadyTasks.clear();
-
     clearPendingJobs();
 }
 

Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h (286300 => 286301)


--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h	2021-11-30 16:44:18 UTC (rev 286301)
@@ -81,7 +81,6 @@
     void didMatchRegistration(uint64_t matchRequestIdentifier, std::optional<WebCore::ServiceWorkerRegistrationData>&&);
     void didGetRegistrations(uint64_t matchRequestIdentifier, Vector<WebCore::ServiceWorkerRegistrationData>&&);
     void whenRegistrationReady(const WebCore::SecurityOriginData& topOrigin, const URL& clientURL, WhenRegistrationReadyCallback&&) final;
-    void registrationReady(uint64_t callbackID, WebCore::ServiceWorkerRegistrationData&&);
 
     void setDocumentIsControlled(WebCore::ScriptExecutionContextIdentifier, WebCore::ServiceWorkerRegistrationData&&, CompletionHandler<void(bool)>&&);
 
@@ -112,10 +111,6 @@
 
     UniqueRef<WebSWOriginTable> m_swOriginTable;
 
-    uint64_t m_previousCallbackIdentifier { 0 };
-    HashMap<uint64_t, RegistrationCallback> m_ongoingMatchRegistrationTasks;
-    HashMap<uint64_t, GetRegistrationsCallback> m_ongoingGetRegistrationsTasks;
-    HashMap<uint64_t, WhenRegistrationReadyCallback> m_ongoingRegistrationReadyTasks;
     Deque<Function<void()>> m_tasksPendingOriginImport;
     bool m_isThrottleable { true };
 }; // class WebSWServerConnection

Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in (286300 => 286301)


--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in	2021-11-30 16:32:15 UTC (rev 286300)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in	2021-11-30 16:44:18 UTC (rev 286301)
@@ -38,10 +38,6 @@
     SetSWOriginTableSharedMemory(WebKit::SharedMemory::IPCHandle handle)
     PostMessageToServiceWorkerClient(WebCore::ScriptExecutionContextIdentifier destinationContextIdentifier, struct WebCore::MessageWithMessagePorts message, struct WebCore::ServiceWorkerData source, String sourceOrigin)
 
-    DidMatchRegistration(uint64_t matchRequestIdentifier, std::optional<WebCore::ServiceWorkerRegistrationData> data)
-    DidGetRegistrations(uint64_t matchRequestIdentifier, Vector<WebCore::ServiceWorkerRegistrationData> registrations)
-    RegistrationReady(uint64_t registrationReadyRequestIdentifier, struct WebCore::ServiceWorkerRegistrationData data)
-
     SetDocumentIsControlled(WebCore::ScriptExecutionContextIdentifier temporaryDocumentIdentifier, struct WebCore::ServiceWorkerRegistrationData data) -> (bool isSuccess) Async
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to