@@ -6,7 +6,8 @@ const { promiseResolvedWith, promiseRejectedWith, newPromise, resolvePromise, re
66 require ( '../helpers/webidl.js' ) ;
77const { CanTransferArrayBuffer, CopyDataBlockBytes, CreateArrayFromList, IsDetachedBuffer, TransferArrayBuffer } =
88 require ( './ecmascript.js' ) ;
9- const { CloneAsUint8Array, IsNonNegativeNumber, StructuredTransferOrClone } = require ( './miscellaneous.js' ) ;
9+ const { CloneAsUint8Array, IsNonNegativeNumber, RunCloseSteps, StructuredTransferOrClone } =
10+ require ( './miscellaneous.js' ) ;
1011const { EnqueueValueWithSize, ResetQueue } = require ( './queue-with-sizes.js' ) ;
1112const { AcquireWritableStreamDefaultWriter, IsWritableStreamLocked, WritableStreamAbort,
1213 WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease,
@@ -136,6 +137,7 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
136137
137138 const reader = AcquireReadableStreamDefaultReader ( source ) ;
138139 const writer = AcquireWritableStreamDefaultWriter ( dest ) ;
140+ writer . _stream . _controller . _isPipeToOptimizedTransfer = source . _controller . _isOwning && dest . _controller . _isOwning ;
139141
140142 source . _disturbed = true ;
141143
@@ -206,7 +208,11 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
206208 {
207209 chunkSteps : chunk => {
208210 currentWrite = transformPromiseWith (
209- WritableStreamDefaultWriterWrite ( writer , chunk ) , undefined , ( ) => { }
211+ WritableStreamDefaultWriterWrite ( writer , chunk ) , undefined , ( ) => {
212+ if ( reader . _stream . _controller . _isOwning ) {
213+ RunCloseSteps ( chunk ) ;
214+ }
215+ }
210216 ) ;
211217 resolveRead ( false ) ;
212218 } ,
@@ -319,6 +325,7 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
319325 }
320326
321327 function finalize ( isError , error ) {
328+ writer . _stream . _controller . _isPipeToOptimizedTransfer = undefined ;
322329 WritableStreamDefaultWriterRelease ( writer ) ;
323330 ReadableStreamDefaultReaderRelease ( reader ) ;
324331
0 commit comments