Changeset 259383 in webkit
- Timestamp:
- Apr 2, 2020, 4:00:53 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 30 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/tests/workers/service/resources/postmessage-after-sw-process-crash.js (modified) (2 diffs)
-
LayoutTests/http/tests/workers/service/resources/postmessage-after-terminate.js (modified) (1 diff)
-
LayoutTests/http/tests/workers/service/resources/postmessage-after-terminating-hung-worker.js (modified) (2 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/testing/Internals.cpp (modified) (1 diff)
-
Source/WebCore/testing/Internals.h (modified) (1 diff)
-
Source/WebCore/testing/Internals.idl (modified) (1 diff)
-
Source/WebCore/workers/service/SWClientConnection.h (modified) (1 diff)
-
Source/WebCore/workers/service/ServiceWorkerProvider.h (modified) (1 diff)
-
Source/WebCore/workers/service/WorkerSWClientConnection.cpp (modified) (1 diff)
-
Source/WebCore/workers/service/WorkerSWClientConnection.h (modified) (1 diff)
-
Source/WebCore/workers/service/server/SWServer.cpp (modified) (6 diffs)
-
Source/WebCore/workers/service/server/SWServer.h (modified) (4 diffs)
-
Source/WebCore/workers/service/server/SWServerToContextConnection.h (modified) (2 diffs)
-
Source/WebCore/workers/service/server/SWServerWorker.cpp (modified) (6 diffs)
-
Source/WebCore/workers/service/server/SWServerWorker.h (modified) (4 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWClientConnection.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h (modified) (2 diffs)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r259377 r259383 1 2020-04-02 youenn fablet <youenn@apple.com> 2 3 Remove synchronous termination of service workers 4 https://bugs.webkit.org/show_bug.cgi?id=209666 5 6 Reviewed by Chris Dumez. 7 8 * http/tests/workers/service/resources/postmessage-after-sw-process-crash.js: 9 (async event): 10 * http/tests/workers/service/resources/postmessage-after-terminate.js: 11 (async event): 12 * http/tests/workers/service/resources/postmessage-after-terminating-hung-worker.js: 13 (async event): 14 1 15 2020-04-01 Ryan Haddad <ryanhaddad@apple.com> 2 16 -
trunk/LayoutTests/http/tests/workers/service/resources/postmessage-after-sw-process-crash.js
r253103 r259383 3 3 let remainingAttempts = 1000; // We try for 10 seconds before timing out. 4 4 5 navigator.serviceWorker.addEventListener("message", function(event) {5 navigator.serviceWorker.addEventListener("message", async function(event) { 6 6 if (!serviceWorkerHasReceivedState) { 7 7 if (!event.data) { … … 13 13 14 14 log("* Simulating Service Worker process crash"); 15 testRunner.terminateServiceWorkers();15 await testRunner.terminateServiceWorkers(); 16 16 17 17 handle = setInterval(function() { -
trunk/LayoutTests/http/tests/workers/service/resources/postmessage-after-terminate.js
r251067 r259383 1 1 var messageNumber = 1; 2 navigator.serviceWorker.addEventListener("message", function(event) {2 navigator.serviceWorker.addEventListener("message", async function(event) { 3 3 log("PASS: Client received message from service worker, origin: " + event.origin); 4 4 log(event.data); 5 5 if (messageNumber == 1) { 6 window.internals.terminateServiceWorker(event.source);6 await window.internals.terminateServiceWorker(event.source); 7 7 event.source.postMessage("Message 2"); 8 8 messageNumber++; -
trunk/LayoutTests/http/tests/workers/service/resources/postmessage-after-terminating-hung-worker.js
r251067 r259383 1 1 let state = "WaitingForHang"; 2 2 3 navigator.serviceWorker.addEventListener("message", function(event) {3 navigator.serviceWorker.addEventListener("message", async function(event) { 4 4 log(event.data); 5 5 if (state === "WaitingForHang") { … … 7 7 log("Service Worker should now be hung"); 8 8 log("Terminating service worker...") 9 internals.terminateServiceWorker(worker);9 await internals.terminateServiceWorker(worker); 10 10 log("Terminated service worker."); 11 11 state = "WaitingForMessageAfterTerminatingHungServiceWorker" -
trunk/Source/WebCore/ChangeLog
r259379 r259383 1 2020-04-02 youenn fablet <youenn@apple.com> 2 3 Remove synchronous termination of service workers 4 https://bugs.webkit.org/show_bug.cgi?id=209666 5 6 Reviewed by Chris Dumez. 7 8 Instead of supporting synchronous IPC to terminate a service worker, SWServerWorker will asynchronously ask for the service worker to terminate. 9 If it is not terminated after some time, SWServerWorker will then ask to terminate the process running the service worker. 10 Time is kept to 10 seconds. 11 12 We can then remove all synchronous related code related to termination. 13 We migrate the terminateServiceWorker internal API to be Promise based. 14 15 Covered by existing tests. 16 17 * testing/Internals.cpp: 18 (WebCore::Internals::terminateServiceWorker): 19 * testing/Internals.h: 20 * testing/Internals.idl: 21 * workers/service/ServiceWorkerProvider.h: 22 * workers/service/SWClientConnection.h: 23 * workers/service/WorkerSWClientConnection.cpp: 24 * workers/service/WorkerSWClientConnection.h: 25 * workers/service/server/SWServer.cpp: 26 (WebCore::SWServer::~SWServer): 27 (WebCore::SWServer::unregisterServiceWorkerClient): 28 * workers/service/server/SWServer.h: 29 * workers/service/server/SWServerToContextConnection.h: 30 * workers/service/server/SWServerWorker.cpp: 31 (WebCore::m_terminationTimer): 32 (WebCore::SWServerWorker::~SWServerWorker): 33 (WebCore::SWServerWorker::terminate): 34 (WebCore::SWServerWorker::startTermination): 35 (WebCore::SWServerWorker::terminateCompleted): 36 (WebCore::SWServerWorker::callTerminationCallbacks): 37 (WebCore::SWServerWorker::terminationTimerFired): 38 (WebCore::SWServerWorker::setState): 39 (WebCore::SWServerWorker::didFailHeartBeatCheck): 40 * workers/service/server/SWServerWorker.h: 41 (WebCore::SWServerWorker::terminate): 42 1 43 2020-04-02 Rob Buis <rbuis@igalia.com> 2 44 -
trunk/Source/WebCore/testing/Internals.cpp
r259374 r259383 5153 5153 } 5154 5154 5155 void Internals::terminateServiceWorker(ServiceWorker& worker) 5156 { 5157 if (!contextDocument()) 5158 return; 5159 5160 ServiceWorkerProvider::singleton().serviceWorkerConnection().syncTerminateWorker(worker.identifier()); 5155 void Internals::terminateServiceWorker(ServiceWorker& worker, DOMPromiseDeferred<void>&& promise) 5156 { 5157 ServiceWorkerProvider::singleton().terminateWorkerForTesting(worker.identifier(), [promise = WTFMove(promise)]() mutable { 5158 promise.resolve(); 5159 }); 5161 5160 } 5162 5161 -
trunk/Source/WebCore/testing/Internals.h
r259374 r259383 785 785 using HasRegistrationPromise = DOMPromiseDeferred<IDLBoolean>; 786 786 void hasServiceWorkerRegistration(const String& clientURL, HasRegistrationPromise&&); 787 void terminateServiceWorker(ServiceWorker& );787 void terminateServiceWorker(ServiceWorker&, DOMPromiseDeferred<void>&&); 788 788 void isServiceWorkerRunning(ServiceWorker&, DOMPromiseDeferred<IDLBoolean>&&); 789 789 #endif -
trunk/Source/WebCore/testing/Internals.idl
r259374 r259383 771 771 772 772 [Conditional=SERVICE_WORKER] Promise<boolean> hasServiceWorkerRegistration(DOMString scopeURL); 773 [Conditional=SERVICE_WORKER] voidterminateServiceWorker(ServiceWorker worker);773 [Conditional=SERVICE_WORKER] Promise<void> terminateServiceWorker(ServiceWorker worker); 774 774 [Conditional=SERVICE_WORKER] Promise<boolean> isServiceWorkerRunning(ServiceWorker worker); 775 775 -
trunk/Source/WebCore/workers/service/SWClientConnection.h
r256749 r259383 80 80 virtual SWServerConnectionIdentifier serverConnectionIdentifier() const = 0; 81 81 virtual bool mayHaveServiceWorkerRegisteredForOrigin(const SecurityOriginData&) const = 0; 82 virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0;83 82 84 83 virtual void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const Optional<ServiceWorkerRegistrationIdentifier>&, const String& userAgent) = 0; -
trunk/Source/WebCore/workers/service/ServiceWorkerProvider.h
r255909 r259383 42 42 43 43 virtual SWClientConnection& serviceWorkerConnection() = 0; 44 virtual void terminateWorkerForTesting(ServiceWorkerIdentifier, CompletionHandler<void()>&&) = 0; 44 45 45 46 void setMayHaveRegisteredServiceWorkers() { m_mayHaveRegisteredServiceWorkers = true; } -
trunk/Source/WebCore/workers/service/WorkerSWClientConnection.cpp
r256805 r259383 156 156 } 157 157 158 void WorkerSWClientConnection::syncTerminateWorker(ServiceWorkerIdentifier identifier)159 {160 callOnMainThread([identifier]() mutable {161 auto& connection = ServiceWorkerProvider::singleton().serviceWorkerConnection();162 connection.syncTerminateWorker(identifier);163 });164 }165 166 158 void WorkerSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData& data, const Optional<ServiceWorkerRegistrationIdentifier>& identifier, const String& userAgent) 167 159 { -
trunk/Source/WebCore/workers/service/WorkerSWClientConnection.h
r256749 r259383 52 52 SWServerConnectionIdentifier serverConnectionIdentifier() const final; 53 53 bool mayHaveServiceWorkerRegisteredForOrigin(const SecurityOriginData&) const final; 54 void syncTerminateWorker(ServiceWorkerIdentifier) final;55 54 void registerServiceWorkerClient(const SecurityOrigin& topOrigin, const ServiceWorkerClientData&, const Optional<ServiceWorkerRegistrationIdentifier>&, const String& userAgent) final; 56 55 void unregisterServiceWorkerClient(DocumentIdentifier) final; -
trunk/Source/WebCore/workers/service/server/SWServer.cpp
r256900 r259383 50 50 namespace WebCore { 51 51 52 static Seconds terminationDelay { 10_s };53 54 52 SWServer::Connection::Connection(SWServer& server, Identifier identifier) 55 53 : m_server(server) … … 80 78 } 81 79 for (auto& runningWorker : runningWorkers) 82 terminateWorker(*runningWorker);80 runningWorker->terminate(); 83 81 84 82 allServers().remove(this); … … 306 304 { 307 305 m_server.removeClientServiceWorkerRegistration(*this, identifier); 308 }309 310 void SWServer::Connection::syncTerminateWorker(ServiceWorkerIdentifier identifier)311 {312 if (auto* worker = m_server.workerByID(identifier))313 m_server.syncTerminateWorker(*worker);314 306 } 315 307 … … 734 726 } 735 727 736 void SWServer::terminateWorker(SWServerWorker& worker)737 {738 terminateWorkerInternal(worker, Asynchronous);739 }740 741 void SWServer::syncTerminateWorker(SWServerWorker& worker)742 {743 terminateWorkerInternal(worker, Synchronous);744 }745 746 void SWServer::terminateWorkerInternal(SWServerWorker& worker, TerminationMode mode)747 {748 ASSERT(m_runningOrTerminatingWorkers.get(worker.identifier()) == &worker);749 ASSERT(worker.isRunning());750 751 RELEASE_LOG(ServiceWorker, "%p - SWServer::terminateWorkerInternal: Terminating service worker %llu", this, worker.identifier().toUInt64());752 753 worker.setState(SWServerWorker::State::Terminating);754 755 auto* contextConnection = worker.contextConnection();756 ASSERT(contextConnection);757 if (!contextConnection) {758 LOG_ERROR("Request to terminate a worker whose context connection does not exist");759 workerContextTerminated(worker);760 return;761 }762 763 switch (mode) {764 case Asynchronous:765 contextConnection->terminateWorker(worker.identifier());766 break;767 case Synchronous:768 contextConnection->syncTerminateWorker(worker.identifier());769 break;770 };771 }772 773 728 void SWServer::markAllWorkersForRegistrableDomainAsTerminated(const RegistrableDomain& registrableDomain) 774 729 { … … 918 873 } 919 874 for (auto* worker : workersToTerminate) 920 terminateWorker(*worker);875 worker->terminate(); 921 876 922 877 if (!m_clientsByRegistrableDomain.contains(clientRegistrableDomain)) { … … 929 884 m_clientIdentifiersPerOrigin.remove(clientOrigin); 930 885 }); 931 iterator->value.terminateServiceWorkersTimer->startOneShot(m_isProcessTerminationDelayEnabled && !MemoryPressureHandler::singleton().isUnderMemoryPressure() ? terminationDelay : 0_s);886 iterator->value.terminateServiceWorkersTimer->startOneShot(m_isProcessTerminationDelayEnabled && !MemoryPressureHandler::singleton().isUnderMemoryPressure() ? defaultTerminationDelay : 0_s); 932 887 } 933 888 -
trunk/Source/WebCore/workers/service/server/SWServer.h
r256900 r259383 103 103 WEBCORE_EXPORT void addServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier); 104 104 WEBCORE_EXPORT void removeServiceWorkerRegistrationInServer(ServiceWorkerRegistrationIdentifier); 105 WEBCORE_EXPORT void syncTerminateWorker(ServiceWorkerIdentifier);106 105 WEBCORE_EXPORT void whenRegistrationReady(uint64_t registrationReadyRequestIdentifier, const SecurityOriginData& topOrigin, const URL& clientURL); 107 106 … … 153 152 154 153 void updateWorker(const ServiceWorkerJobDataIdentifier&, SWServerRegistration&, const URL&, const String& script, const ContentSecurityPolicyResponseHeaders&, const String& referrerPolicy, WorkerType, HashMap<URL, ServiceWorkerContextData::ImportedScript>&&); 155 void terminateWorker(SWServerWorker&);156 WEBCORE_EXPORT void syncTerminateWorker(SWServerWorker&);157 154 void fireInstallEvent(SWServerWorker&); 158 155 void fireActivateEvent(SWServerWorker&); … … 216 213 WEBCORE_EXPORT void handleLowMemoryWarning(); 217 214 215 static constexpr Seconds defaultTerminationDelay = 10_s; 216 218 217 private: 219 218 void scriptFetchFinished(const ServiceWorkerFetchResult&); … … 236 235 237 236 void performGetOriginsWithRegistrationsCallbacks(); 238 239 enum TerminationMode {240 Synchronous,241 Asynchronous,242 };243 void terminateWorkerInternal(SWServerWorker&, TerminationMode);244 237 245 238 void contextConnectionCreated(SWServerToContextConnection&); -
trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.h
r256900 r259383 55 55 virtual void fireActivateEvent(ServiceWorkerIdentifier) = 0; 56 56 virtual void terminateWorker(ServiceWorkerIdentifier) = 0; 57 virtual void syncTerminateWorker(ServiceWorkerIdentifier) = 0;58 57 virtual void findClientByIdentifierCompleted(uint64_t requestIdentifier, const Optional<ServiceWorkerClientData>&, bool hasSecurityError) = 0; 59 58 virtual void matchAllCompleted(uint64_t requestIdentifier, const Vector<ServiceWorkerClientData>&) = 0; … … 76 75 77 76 virtual void connectionIsNoLongerNeeded() = 0; 77 virtual void terminateDueToUnresponsiveness() = 0; 78 78 79 79 protected: -
trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp
r257929 r259383 29 29 #if ENABLE(SERVICE_WORKER) 30 30 31 #include "Logging.h" 31 32 #include "SWServer.h" 32 33 #include "SWServerRegistration.h" … … 59 60 , m_registrableDomain(m_data.scriptURL) 60 61 , m_scriptResourceMap(WTFMove(scriptResourceMap)) 62 , m_terminationTimer(*this, &SWServerWorker::terminationTimerFired) 61 63 { 62 64 m_data.scriptURL.removeFragmentIdentifier(); … … 75 77 auto taken = allWorkers().take(identifier()); 76 78 ASSERT_UNUSED(taken, taken == this); 79 80 callTerminationCallbacks(); 77 81 } 78 82 … … 84 88 } 85 89 86 void SWServerWorker::terminate() 87 { 88 if (isRunning()) 89 m_server->terminateWorker(*this); 90 void SWServerWorker::terminate(CompletionHandler<void()>&& callback) 91 { 92 if (!m_server) 93 return callback(); 94 95 switch (m_state) { 96 case State::Running: 97 startTermination(WTFMove(callback)); 98 return; 99 case State::Terminating: 100 m_terminationCallbacks.append(WTFMove(callback)); 101 return; 102 case State::NotRunning: 103 return callback(); 104 } 105 } 106 107 void SWServerWorker::startTermination(CompletionHandler<void()>&& callback) 108 { 109 auto* contextConnection = this->contextConnection(); 110 ASSERT(contextConnection); 111 if (!contextConnection) { 112 RELEASE_LOG_ERROR(ServiceWorker, "Request to terminate a worker %llu whose context connection does not exist", identifier().toUInt64()); 113 setState(State::NotRunning); 114 callback(); 115 m_server->workerContextTerminated(*this); 116 return; 117 } 118 119 setState(State::Terminating); 120 121 m_terminationCallbacks.append(WTFMove(callback)); 122 m_terminationTimer.startOneShot(SWServer::defaultTerminationDelay); 123 124 contextConnection->terminateWorker(identifier()); 125 } 126 127 void SWServerWorker::terminationCompleted() 128 { 129 m_terminationTimer.stop(); 130 callTerminationCallbacks(); 131 } 132 133 void SWServerWorker::callTerminationCallbacks() 134 { 135 auto callbacks = WTFMove(m_terminationCallbacks); 136 for (auto& callback : callbacks) 137 callback(); 138 } 139 140 void SWServerWorker::terminationTimerFired() 141 { 142 ASSERT(isTerminating()); 143 contextConnection()->terminateDueToUnresponsiveness(); 90 144 } 91 145 … … 253 307 break; 254 308 case State::NotRunning: 309 terminationCompleted(); 310 255 311 callWhenActivatedHandler(false); 256 312 // As per https://w3c.github.io/ServiceWorker/#activate, a worker goes to activated even if activating fails. … … 268 324 void SWServerWorker::didFailHeartBeatCheck() 269 325 { 270 if (m_server && isRunning()) 271 m_server->terminateWorker(*this); 326 terminate(); 272 327 } 273 328 -
trunk/Source/WebCore/workers/service/server/SWServerWorker.h
r256900 r259383 37 37 #include "ServiceWorkerRegistrationKey.h" 38 38 #include "ServiceWorkerTypes.h" 39 #include "Timer.h" 40 #include <wtf/CompletionHandler.h> 39 41 #include <wtf/RefCounted.h> 40 42 #include <wtf/WeakPtr.h> … … 61 63 WEBCORE_EXPORT ~SWServerWorker(); 62 64 63 void terminate();65 WEBCORE_EXPORT void terminate(CompletionHandler<void()>&& = [] { }); 64 66 65 67 WEBCORE_EXPORT void whenActivated(CompletionHandler<void(bool)>&&); … … 127 129 void callWhenActivatedHandler(bool success); 128 130 131 void startTermination(CompletionHandler<void()>&&); 132 void terminationCompleted(); 133 void terminationTimerFired(); 134 void callTerminationCallbacks(); 135 129 136 WeakPtr<SWServer> m_server; 130 137 ServiceWorkerRegistrationKey m_registrationKey; … … 143 150 bool m_shouldSkipHandleFetch; 144 151 bool m_hasTimedOutAnyFetchTasks { false }; 152 Vector<CompletionHandler<void()>> m_terminationCallbacks; 153 Timer m_terminationTimer; 145 154 }; 146 155 -
trunk/Source/WebKit/ChangeLog
r259382 r259383 1 2020-04-02 youenn fablet <youenn@apple.com> 2 3 Remove synchronous termination of service workers 4 https://bugs.webkit.org/show_bug.cgi?id=209666 5 6 Reviewed by Chris Dumez. 7 8 Update IPC code according removal of synchronous termination of service worker. 9 Implement async-with-reply termination instead. 10 11 * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: 12 (WebKit::WebSWServerConnection::terminateWorkerFromClient): 13 (WebKit::WebSWServerConnection::fetchTaskTimedOut): 14 * NetworkProcess/ServiceWorker/WebSWServerConnection.h: 15 * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in: 16 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: 17 (WebKit::WebSWServerToContextConnection::terminateDueToUnresponsiveness): 18 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h: 19 * WebProcess/Storage/WebServiceWorkerProvider.cpp: 20 * WebProcess/Storage/WebServiceWorkerProvider.h: 21 * WebProcess/Storage/WebSWClientConnection.cpp: 22 (WebKit::WebSWClientConnection::terminateWorkerForTesting): 23 * WebProcess/Storage/WebSWClientConnection.h: 24 * WebProcess/Storage/WebSWContextManagerConnection.cpp: 25 * WebProcess/Storage/WebSWContextManagerConnection.h: 26 * WebProcess/Storage/WebSWContextManagerConnection.messages.in: 27 1 28 2020-04-02 Adrian Perez de Castro <aperez@igalia.com> 2 29 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
r257413 r259383 457 457 } 458 458 459 void WebSWServerConnection::syncTerminateWorkerFromClient(ServiceWorkerIdentifier identifier, CompletionHandler<void()>&& completionHandler) 460 { 461 syncTerminateWorker(WTFMove(identifier)); 462 completionHandler(); 459 void WebSWServerConnection::terminateWorkerFromClient(ServiceWorkerIdentifier serviceWorkerIdentifier, CompletionHandler<void()>&& callback) 460 { 461 auto* worker = server().workerByID(serviceWorkerIdentifier); 462 if (!worker) 463 return callback(); 464 worker->terminate(WTFMove(callback)); 463 465 } 464 466 … … 486 488 487 489 worker->setHasTimedOutAnyFetchTasks(); 488 if (worker->isRunning()) 489 server().syncTerminateWorker(*worker); 490 worker->terminate(); 490 491 } 491 492 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h
r256749 r259383 71 71 72 72 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final; 73 void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);74 73 75 74 PAL::SessionID sessionID() const; … … 104 103 void registerServiceWorkerClient(WebCore::SecurityOriginData&& topOrigin, WebCore::ServiceWorkerClientData&&, const Optional<WebCore::ServiceWorkerRegistrationIdentifier>&, String&& userAgent); 105 104 void unregisterServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier&); 106 void syncTerminateWorkerFromClient(WebCore::ServiceWorkerIdentifier, CompletionHandler<void()>&&);105 void terminateWorkerFromClient(WebCore::ServiceWorkerIdentifier, CompletionHandler<void()>&&); 107 106 void isServiceWorkerRunning(WebCore::ServiceWorkerIdentifier, CompletionHandler<void(bool)>&&); 108 107 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in
r256749 r259383 42 42 UnregisterServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier identifier) 43 43 44 SyncTerminateWorkerFromClient(WebCore::ServiceWorkerIdentifier workerIdentifier) -> () Synchronous44 TerminateWorkerFromClient(WebCore::ServiceWorkerIdentifier workerIdentifier) -> () Async 45 45 46 46 SetThrottleState(bool isThrottleable) -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp
r257365 r259383 107 107 } 108 108 109 void WebSWServerToContextConnection:: syncTerminateWorker(ServiceWorkerIdentifier serviceWorkerIdentifier)109 void WebSWServerToContextConnection::terminateDueToUnresponsiveness() 110 110 { 111 if (!sendSync(Messages::WebSWContextManagerConnection::SyncTerminateWorker(serviceWorkerIdentifier), Messages::WebSWContextManagerConnection::SyncTerminateWorker::Reply(), 0, 10_s, IPC::SendSyncOption::ForceDispatchWhenDestinationIsWaitingForUnboundedSyncReply)) 112 m_connection.networkProcess().parentProcessConnection()->send(Messages::NetworkProcessProxy::TerminateUnresponsiveServiceWorkerProcesses { webProcessIdentifier() }, 0); 111 m_connection.networkProcess().parentProcessConnection()->send(Messages::NetworkProcessProxy::TerminateUnresponsiveServiceWorkerProcesses { webProcessIdentifier() }, 0); 113 112 } 114 113 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h
r256900 r259383 88 88 void fireActivateEvent(WebCore::ServiceWorkerIdentifier) final; 89 89 void terminateWorker(WebCore::ServiceWorkerIdentifier) final; 90 void syncTerminateWorker(WebCore::ServiceWorkerIdentifier) final;91 90 void findClientByIdentifierCompleted(uint64_t requestIdentifier, const Optional<WebCore::ServiceWorkerClientData>&, bool hasSecurityError) final; 92 91 void matchAllCompleted(uint64_t requestIdentifier, const Vector<WebCore::ServiceWorkerClientData>&) final; 93 92 94 93 void connectionIsNoLongerNeeded() final; 94 void terminateDueToUnresponsiveness() final; 95 95 96 96 void connectionClosed(); -
trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp
r256805 r259383 244 244 } 245 245 246 void WebSWClientConnection:: syncTerminateWorker(ServiceWorkerIdentifier identifier)247 { 248 send Sync(Messages::WebSWServerConnection::SyncTerminateWorkerFromClient { identifier }, Messages::WebSWServerConnection::SyncTerminateWorkerFromClient::Reply());246 void WebSWClientConnection::terminateWorkerForTesting(ServiceWorkerIdentifier identifier, CompletionHandler<void()>&& callback) 247 { 248 sendWithAsyncReply(Messages::WebSWServerConnection::TerminateWorkerFromClient { identifier }, WTFMove(callback)); 249 249 } 250 250 -
trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h
r256749 r259383 63 63 void connectionToServerLost(); 64 64 65 void syncTerminateWorker(WebCore::ServiceWorkerIdentifier) final;66 67 65 bool isThrottleable() const { return m_isThrottleable; } 68 66 void updateThrottleState(); 67 68 void terminateWorkerForTesting(WebCore::ServiceWorkerIdentifier, CompletionHandler<void()>&&); 69 69 70 70 private: -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp
r258628 r259383 256 256 } 257 257 258 void WebSWContextManagerConnection::syncTerminateWorker(ServiceWorkerIdentifier identifier, Messages::WebSWContextManagerConnection::SyncTerminateWorker::DelayedReply&& reply)259 {260 SWContextManager::singleton().terminateWorker(identifier, SWContextManager::syncWorkerTerminationTimeout, WTFMove(reply));261 }262 263 258 void WebSWContextManagerConnection::postMessageToServiceWorkerClient(const ServiceWorkerClientIdentifier& destinationIdentifier, const MessageWithMessagePorts& message, ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin) 264 259 { -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h
r258628 r259383 61 61 62 62 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final; 63 void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;64 63 65 64 private: … … 92 91 void fireActivateEvent(WebCore::ServiceWorkerIdentifier); 93 92 void terminateWorker(WebCore::ServiceWorkerIdentifier); 94 void syncTerminateWorker(WebCore::ServiceWorkerIdentifier, Messages::WebSWContextManagerConnection::SyncTerminateWorkerDelayedReply&&);95 93 void findClientByIdentifierCompleted(uint64_t requestIdentifier, Optional<WebCore::ServiceWorkerClientData>&&, bool hasSecurityError); 96 94 void matchAllCompleted(uint64_t matchAllRequestIdentifier, Vector<WebCore::ServiceWorkerClientData>&&); -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in
r256900 r259383 32 32 FireActivateEvent(WebCore::ServiceWorkerIdentifier identifier) 33 33 TerminateWorker(WebCore::ServiceWorkerIdentifier identifier) 34 SyncTerminateWorker(WebCore::ServiceWorkerIdentifier identifier) -> () Synchronous35 34 FindClientByIdentifierCompleted(uint64_t clientIdRequestIdentifier, Optional<WebCore::ServiceWorkerClientData> data, bool hasSecurityError) 36 35 MatchAllCompleted(uint64_t matchAllRequestIdentifier, Vector<WebCore::ServiceWorkerClientData> clientsData) -
trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp
r251470 r259383 71 71 } 72 72 73 void WebServiceWorkerProvider::terminateWorkerForTesting(WebCore::ServiceWorkerIdentifier identifier, CompletionHandler<void()>&& callback) 74 { 75 WebProcess::singleton().ensureNetworkProcessConnection().serviceWorkerConnection().terminateWorkerForTesting(identifier, WTFMove(callback)); 76 } 77 73 78 } // namespace WebKit 74 79 -
trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h
r252030 r259383 54 54 55 55 WebCore::SWClientConnection& serviceWorkerConnection() final; 56 void terminateWorkerForTesting(WebCore::ServiceWorkerIdentifier, CompletionHandler<void()>&&) final; 56 57 }; // class WebServiceWorkerProvider 57 58
Note:
See TracChangeset
for help on using the changeset viewer.