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

Reply via email to