Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 127ad248be85961feb1bdb4ed24347e14b2a4989
https://github.com/WebKit/WebKit/commit/127ad248be85961feb1bdb4ed24347e14b2a4989
Author: Youenn Fablet <[email protected]>
Date: 2025-11-24 (Mon, 24 Nov 2025)
Changed paths:
M Source/WebCore/Modules/streams/ReadableStream.cpp
M Source/WebCore/Modules/streams/ReadableStream.h
M Source/WebCore/Modules/streams/StreamTeeUtilities.cpp
Log Message:
-----------
StreamTeeState should not take JSC::Strong for cancel reasons
https://bugs.webkit.org/show_bug.cgi?id=302797
rdar://165110134
Reviewed by Chris Dumez.
Instead of using Strongs, we use JSValueInWrappedObject for cancel reasons.
We then need to ensure that these values are visited.
To do so, we replace the relatedStream scheme used to keep the teed readable
stream alive by a new DependencyToVisit class that gets visited.
StreamTeeState is a DependencyToVisit and will ensure both teed readable stream
and JSValueInWrappedObject reasons are visited.
Covered by existing tests.
* Source/WebCore/Modules/streams/ReadableStream.cpp:
(WebCore::ReadableStream::ReadableStream):
(WebCore::ReadableStream::createReadableByteStream):
(WebCore::ReadableStream::visitAdditionalChildren):
* Source/WebCore/Modules/streams/ReadableStream.h:
(WebCore::ReadableStream::ReadableStream):
* Source/WebCore/Modules/streams/StreamTeeUtilities.cpp:
(WebCore::byteStreamTee):
(WebCore::StreamTeeState::create): Deleted.
(WebCore::StreamTeeState::isReader const): Deleted.
(WebCore::StreamTeeState::reading const): Deleted.
(WebCore::StreamTeeState::setReading): Deleted.
(WebCore::StreamTeeState::readAgainForBranch1 const): Deleted.
(WebCore::StreamTeeState::setReadAgainForBranch1): Deleted.
(WebCore::StreamTeeState::readAgainForBranch2 const): Deleted.
(WebCore::StreamTeeState::setReadAgainForBranch2): Deleted.
(WebCore::StreamTeeState::canceled1 const): Deleted.
(WebCore::StreamTeeState::canceled2 const): Deleted.
(WebCore::StreamTeeState::setCanceled1): Deleted.
(WebCore::StreamTeeState::setCanceled2): Deleted.
(WebCore::StreamTeeState::takeReason1): Deleted.
(WebCore::StreamTeeState::takeReason2): Deleted.
(WebCore::StreamTeeState::setReason1): Deleted.
(WebCore::StreamTeeState::setReason2): Deleted.
(WebCore::StreamTeeState::stream const): Deleted.
(WebCore::StreamTeeState::branch1 const): Deleted.
(WebCore::StreamTeeState::branch2 const): Deleted.
(WebCore::StreamTeeState::setBranch1): Deleted.
(WebCore::StreamTeeState::setBranch2): Deleted.
(WebCore::StreamTeeState::byobReader const): Deleted.
(WebCore::StreamTeeState::takeBYOBReader): Deleted.
(WebCore::StreamTeeState::setReader): Deleted.
(WebCore::StreamTeeState::defaultReader const): Deleted.
(WebCore::StreamTeeState::takeDefaultReader): Deleted.
(WebCore::StreamTeeState::cancelPromise): Deleted.
(WebCore::StreamTeeState::resolveCancelPromise): Deleted.
(WebCore::StreamTeeState::rejectCancelPromise): Deleted.
(WebCore::StreamTeeState::forwardReadError): Deleted.
(WebCore::StreamTeeState::globalObject): Deleted.
(WebCore::StreamTeeState::queueMicrotaskWithValue): Deleted.
(WebCore::StreamTeeState::StreamTeeState): Deleted.
Canonical link: https://commits.webkit.org/303481@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications