Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b0957d9ae341ce80fcb9818848aff2635b457f00
https://github.com/WebKit/WebKit/commit/b0957d9ae341ce80fcb9818848aff2635b457f00
Author: Youenn Fablet <[email protected]>
Date: 2026-07-28 (Tue, 28 Jul 2026)
Changed paths:
A
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel-worker.js
A
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel.https-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel.https.html
M Source/WebCore/Modules/fetch/FetchBody.cpp
M Source/WebCore/Modules/fetch/FetchBody.h
M Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp
M Source/WebCore/Modules/fetch/FetchBodyConsumer.h
M Source/WebCore/Modules/fetch/FetchRequest.cpp
M Source/WebCore/Modules/fetch/FetchRequest.h
M Source/WebCore/Modules/fetch/FetchResponse.cpp
M Source/WebCore/platform/network/PendingStreamState.cpp
M Source/WebCore/platform/network/PendingStreamState.h
M Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp
M Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h
M
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp
M Source/WebKit/WebProcess/Network/WebResourceLoader.cpp
M Source/WebKit/WebProcess/Network/WebResourceLoader.h
M Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in
Log Message:
-----------
Service worker fetch event request body cancellation should be propagated to
the original ReadableStream
rdar://183317580
https://bugs.webkit.org/show_bug.cgi?id=320359
Reviewed by Alex Christensen.
When a service worker is cancelling a fetch event request body, we propagate it
as follows:
1. FetchRequest will cancel its FetchBody which will cancel its
FetchBodyConsumer which will cancel its FormDataConsumer
2. FormDataConsumer will ask its sw connection to cancel the upload forwarding
to network process via IPC.
3. network process stops the forwarding and notifies the related
WebResourceLoader in web process.
4. WebResourceLoader tells the PendingStreamState it has been cancelled.
When starting the upstream, the PendingStreamState is created and the it is
registered a cancel callback from the FetchRequest.
This cancel callback is now cancelling the original ReadableStream.
To implement this we rename DataAvailableHandler to CallbackHandler and add a
specific cancel callback like there is a data available callback.
Test:
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel.https.html
* Source/WebCore/Modules/fetch/FetchBody.cpp:
(WebCore::FetchBody::startPendingStreamUpload):
(WebCore::FetchBody::cancelReadableStream):
* Source/WebCore/Modules/fetch/FetchBody.h:
* Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:
(WebCore::FetchBodyConsumer::cancelReadableStream):
* Source/WebCore/Modules/fetch/FetchBodyConsumer.h:
* Source/WebCore/Modules/fetch/FetchRequest.cpp:
(WebCore::FetchRequest::cancel):
* Source/WebCore/Modules/fetch/FetchRequest.h:
* Source/WebCore/Modules/fetch/FetchResponse.cpp:
(WebCore::FetchResponse::fetch):
* Source/WebCore/platform/network/PendingStreamState.cpp:
(WebCore::PendingStreamState::CallbackHandler::create):
(WebCore::PendingStreamState::CallbackHandler::CallbackHandler):
(WebCore::PendingStreamState::invokeHandlerIfNeeded):
(WebCore::PendingStreamState::appendData):
(WebCore::PendingStreamState::endStream):
(WebCore::PendingStreamState::errorStream):
(WebCore::PendingStreamState::setDataAvailableHandler):
(WebCore::PendingStreamState::setCancelCallback):
(WebCore::PendingStreamState::cancel):
(WebCore::PendingStreamState::DataAvailableHandler::create): Deleted.
(WebCore::PendingStreamState::DataAvailableHandler::invoke): Deleted.
(WebCore::PendingStreamState::DataAvailableHandler::DataAvailableHandler):
Deleted.
* Source/WebCore/platform/network/PendingStreamState.h:
(WebCore::PendingStreamState::setServiceWorkerFetchIdentifier):
(WebCore::PendingStreamState::serviceWorkerFetchIdentifier const):
* Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
(WebKit::ServiceWorkerFetchTask::cancelPendingStreamUpload):
* Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
(WebKit::WebSWServerToContextConnection::cancelPendingStreamUploadForwarding):
* Source/WebKit/WebProcess/Network/WebResourceLoader.cpp:
(WebKit::WebResourceLoader::cancelPendingStreamUpload):
* Source/WebKit/WebProcess/Network/WebResourceLoader.h:
* Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in:
*
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel-worker.js:
Added.
(async cancelBodyTest):
*
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel.https-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-body-cancel.https.html:
Added.
Canonical link: https://commits.webkit.org/318043@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications