Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3830822c935e6fa0e851781b1cf7def6d3f66f66
https://github.com/WebKit/WebKit/commit/3830822c935e6fa0e851781b1cf7def6d3f66f66
Author: Youenn Fablet <[email protected]>
Date: 2024-06-21 (Fri, 21 Jun 2024)
Changed paths:
A
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate-worker.js
A
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate.https-expected.txt
A
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate.https.html
M Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp
M Source/WebCore/workers/service/context/SWContextManager.cpp
M Source/WebCore/workers/service/context/SWContextManager.h
M Source/WebCore/workers/service/context/ServiceWorkerFetch.h
M Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp
M Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h
M
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in
M Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp
M Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h
M Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp
M Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h
Log Message:
-----------
Navigation loads that go through a service worker should finish in case of
service worker termination
rdar://130079675
https://bugs.webkit.org/show_bug.cgi?id=275613
Reviewed by Chris Dumez.
We now store navigation fetch tasks in WebSWContextManagerConnection.
This allows to directly ask them to continueDidReceiveFetchResponse or
convertFetchToDownload without hopping to the worker thread.
This is useful as the worker thread may be dead by the time we hop to it, which
will prevent the load to finish or fail.
Since we are now calling continueDidReceiveFetchResponse or
convertFetchToDownload from WebSWContextManagerConnection queue, we add a
connection lock to WebServiceWorkerFetchTaskClient.
When a service worker gets stopped, we are now explicitly cancelling the
ongoing fetch tasks by calling
WebServiceWorkerFetchTaskClient::contextIsStopping.
It will cancel the load except if the load is already terminated but waiting to
proceed (which happens for navigation loads waiting for a response check).
*
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate-worker.js:
Added.
(doTest):
*
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate.https-expected.txt:
Added.
*
LayoutTests/http/wpt/service-workers/navigation-fetch-worker-terminate.https.html:
Added.
* Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp:
(WebCore::ServiceWorkerGlobalScope::prepareForDestruction):
* Source/WebCore/workers/service/context/SWContextManager.cpp:
(WebCore::SWContextManager::removeFetch):
* Source/WebCore/workers/service/context/SWContextManager.h:
* Source/WebCore/workers/service/context/ServiceWorkerFetch.h:
* Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp:
(WebCore::ServiceWorkerThreadProxy::cancelFetch):
(WebCore::ServiceWorkerThreadProxy::convertFetchToDownload): Deleted.
(WebCore::ServiceWorkerThreadProxy::continueDidReceiveFetchResponse): Deleted.
* Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h:
* Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
* Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp:
(WebKit::WebSWContextManagerConnection::cancelFetch):
(WebKit::WebSWContextManagerConnection::continueDidReceiveFetchResponse):
(WebKit::WebSWContextManagerConnection::startFetch):
(WebKit::WebSWContextManagerConnection::convertFetchToDownload):
(WebKit::WebSWContextManagerConnection::removeNavigationFetch):
* Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h:
* Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveRedirection):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveResponse):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveDataInternal):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinishInternal):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
(WebKit::WebServiceWorkerFetchTaskClient::didFail):
(WebKit::WebServiceWorkerFetchTaskClient::didFailInternal):
(WebKit::WebServiceWorkerFetchTaskClient::didFinish):
(WebKit::WebServiceWorkerFetchTaskClient::didFinishInternal):
(WebKit::WebServiceWorkerFetchTaskClient::didNotHandle):
(WebKit::WebServiceWorkerFetchTaskClient::didNotHandleInternal):
(WebKit::WebServiceWorkerFetchTaskClient::cancel):
(WebKit::WebServiceWorkerFetchTaskClient::usePreload):
(WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):
(WebKit::WebServiceWorkerFetchTaskClient::cleanup):
(WebKit::WebServiceWorkerFetchTaskClient::contextIsStopping):
* Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
Canonical link: https://commits.webkit.org/280246@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes