Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ff16e55cec55fc8dc7d9db9fcd36c2b0187f0fef
https://github.com/WebKit/WebKit/commit/ff16e55cec55fc8dc7d9db9fcd36c2b0187f0fef
Author: Ankshit Jain <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M Source/WebCore/Modules/webtransport/WebTransport.cpp
M Source/WebCore/Modules/webtransport/WebTransport.h
M Source/WebCore/Modules/webtransport/WebTransportError.h
M Source/WebCore/Modules/webtransport/WebTransportErrorOptions.h
M Source/WebCore/Modules/webtransport/WebTransportReceiveStreamSource.cpp
M Source/WebCore/Modules/webtransport/WebTransportReceiveStreamSource.h
M Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.cpp
M Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.h
M Source/WebCore/Modules/webtransport/WebTransportSession.h
M Source/WebCore/Modules/webtransport/WebTransportSessionClient.h
M Source/WebCore/Modules/webtransport/WorkerWebTransportSession.cpp
M Source/WebCore/Modules/webtransport/WorkerWebTransportSession.h
M Source/WebCore/PAL/pal/spi/cocoa/NetworkSPI.h
M Source/WebKit/Configurations/AllowedSPI.toml
M Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.cpp
M Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.h
M Source/WebKit/NetworkProcess/webtransport/NetworkTransportStream.h
M
Source/WebKit/NetworkProcess/webtransport/cocoa/NetworkTransportSessionCocoa.mm
M
Source/WebKit/NetworkProcess/webtransport/cocoa/NetworkTransportStreamCocoa.mm
M Source/WebKit/WebProcess/Network/WebTransportSession.cpp
M Source/WebKit/WebProcess/Network/WebTransportSession.h
M Tools/TestWebKitAPI/NetworkConnection.h
M Tools/TestWebKitAPI/NetworkConnection.mm
M Tools/TestWebKitAPI/Tests/WebKitCocoa/WebTransport.mm
Log Message:
-----------
ReadableStream cancel & WritableStream abort should support WebTransportError
https://bugs.webkit.org/show_bug.cgi?id=305006
rdar://160151232
Reviewed by Alex Christensen.
This PR adds support to extract WebTransportError from ReadableStream cancel &
WritableStream abort, and plumb the error code to the corresponding
STOP_SENDING / RESET_STREAM_AT frames.
To make sure the entire flow works for error handling, it was necessary to
streamline closure handling for streams.
- Stream creation only returns an identifier now instead of creating
WebTransportSendStreamSink.
- Now, WebTransportSendStreamSink and WebTransportReceiveStreamSource are both
created when the stream is created so they have access to the stream.
- This allows stream closure to be centralized, which in turn allows
WebTransport to untrack send and receive streams on closure in a single
location.
Changes were required on the network side to make sure closure events (FIN /
error) are tracked and sent correctly to WebTransport.
Significant stream state duplication is removed from
NetworkTransportSessionCocoa, and centralized to NetworkTransportStreamCocoa.
This allows NetworkTransportStream to effectively manage an nw_connection_t and
handle all state transitions in one location.
Tests: Tools/TestWebKitAPI/NetworkConnection.h
Tools/TestWebKitAPI/NetworkConnection.mm
Tools/TestWebKitAPI/Tests/WebKitCocoa/WebTransport.mm
* Source/WebCore/Modules/webtransport/WebTransport.cpp:
(WebCore::WebTransport::receiveIncomingUnidirectionalStream):
(WebCore::WebTransport::receiveBidirectionalStream):
(WebCore::WebTransport::streamReceiveError):
(WebCore::WebTransport::streamSendError):
(WebCore::WebTransport::cleanup):
(WebCore::WebTransport::createBidirectionalStream):
(WebCore::WebTransport::createUnidirectionalStream):
(WebCore::WebTransport::sendStreamClosed):
(WebCore::WebTransport::receiveStreamClosed):
* Source/WebCore/Modules/webtransport/WebTransport.h:
* Source/WebCore/Modules/webtransport/WebTransportError.h:
* Source/WebCore/Modules/webtransport/WebTransportErrorOptions.h:
* Source/WebCore/Modules/webtransport/WebTransportReceiveStreamSource.cpp:
(WebCore::WebTransportReceiveStreamSource::receiveIncomingStream):
(WebCore::WebTransportReceiveStreamSource::receiveBytes):
(WebCore::WebTransportReceiveStreamSource::receiveError):
(WebCore::WebTransportReceiveStreamSource::doCancel):
* Source/WebCore/Modules/webtransport/WebTransportReceiveStreamSource.h:
(WebCore::WebTransportReceiveStreamSource::setStream):
(WebCore::WebTransportReceiveStreamSource::stream const):
* Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.cpp:
(WebCore::WebTransportSendStreamSink::WebTransportSendStreamSink):
(WebCore::WebTransportSendStreamSink::sendError):
(WebCore::WebTransportSendStreamSink::write):
(WebCore::WebTransportSendStreamSink::close):
(WebCore::WebTransportSendStreamSink::abort):
* Source/WebCore/Modules/webtransport/WebTransportSendStreamSink.h:
(WebCore::WebTransportSendStreamSink::create):
(WebCore::WebTransportSendStreamSink::setStream):
(WebCore::WebTransportSendStreamSink::stream const):
* Source/WebCore/Modules/webtransport/WebTransportSession.h:
* Source/WebCore/Modules/webtransport/WebTransportSessionClient.h:
* Source/WebCore/Modules/webtransport/WorkerWebTransportSession.cpp:
(WebCore::WorkerWebTransportSession::receiveBidirectionalStream):
(WebCore::WorkerWebTransportSession::createOutgoingUnidirectionalStream):
(WebCore::WorkerWebTransportSession::createBidirectionalStream):
* Source/WebCore/Modules/webtransport/WorkerWebTransportSession.h:
* Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.cpp:
(WebKit::NetworkTransportSession::isSessionClosed const):
* Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.h:
* Source/WebKit/NetworkProcess/webtransport/NetworkTransportStream.h:
*
Source/WebKit/NetworkProcess/webtransport/cocoa/NetworkTransportSessionCocoa.mm:
(WebKit::NetworkTransportSession::setupConnectionHandler):
(WebKit::NetworkTransportSession::createStream):
(WebKit::NetworkTransportSession::isSessionClosed const):
*
Source/WebKit/NetworkProcess/webtransport/cocoa/NetworkTransportStreamCocoa.mm:
(WebKit::NetworkTransportStream::NetworkTransportStream):
(WebKit::NetworkTransportStream::start):
(WebKit::NetworkTransportStream::initializeReadyConnection):
(WebKit::NetworkTransportStream::sendBytes):
(WebKit::NetworkTransportStream::receiveLoop):
(WebKit::NetworkTransportStream::cancelReceive):
(WebKit::NetworkTransportStream::cancelSend):
* Source/WebKit/WebProcess/Network/WebTransportSession.cpp:
(WebKit::WebTransportSession::receiveDatagram):
(WebKit::WebTransportSession::receiveIncomingUnidirectionalStream):
(WebKit::WebTransportSession::receiveBidirectionalStream):
(WebKit::WebTransportSession::streamReceiveBytes):
(WebKit::WebTransportSession::streamReceiveError):
(WebKit::WebTransportSession::streamSendError):
(WebKit::WebTransportSession::didFail):
(WebKit::WebTransportSession::didDrain):
(WebKit::WebTransportSession::createOutgoingUnidirectionalStream):
(WebKit::WebTransportSession::createBidirectionalStream):
* Source/WebKit/WebProcess/Network/WebTransportSession.h:
* Tools/TestWebKitAPI/NetworkConnection.h:
(TestWebKitAPI::SendOperation::SendOperation):
* Tools/TestWebKitAPI/NetworkConnection.mm:
(TestWebKitAPI::SendOperation::await_suspend):
(TestWebKitAPI::Connection::awaitableSend):
(TestWebKitAPI::Connection::send const):
(TestWebKitAPI::Connection::abortReads):
(TestWebKitAPI::Connection::abortWrites):
(TestWebKitAPI::Connection::setRemoteReceiveErrorHandler):
(TestWebKitAPI::Connection::setRemoteSendErrorHandler):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WebTransport.mm:
(TestWebKitAPI::TEST(WebTransport, NetworkProcessCrash)):
(TestWebKitAPI::TEST(WebTransport, ClientStreamAborts)):
(TestWebKitAPI::TEST(WebTransport, ServerStreamAborts)):
Canonical link: https://commits.webkit.org/305232@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications