@@ -6,7 +6,8 @@ const { promiseResolvedWith, promiseRejectedWith, newPromise, resolvePromise, re
6
6
require ( '../helpers/webidl.js' ) ;
7
7
const { CanTransferArrayBuffer, CopyDataBlockBytes, CreateArrayFromList, IsDetachedBuffer, TransferArrayBuffer } =
8
8
require ( './ecmascript.js' ) ;
9
- const { CloneAsUint8Array, IsNonNegativeNumber, StructuredTransferOrClone } = require ( './miscellaneous.js' ) ;
9
+ const { CloneAsUint8Array, IsNonNegativeNumber, RunCloseSteps, StructuredTransferOrClone } =
10
+ require ( './miscellaneous.js' ) ;
10
11
const { EnqueueValueWithSize, ResetQueue } = require ( './queue-with-sizes.js' ) ;
11
12
const { AcquireWritableStreamDefaultWriter, IsWritableStreamLocked, WritableStreamAbort,
12
13
WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease,
@@ -136,6 +137,7 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
136
137
137
138
const reader = AcquireReadableStreamDefaultReader ( source ) ;
138
139
const writer = AcquireWritableStreamDefaultWriter ( dest ) ;
140
+ writer . _stream . _controller . _isPipeToOptimizedTransfer = source . _controller . _isOwning && dest . _controller . _isOwning ;
139
141
140
142
source . _disturbed = true ;
141
143
@@ -206,7 +208,11 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
206
208
{
207
209
chunkSteps : chunk => {
208
210
currentWrite = transformPromiseWith (
209
- WritableStreamDefaultWriterWrite ( writer , chunk ) , undefined , ( ) => { }
211
+ WritableStreamDefaultWriterWrite ( writer , chunk ) , undefined , ( ) => {
212
+ if ( reader . _stream . _controller . _isOwning ) {
213
+ RunCloseSteps ( chunk ) ;
214
+ }
215
+ }
210
216
) ;
211
217
resolveRead ( false ) ;
212
218
} ,
@@ -319,6 +325,7 @@ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventC
319
325
}
320
326
321
327
function finalize ( isError , error ) {
328
+ writer . _stream . _controller . _isPipeToOptimizedTransfer = undefined ;
322
329
WritableStreamDefaultWriterRelease ( writer ) ;
323
330
ReadableStreamDefaultReaderRelease ( reader ) ;
324
331
0 commit comments