Changeset 230637 in webkit
- Timestamp:
- Apr 13, 2018 10:01:40 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r230632 r230637 1 2018-04-13 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 [WebCore] Use @getByIdDirectPrivate / @putByIdDirectPrivate in WebCore JS 4 https://bugs.webkit.org/show_bug.cgi?id=184401 5 6 Rubber stamped by Saam Barati. 7 8 Apply bug 183970 changes to WebCore JS too. This offers solid type checking 9 with @getByIdDirectPrivate(). 10 11 * Modules/mediastream/RTCPeerConnection.js: 12 (initializeRTCPeerConnection): 13 (getLocalStreams): 14 (getStreamById): 15 (addStream): 16 * Modules/mediastream/RTCPeerConnectionInternals.js: 17 (isRTCPeerConnection): 18 * Modules/streams/ReadableByteStreamController.js: 19 (enqueue): 20 (error): 21 (close): 22 (getter.byobRequest): 23 * Modules/streams/ReadableByteStreamInternals.js: 24 (privateInitializeReadableStreamBYOBReader): 25 (privateInitializeReadableByteStreamController): 26 (privateInitializeReadableStreamBYOBRequest): 27 (isReadableByteStreamController): 28 (isReadableStreamBYOBRequest): 29 (isReadableStreamBYOBReader): 30 (readableByteStreamControllerCancel): 31 (readableByteStreamControllerError): 32 (readableByteStreamControllerClose): 33 (readableByteStreamControllerClearPendingPullIntos): 34 (readableByteStreamControllerGetDesiredSize): 35 (readableStreamHasBYOBReader): 36 (readableStreamHasDefaultReader): 37 (readableByteStreamControllerHandleQueueDrain): 38 (readableByteStreamControllerPull): 39 (readableByteStreamControllerShouldCallPull): 40 (readableByteStreamControllerCallPullIfNeeded): 41 (readableByteStreamControllerEnqueue): 42 (readableByteStreamControllerEnqueueChunk): 43 (readableByteStreamControllerRespondWithNewView): 44 (readableByteStreamControllerRespond): 45 (readableByteStreamControllerRespondInternal): 46 (readableByteStreamControllerRespondInReadableState): 47 (readableByteStreamControllerRespondInClosedState): 48 (readableByteStreamControllerProcessPullDescriptors): 49 (readableByteStreamControllerFillDescriptorFromQueue): 50 (readableByteStreamControllerShiftPendingDescriptor): 51 (readableByteStreamControllerInvalidateBYOBRequest): 52 (readableByteStreamControllerCommitDescriptor): 53 (readableStreamFulfillReadIntoRequest): 54 (readableByteStreamControllerPullInto): 55 (readableStreamAddReadIntoRequest): 56 * Modules/streams/ReadableStream.js: 57 (initializeReadableStream): 58 (pipeThrough): 59 * Modules/streams/ReadableStreamBYOBReader.js: 60 (cancel): 61 (read): 62 (releaseLock): 63 (getter.closed): 64 * Modules/streams/ReadableStreamBYOBRequest.js: 65 (respond): 66 (respondWithNewView): 67 (getter.view): 68 * Modules/streams/ReadableStreamDefaultController.js: 69 (error): 70 * Modules/streams/ReadableStreamDefaultReader.js: 71 (cancel): 72 (read): 73 (releaseLock): 74 (getter.closed): 75 * Modules/streams/ReadableStreamInternals.js: 76 (privateInitializeReadableStreamDefaultReader): 77 (readableStreamReaderGenericInitialize): 78 (readableStreamDefaultControllerError): 79 (readableStreamPipeTo): 80 (readableStreamTee): 81 (isReadableStream): 82 (isReadableStreamDefaultReader): 83 (isReadableStreamDefaultController): 84 (readableStreamError): 85 (readableStreamDefaultControllerCallPullIfNeeded): 86 (readableStreamDefaultControllerGetDesiredSize): 87 (readableStreamReaderGenericCancel): 88 (readableStreamCancel): 89 (readableStreamDefaultControllerCancel): 90 (readableStreamDefaultControllerPull): 91 (readableStreamDefaultControllerClose): 92 (readableStreamClose): 93 (readableStreamFulfillReadRequest): 94 (readableStreamDefaultReaderRead): 95 (readableStreamAddReadRequest): 96 (isReadableStreamDisturbed): 97 (readableStreamReaderGenericRelease): 98 (readableStreamDefaultControllerCanCloseOrEnqueue): 99 (privateInitializeReadableStreamDefaultController): Deleted. 100 * Modules/streams/StreamInternals.js: 101 (validateAndNormalizeQueuingStrategy): 102 * Modules/streams/WritableStream.js: 103 (initializeWritableStream): 104 (abort): 105 (close): 106 (write): 107 (getter.closed): 108 (getter.ready): 109 (getter.state): 110 * Modules/streams/WritableStreamInternals.js: 111 (isWritableStream): 112 (syncWritableStreamStateWithQueue): 113 (errorWritableStream): 114 (callOrScheduleWritableStreamAdvanceQueue): 115 * bindings/js/JSDOMBindingInternals.js: 116 (mapLikeForEach): 117 1 118 2018-04-12 Antoine Quint <graouts@apple.com> 2 119 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js
r229645 r230637 41 41 42 42 this.@initializeWith(configuration); 43 this.@operations = [];44 this.@localStreams = [];43 @putByIdDirectPrivate(this, "operations", []); 44 @putByIdDirectPrivate(this, "localStreams", []); 45 45 46 46 return this; … … 54 54 throw @makeThisTypeError("RTCPeerConnection", "getLocalStreams"); 55 55 56 return this.@localStreams.slice();56 return @getByIdDirectPrivate(this, "localStreams").slice(); 57 57 } 58 58 … … 67 67 @throwTypeError("Not enough arguments"); 68 68 69 const streamId = @ String(streamIdArg);70 71 return this.@localStreams.find(stream => stream.id === streamId)69 const streamId = @toString(streamIdArg); 70 71 return @getByIdDirectPrivate(this, "localStreams").find(stream => stream.id === streamId) 72 72 || this.@getRemoteStreams().find(stream => stream.id === streamId) 73 73 || null; … … 87 87 @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.addStream must be an instance of MediaStream"); 88 88 89 if ( this.@localStreams.find(localStream => localStream.id === stream.id))89 if (@getByIdDirectPrivate(this, "localStreams").find(localStream => localStream.id === stream.id)) 90 90 return; 91 91 92 this.@localStreams.@push(stream);92 @getByIdDirectPrivate(this, "localStreams").@push(stream); 93 93 stream.@getTracks().forEach(track => this.@addTrack(track, stream)); 94 94 } … … 107 107 @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.removeStream must be an instance of MediaStream"); 108 108 109 const indexOfStreamToRemove = this.@localStreams.findIndex(localStream => localStream.id === stream.id);109 const indexOfStreamToRemove = @getByIdDirectPrivate(this, "localStreams").findIndex(localStream => localStream.id === stream.id); 110 110 if (indexOfStreamToRemove === -1) 111 111 return; 112 112 113 113 const senders = this.@getSenders(); 114 this.@localStreams[indexOfStreamToRemove].@getTracks().forEach(track => {114 @getByIdDirectPrivate(this, "localStreams")[indexOfStreamToRemove].@getTracks().forEach(track => { 115 115 const senderForTrack = senders.find(sender => sender.track && sender.track.id === track.id); 116 116 if (senderForTrack) … … 118 118 }); 119 119 120 this.@localStreams.splice(indexOfStreamToRemove, 1);120 @getByIdDirectPrivate(this, "localStreams").splice(indexOfStreamToRemove, 1); 121 121 } 122 122 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionInternals.js
r214527 r230637 37 37 "use strict"; 38 38 39 const operations = peerConnection.@operations;39 const operations = @getByIdDirectPrivate(peerConnection, "operations"); 40 40 41 41 function runNext() { … … 134 134 "use strict"; 135 135 136 return @isObject(connection) && !! connection.@operations;136 return @isObject(connection) && !!@getByIdDirectPrivate(connection, "operations"); 137 137 } -
trunk/Source/WebCore/Modules/streams/ReadableByteStreamController.js
r221417 r230637 33 33 throw @makeThisTypeError("ReadableByteStreamController", "enqueue"); 34 34 35 if ( this.@closeRequested)35 if (@getByIdDirectPrivate(this, "closeRequested")) 36 36 @throwTypeError("ReadableByteStreamController is requested to close"); 37 37 38 if ( this.@controlledReadableStream.@state!== @streamReadable)38 if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable) 39 39 @throwTypeError("ReadableStream is not readable"); 40 40 … … 55 55 throw @makeThisTypeError("ReadableByteStreamController", "error"); 56 56 57 if ( this.@controlledReadableStream.@state!== @streamReadable)57 if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable) 58 58 @throwTypeError("ReadableStream is not readable"); 59 59 … … 68 68 throw @makeThisTypeError("ReadableByteStreamController", "close"); 69 69 70 if ( this.@closeRequested)70 if (@getByIdDirectPrivate(this, "closeRequested")) 71 71 @throwTypeError("Close has already been requested"); 72 72 73 if ( this.@controlledReadableStream.@state!== @streamReadable)73 if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable) 74 74 @throwTypeError("ReadableStream is not readable"); 75 75 … … 85 85 throw @makeGetterTypeError("ReadableByteStreamController", "byobRequest"); 86 86 87 if ( this.@byobRequest === @undefined && this.@pendingPullIntos.length) {88 const firstDescriptor = this.@pendingPullIntos[0];87 if (@getByIdDirectPrivate(this, "byobRequest") === @undefined && @getByIdDirectPrivate(this, "pendingPullIntos").length) { 88 const firstDescriptor = @getByIdDirectPrivate(this, "pendingPullIntos")[0]; 89 89 const view = new @Uint8Array(firstDescriptor.buffer, 90 90 firstDescriptor.byteOffset + firstDescriptor.bytesFilled, 91 91 firstDescriptor.byteLength - firstDescriptor.bytesFilled); 92 this.@byobRequest = new @ReadableStreamBYOBRequest(this, view);92 @putByIdDirectPrivate(this, "byobRequest", new @ReadableStreamBYOBRequest(this, view)); 93 93 } 94 94 95 return this.@byobRequest;95 return @getByIdDirectPrivate(this, "byobRequest"); 96 96 } 97 97 -
trunk/Source/WebCore/Modules/streams/ReadableByteStreamInternals.js
r226005 r230637 33 33 if (!@isReadableStream(stream)) 34 34 @throwTypeError("ReadableStreamBYOBReader needs a ReadableStream"); 35 if (!@isReadableByteStreamController( stream.@readableStreamController))35 if (!@isReadableByteStreamController(@getByIdDirectPrivate(stream, "readableStreamController"))) 36 36 @throwTypeError("ReadableStreamBYOBReader needs a ReadableByteStreamController"); 37 37 if (@isReadableStreamLocked(stream)) … … 39 39 40 40 @readableStreamReaderGenericInitialize(this, stream); 41 this.@readIntoRequests = [];41 @putByIdDirectPrivate(this, "readIntoRequests", []); 42 42 43 43 return this; … … 52 52 53 53 // readableStreamController is initialized with null value. 54 if ( stream.@readableStreamController!== null)54 if (@getByIdDirectPrivate(stream, "readableStreamController") !== null) 55 55 @throwTypeError("ReadableStream already has a controller"); 56 56 57 this.@controlledReadableStream = stream;58 this.@underlyingByteSource = underlyingByteSource;59 this.@pullAgain = false;60 this.@pulling = false;57 @putByIdDirectPrivate(this, "controlledReadableStream", stream); 58 @putByIdDirectPrivate(this, "underlyingByteSource", underlyingByteSource); 59 @putByIdDirectPrivate(this, "pullAgain", false); 60 @putByIdDirectPrivate(this, "pulling", false); 61 61 @readableByteStreamControllerClearPendingPullIntos(this); 62 this.@queue = @newQueue();63 this.@started = false;64 this.@closeRequested = false;62 @putByIdDirectPrivate(this, "queue", @newQueue()); 63 @putByIdDirectPrivate(this, "started", false); 64 @putByIdDirectPrivate(this, "closeRequested", false); 65 65 66 66 let hwm = @toNumber(highWaterMark); 67 67 if (@isNaN(hwm) || hwm < 0) 68 68 @throwRangeError("highWaterMark value is negative or not a number"); 69 this.@strategyHWM = hwm;69 @putByIdDirectPrivate(this, "strategyHWM", hwm); 70 70 71 71 let autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; … … 75 75 @throwRangeError("autoAllocateChunkSize value is negative or equal to positive or negative infinity"); 76 76 } 77 this.@autoAllocateChunkSize = autoAllocateChunkSize;78 this.@pendingPullIntos = [];77 @putByIdDirectPrivate(this, "autoAllocateChunkSize", autoAllocateChunkSize); 78 @putByIdDirectPrivate(this, "pendingPullIntos", []); 79 79 80 80 const controller = this; 81 81 const startResult = @promiseInvokeOrNoopNoCatch(underlyingByteSource, "start", [this]).@then(() => { 82 controller.@started = true;83 @assert(! controller.@pulling);84 @assert(! controller.@pullAgain);82 @putByIdDirectPrivate(controller, "started", true); 83 @assert(!@getByIdDirectPrivate(controller, "pulling")); 84 @assert(!@getByIdDirectPrivate(controller, "pullAgain")); 85 85 @readableByteStreamControllerCallPullIfNeeded(controller); 86 86 }, (error) => { 87 if ( stream.@state=== @streamReadable)87 if (@getByIdDirectPrivate(stream, "state") === @streamReadable) 88 88 @readableByteStreamControllerError(controller, error); 89 89 }); 90 90 91 this.@cancel = @readableByteStreamControllerCancel;92 this.@pull = @readableByteStreamControllerPull;91 @putByIdDirectPrivate(this, "cancel", @readableByteStreamControllerCancel); 92 @putByIdDirectPrivate(this, "pull", @readableByteStreamControllerPull); 93 93 94 94 return this; … … 99 99 "use strict"; 100 100 101 this.@associatedReadableByteStreamController = controller;102 this.@view = view;101 @putByIdDirectPrivate(this, "associatedReadableByteStreamController", controller); 102 @putByIdDirectPrivate(this, "view", view); 103 103 } 104 104 … … 109 109 // Same test mechanism as in isReadableStreamDefaultController (ReadableStreamInternals.js). 110 110 // See corresponding function for explanations. 111 return @isObject(controller) && !! controller.@underlyingByteSource;111 return @isObject(controller) && !!@getByIdDirectPrivate(controller, "underlyingByteSource"); 112 112 } 113 113 … … 118 118 // Same test mechanism as in isReadableStreamDefaultController (ReadableStreamInternals.js). 119 119 // See corresponding function for explanations. 120 return @isObject(byobRequest) && !! byobRequest.@associatedReadableByteStreamController;120 return @isObject(byobRequest) && !!@getByIdDirectPrivate(byobRequest, "associatedReadableByteStreamController"); 121 121 } 122 122 … … 128 128 // However, since it is a private slot, it cannot be checked using hasOwnProperty(). 129 129 // Since readIntoRequests is initialized with an empty array, the following test is ok. 130 return @isObject(reader) && !! reader.@readIntoRequests;130 return @isObject(reader) && !!@getByIdDirectPrivate(reader, "readIntoRequests"); 131 131 } 132 132 … … 135 135 "use strict"; 136 136 137 if (controller.@pendingPullIntos.length > 0) 138 controller.@pendingPullIntos[0].bytesFilled = 0; 139 controller.@queue = @newQueue(); 140 return @promiseInvokeOrNoop(controller.@underlyingByteSource, "cancel", [reason]); 137 var pendingPullIntos = @getByIdDirectPrivate(controller, "pendingPullIntos"); 138 if (pendingPullIntos.length > 0) 139 pendingPullIntos[0].bytesFilled = 0; 140 @putByIdDirectPrivate(controller, "queue", @newQueue()); 141 return @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingByteSource"), "cancel", [reason]); 141 142 } 142 143 … … 145 146 "use strict"; 146 147 147 @assert( controller.@controlledReadableStream.@state=== @streamReadable);148 @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable); 148 149 @readableByteStreamControllerClearPendingPullIntos(controller); 149 controller.@queue = @newQueue();150 @readableStreamError( controller.@controlledReadableStream, e);150 @putByIdDirectPrivate(controller, "queue", @newQueue()); 151 @readableStreamError(@getByIdDirectPrivate(controller, "controlledReadableStream"), e); 151 152 } 152 153 … … 155 156 "use strict"; 156 157 157 @assert(! controller.@closeRequested);158 @assert( controller.@controlledReadableStream.@state=== @streamReadable);159 160 if ( controller.@queue.size > 0) {161 controller.@closeRequested = true;158 @assert(!@getByIdDirectPrivate(controller, "closeRequested")); 159 @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable); 160 161 if (@getByIdDirectPrivate(controller, "queue").size > 0) { 162 @putByIdDirectPrivate(controller, "closeRequested", true); 162 163 return; 163 164 } 164 165 165 if (controller.@pendingPullIntos.length > 0) { 166 if (controller.@pendingPullIntos[0].bytesFilled > 0) { 166 var pendingPullIntos = @getByIdDirectPrivate(controller, "pendingPullIntos"); 167 if (pendingPullIntos.length > 0) { 168 if (pendingPullIntos[0].bytesFilled > 0) { 167 169 const e = new @TypeError("Close requested while there remain pending bytes"); 168 170 @readableByteStreamControllerError(controller, e); … … 171 173 } 172 174 173 @readableStreamClose( controller.@controlledReadableStream);175 @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream")); 174 176 } 175 177 … … 179 181 180 182 @readableByteStreamControllerInvalidateBYOBRequest(controller); 181 controller.@pendingPullIntos = [];183 @putByIdDirectPrivate(controller, "pendingPullIntos", []); 182 184 } 183 185 184 186 function readableByteStreamControllerGetDesiredSize(controller) 185 187 { 186 "use strict"; 187 188 const stream = controller.@controlledReadableStream; 189 190 if (stream.@state === @streamErrored) 191 return null; 192 if (stream.@state === @streamClosed) 193 return 0; 194 195 return controller.@strategyHWM - controller.@queue.size; 188 "use strict"; 189 190 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 191 const state = @getByIdDirectPrivate(stream, "state"); 192 193 if (state === @streamErrored) 194 return null; 195 if (state === @streamClosed) 196 return 0; 197 198 return @getByIdDirectPrivate(controller, "strategyHWM") - @getByIdDirectPrivate(controller, "queue").size; 196 199 } 197 200 … … 200 203 "use strict"; 201 204 202 return stream.@reader !== @undefined && @isReadableStreamBYOBReader(stream.@reader); 205 const reader = @getByIdDirectPrivate(stream, "reader"); 206 return reader !== @undefined && @isReadableStreamBYOBReader(reader); 203 207 } 204 208 … … 207 211 "use strict"; 208 212 209 return stream.@reader !== @undefined && @isReadableStreamDefaultReader(stream.@reader); 213 const reader = @getByIdDirectPrivate(stream, "reader"); 214 return reader !== @undefined && @isReadableStreamDefaultReader(reader); 210 215 } 211 216 … … 214 219 "use strict"; 215 220 216 @assert( controller.@controlledReadableStream.@state=== @streamReadable);217 if (! controller.@queue.size && controller.@closeRequested)218 @readableStreamClose( controller.@controlledReadableStream);221 @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable); 222 if (!@getByIdDirectPrivate(controller, "queue").size && @getByIdDirectPrivate(controller, "closeRequested")) 223 @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream")); 219 224 else 220 225 @readableByteStreamControllerCallPullIfNeeded(controller); … … 225 230 "use strict"; 226 231 227 const stream = controller.@controlledReadableStream;232 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 228 233 @assert(@readableStreamHasDefaultReader(stream)); 229 234 230 if ( controller.@queue.size > 0) {231 @assert( stream.@reader.@readRequests.length === 0);232 const entry = controller.@queue.content.@shift();233 controller.@queue.size -= entry.byteLength;235 if (@getByIdDirectPrivate(controller, "queue").size > 0) { 236 @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length === 0); 237 const entry = @getByIdDirectPrivate(controller, "queue").content.@shift(); 238 @getByIdDirectPrivate(controller, "queue").size -= entry.byteLength; 234 239 @readableByteStreamControllerHandleQueueDrain(controller); 235 240 let view; … … 242 247 } 243 248 244 if ( controller.@autoAllocateChunkSize!== @undefined) {249 if (@getByIdDirectPrivate(controller, "autoAllocateChunkSize") !== @undefined) { 245 250 let buffer; 246 251 try { 247 buffer = new @ArrayBuffer( controller.@autoAllocateChunkSize);252 buffer = new @ArrayBuffer(@getByIdDirectPrivate(controller, "autoAllocateChunkSize")); 248 253 } catch (error) { 249 254 return @Promise.@reject(error); … … 252 257 buffer, 253 258 byteOffset: 0, 254 byteLength: controller.@autoAllocateChunkSize,259 byteLength: @getByIdDirectPrivate(controller, "autoAllocateChunkSize"), 255 260 bytesFilled: 0, 256 261 elementSize: 1, … … 258 263 readerType: 'default' 259 264 }; 260 controller.@pendingPullIntos.@push(pullIntoDescriptor);265 @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor); 261 266 } 262 267 … … 270 275 "use strict"; 271 276 272 const stream = controller.@controlledReadableStream;273 274 if ( stream.@state!== @streamReadable)277 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 278 279 if (@getByIdDirectPrivate(stream, "state") !== @streamReadable) 275 280 return false; 276 if ( controller.@closeRequested)281 if (@getByIdDirectPrivate(controller, "closeRequested")) 277 282 return false; 278 if (! controller.@started)283 if (!@getByIdDirectPrivate(controller, "started")) 279 284 return false; 280 if (@readableStreamHasDefaultReader(stream) && stream.@reader.@readRequests.length > 0)285 if (@readableStreamHasDefaultReader(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length > 0) 281 286 return true; 282 if (@readableStreamHasBYOBReader(stream) && stream.@reader.@readIntoRequests.length > 0)287 if (@readableStreamHasBYOBReader(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").length > 0) 283 288 return true; 284 289 if (@readableByteStreamControllerGetDesiredSize(controller) > 0) … … 294 299 return; 295 300 296 if ( controller.@pulling) {297 controller.@pullAgain = true;301 if (@getByIdDirectPrivate(controller, "pulling")) { 302 @putByIdDirectPrivate(controller, "pullAgain", true); 298 303 return; 299 304 } 300 305 301 @assert(! controller.@pullAgain);302 controller.@pulling = true;303 @promiseInvokeOrNoop( controller.@underlyingByteSource, "pull", [controller]).@then(() => {304 controller.@pulling = false;305 if ( controller.@pullAgain) {306 controller.@pullAgain = false;306 @assert(!@getByIdDirectPrivate(controller, "pullAgain")); 307 @putByIdDirectPrivate(controller, "pulling", true); 308 @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingByteSource"), "pull", [controller]).@then(() => { 309 @putByIdDirectPrivate(controller, "pulling", false); 310 if (@getByIdDirectPrivate(controller, "pullAgain")) { 311 @putByIdDirectPrivate(controller, "pullAgain", false); 307 312 @readableByteStreamControllerCallPullIfNeeded(controller); 308 313 } 309 314 }, (error) => { 310 if ( controller.@controlledReadableStream.@state=== @streamReadable)315 if (@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable) 311 316 @readableByteStreamControllerError(controller, error); 312 317 }); … … 328 333 "use strict"; 329 334 330 const stream = controller.@controlledReadableStream;331 @assert(! controller.@closeRequested);332 @assert( stream.@state=== @streamReadable);335 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 336 @assert(!@getByIdDirectPrivate(controller, "closeRequested")); 337 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable); 333 338 const buffer = chunk.buffer; 334 339 const byteOffset = chunk.byteOffset; … … 337 342 338 343 if (@readableStreamHasDefaultReader(stream)) { 339 if (! stream.@reader.@readRequests.length)344 if (!@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length) 340 345 @readableByteStreamControllerEnqueueChunk(controller, transferredBuffer, byteOffset, byteLength); 341 346 else { 342 @assert(! controller.@queue.content.length);347 @assert(!@getByIdDirectPrivate(controller, "queue").content.length); 343 348 let transferredView = new @Uint8Array(transferredBuffer, byteOffset, byteLength); 344 349 @readableStreamFulfillReadRequest(stream, transferredView, false); … … 362 367 "use strict"; 363 368 364 controller.@queue.content.@push({369 @getByIdDirectPrivate(controller, "queue").content.@push({ 365 370 buffer: buffer, 366 371 byteOffset: byteOffset, 367 372 byteLength: byteLength 368 373 }); 369 controller.@queue.size += byteLength;374 @getByIdDirectPrivate(controller, "queue").size += byteLength; 370 375 } 371 376 … … 374 379 "use strict"; 375 380 376 @assert( controller.@pendingPullIntos.length > 0);377 378 let firstDescriptor = controller.@pendingPullIntos[0];381 @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0); 382 383 let firstDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0]; 379 384 380 385 if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) … … 397 402 @throwRangeError("bytesWritten has an incorrect value"); 398 403 399 @assert( controller.@pendingPullIntos.length > 0);404 @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0); 400 405 401 406 @readableByteStreamControllerRespondInternal(controller, bytesWritten); … … 406 411 "use strict"; 407 412 408 let firstDescriptor = controller.@pendingPullIntos[0];409 let stream = controller.@controlledReadableStream;410 411 if ( stream.@state=== @streamClosed) {413 let firstDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0]; 414 let stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 415 416 if (@getByIdDirectPrivate(stream, "state") === @streamClosed) { 412 417 if (bytesWritten !== 0) 413 418 @throwTypeError("bytesWritten is different from 0 even though stream is closed"); 414 419 @readableByteStreamControllerRespondInClosedState(controller, firstDescriptor); 415 420 } else { 416 @assert( stream.@state=== @streamReadable);421 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable); 417 422 @readableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); 418 423 } … … 426 431 @throwRangeError("bytesWritten value is too great"); 427 432 428 @assert( controller.@pendingPullIntos.length === 0 || controller.@pendingPullIntos[0] === pullIntoDescriptor);433 @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length === 0 || @getByIdDirectPrivate(controller, "pendingPullIntos")[0] === pullIntoDescriptor); 429 434 @readableByteStreamControllerInvalidateBYOBRequest(controller); 430 435 pullIntoDescriptor.bytesFilled += bytesWritten; … … 444 449 pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer); 445 450 pullIntoDescriptor.bytesFilled -= remainderSize; 446 @readableByteStreamControllerCommitDescriptor( controller.@controlledReadableStream, pullIntoDescriptor);451 @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor); 447 452 @readableByteStreamControllerProcessPullDescriptors(controller); 448 453 } … … 455 460 @assert(firstDescriptor.bytesFilled === 0); 456 461 457 if (@readableStreamHasBYOBReader( controller.@controlledReadableStream)) {458 while ( controller.@controlledReadableStream.@reader.@readIntoRequests.length > 0) {462 if (@readableStreamHasBYOBReader(@getByIdDirectPrivate(controller, "controlledReadableStream"))) { 463 while (@getByIdDirectPrivate(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "reader"), "readIntoRequests").length > 0) { 459 464 let pullIntoDescriptor = @readableByteStreamControllerShiftPendingDescriptor(controller); 460 @readableByteStreamControllerCommitDescriptor( controller.@controlledReadableStream, pullIntoDescriptor);465 @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor); 461 466 } 462 467 } … … 468 473 "use strict"; 469 474 470 @assert(! controller.@closeRequested);471 while ( controller.@pendingPullIntos.length > 0) {472 if ( controller.@queue.size === 0)475 @assert(!@getByIdDirectPrivate(controller, "closeRequested")); 476 while (@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0) { 477 if (@getByIdDirectPrivate(controller, "queue").size === 0) 473 478 return; 474 let pullIntoDescriptor = controller.@pendingPullIntos[0];479 let pullIntoDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0]; 475 480 if (@readableByteStreamControllerFillDescriptorFromQueue(controller, pullIntoDescriptor)) { 476 481 @readableByteStreamControllerShiftPendingDescriptor(controller); 477 @readableByteStreamControllerCommitDescriptor( controller.@controlledReadableStream, pullIntoDescriptor);482 @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor); 478 483 } 479 484 } … … 486 491 487 492 const currentAlignedBytes = pullIntoDescriptor.bytesFilled - (pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize); 488 const maxBytesToCopy = controller.@queue.size < pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled ?489 controller.@queue.size : pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled;493 const maxBytesToCopy = @getByIdDirectPrivate(controller, "queue").size < pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled ? 494 @getByIdDirectPrivate(controller, "queue").size : pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled; 490 495 const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; 491 496 const maxAlignedBytes = maxBytesFilled - (maxBytesFilled % pullIntoDescriptor.elementSize); … … 499 504 500 505 while (totalBytesToCopyRemaining > 0) { 501 let headOfQueue = controller.@queue.content[0];506 let headOfQueue = @getByIdDirectPrivate(controller, "queue").content[0]; 502 507 const bytesToCopy = totalBytesToCopyRemaining < headOfQueue.byteLength ? totalBytesToCopyRemaining : headOfQueue.byteLength; 503 508 // Copy appropriate part of pullIntoDescriptor.buffer to headOfQueue.buffer. … … 510 515 511 516 if (headOfQueue.byteLength === bytesToCopy) 512 controller.@queue.content.@shift();517 @getByIdDirectPrivate(controller, "queue").content.@shift(); 513 518 else { 514 519 headOfQueue.byteOffset += bytesToCopy; … … 516 521 } 517 522 518 controller.@queue.size -= bytesToCopy;519 @assert( controller.@pendingPullIntos.length === 0 || controller.@pendingPullIntos[0] === pullIntoDescriptor);523 @getByIdDirectPrivate(controller, "queue").size -= bytesToCopy; 524 @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length === 0 || @getByIdDirectPrivate(controller, "pendingPullIntos")[0] === pullIntoDescriptor); 520 525 @readableByteStreamControllerInvalidateBYOBRequest(controller); 521 526 pullIntoDescriptor.bytesFilled += bytesToCopy; … … 524 529 525 530 if (!ready) { 526 @assert( controller.@queue.size === 0);531 @assert(@getByIdDirectPrivate(controller, "queue").size === 0); 527 532 @assert(pullIntoDescriptor.bytesFilled > 0); 528 533 @assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize); … … 537 542 "use strict"; 538 543 539 let descriptor = controller.@pendingPullIntos.@shift();544 let descriptor = @getByIdDirectPrivate(controller, "pendingPullIntos").@shift(); 540 545 @readableByteStreamControllerInvalidateBYOBRequest(controller); 541 546 return descriptor; … … 546 551 "use strict"; 547 552 548 if ( controller.@byobRequest=== @undefined)553 if (@getByIdDirectPrivate(controller, "byobRequest") === @undefined) 549 554 return; 550 controller.@byobRequest.@associatedReadableByteStreamController = @undefined; 551 controller.@byobRequest.@view = @undefined; 552 controller.@byobRequest = @undefined; 555 const byobRequest = @getByIdDirectPrivate(controller, "byobRequest"); 556 @putByIdDirectPrivate(byobRequest, "associatedReadableByteStreamController", @undefined); 557 @putByIdDirectPrivate(byobRequest, "view", @undefined); 558 @putByIdDirectPrivate(controller, "byobRequest", @undefined); 553 559 } 554 560 … … 558 564 "use strict"; 559 565 560 @assert( stream.@state!== @streamErrored);566 @assert(@getByIdDirectPrivate(stream, "state") !== @streamErrored); 561 567 let done = false; 562 if ( stream.@state=== @streamClosed) {568 if (@getByIdDirectPrivate(stream, "state") === @streamClosed) { 563 569 @assert(!pullIntoDescriptor.bytesFilled); 564 570 done = true; … … 588 594 "use strict"; 589 595 590 stream.@reader.@readIntoRequests.@shift().@resolve.@call(@undefined, {value: chunk, done: done});596 @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").@shift().@resolve.@call(@undefined, {value: chunk, done: done}); 591 597 } 592 598 … … 595 601 "use strict"; 596 602 597 const stream = reader.@ownerReadableStream;603 const stream = @getByIdDirectPrivate(reader, "ownerReadableStream"); 598 604 @assert(!!stream); 599 605 600 stream.@disturbed = true;601 if ( stream.@state=== @streamErrored)602 return @Promise.@reject( stream.@storedError);603 604 return @readableByteStreamControllerPullInto( stream.@readableStreamController, view);606 @putByIdDirectPrivate(stream, "disturbed", true); 607 if (@getByIdDirectPrivate(stream, "state") === @streamErrored) 608 return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError")); 609 610 return @readableByteStreamControllerPullInto(@getByIdDirectPrivate(stream, "readableStreamController"), view); 605 611 } 606 612 … … 609 615 "use strict"; 610 616 611 const stream = controller.@controlledReadableStream;617 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 612 618 let elementSize = 1; 613 619 // Spec describes that in the case where view is a TypedArray, elementSize … … 642 648 }; 643 649 644 if ( controller.@pendingPullIntos.length) {650 if (@getByIdDirectPrivate(controller, "pendingPullIntos").length) { 645 651 pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer); 646 controller.@pendingPullIntos.@push(pullIntoDescriptor);652 @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor); 647 653 return @readableStreamAddReadIntoRequest(stream); 648 654 } 649 655 650 if ( stream.@state=== @streamClosed) {656 if (@getByIdDirectPrivate(stream, "state") === @streamClosed) { 651 657 const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); 652 658 return @Promise.@resolve({ value: emptyView, done: true }); 653 659 } 654 660 655 if ( controller.@queue.size > 0) {661 if (@getByIdDirectPrivate(controller, "queue").size > 0) { 656 662 if (@readableByteStreamControllerFillDescriptorFromQueue(controller, pullIntoDescriptor)) { 657 663 const filledView = @readableByteStreamControllerConvertDescriptor(pullIntoDescriptor); … … 659 665 return @Promise.@resolve({ value: filledView, done: false }); 660 666 } 661 if ( controller.@closeRequested) {667 if (@getByIdDirectPrivate(controller, "closeRequested")) { 662 668 const e = new @TypeError("Closing stream has been requested"); 663 669 @readableByteStreamControllerError(controller, e); … … 667 673 668 674 pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer); 669 controller.@pendingPullIntos.@push(pullIntoDescriptor);675 @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor); 670 676 const promise = @readableStreamAddReadIntoRequest(stream); 671 677 @readableByteStreamControllerCallPullIfNeeded(controller); … … 677 683 "use strict"; 678 684 679 @assert(@isReadableStreamBYOBReader( stream.@reader));680 @assert( stream.@state === @streamReadable || stream.@state=== @streamClosed);685 @assert(@isReadableStreamBYOBReader(@getByIdDirectPrivate(stream, "reader"))); 686 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable || @getByIdDirectPrivate(stream, "state") === @streamClosed); 681 687 682 688 const readRequest = @newPromiseCapability(@Promise); 683 stream.@reader.@readIntoRequests.@push(readRequest);689 @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").@push(readRequest); 684 690 685 691 return readRequest.@promise; -
trunk/Source/WebCore/Modules/streams/ReadableStream.js
r225784 r230637 42 42 @throwTypeError("ReadableStream constructor takes an object as second argument, if any"); 43 43 44 this.@state = @streamReadable;45 this.@reader = @undefined;46 this.@storedError = @undefined;47 this.@disturbed = false;44 @putByIdDirectPrivate(this, "state", @streamReadable); 45 @putByIdDirectPrivate(this, "reader", @undefined); 46 @putByIdDirectPrivate(this, "storedError", @undefined); 47 @putByIdDirectPrivate(this, "disturbed", false); 48 48 // Initialized with null value to enable distinction with undefined case. 49 this.@readableStreamController = null;49 @putByIdDirectPrivate(this, "readableStreamController", null); 50 50 51 51 const type = underlyingSource.type; 52 const typeString = @ String(type);52 const typeString = @toString(type); 53 53 54 54 if (typeString === "bytes") { … … 62 62 63 63 let readableByteStreamControllerConstructor = @ReadableByteStreamController; 64 this.@readableStreamController = new @ReadableByteStreamController(this, underlyingSource, strategy.highWaterMark);64 @putByIdDirectPrivate(this, "readableStreamController", new @ReadableByteStreamController(this, underlyingSource, strategy.highWaterMark)); 65 65 } else if (type === @undefined) { 66 66 if (strategy.highWaterMark === @undefined) 67 67 strategy.highWaterMark = 1; 68 this.@readableStreamController = new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark);68 @putByIdDirectPrivate(this, "readableStreamController", new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark)); 69 69 } else 70 70 @throwRangeError("Invalid type for underlying source"); … … 114 114 const promise = this.pipeTo(writable, options); 115 115 if (@isPromise(promise)) 116 promise.@promiseIsHandled = true;116 @putByIdDirectPrivate(promise, "promiseIsHandled", true); 117 117 return readable; 118 118 } -
trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js
r221417 r230637 32 32 return @Promise.@reject(@makeThisTypeError("ReadableStreamBYOBReader", "cancel")); 33 33 34 if (! this.@ownerReadableStream)34 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 35 35 return @Promise.@reject(new @TypeError("cancel() called on a reader owned by no readable stream")); 36 36 … … 45 45 return @Promise.@reject(@makeThisTypeError("ReadableStreamBYOBReader", "read")); 46 46 47 if (! this.@ownerReadableStream)47 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 48 48 return @Promise.@reject(new @TypeError("read() called on a reader owned by no readable stream")); 49 49 … … 67 67 throw @makeThisTypeError("ReadableStreamBYOBReader", "releaseLock"); 68 68 69 if (! this.@ownerReadableStream)69 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 70 70 return; 71 71 72 if ( this.@readIntoRequests.length)72 if (@getByIdDirectPrivate(this, "readIntoRequests").length) 73 73 @throwTypeError("There are still pending read requests, cannot release the lock"); 74 74 … … 84 84 return @Promise.@reject(@makeGetterTypeError("ReadableStreamBYOBReader", "closed")); 85 85 86 return this.@closedPromiseCapability.@promise;86 return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise; 87 87 } -
trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBRequest.js
r221417 r230637 33 33 throw @makeThisTypeError("ReadableStreamBYOBRequest", "respond"); 34 34 35 if ( this.@associatedReadableByteStreamController=== @undefined)35 if (@getByIdDirectPrivate(this, "associatedReadableByteStreamController") === @undefined) 36 36 @throwTypeError("ReadableStreamBYOBRequest.associatedReadableByteStreamController is undefined"); 37 37 38 return @readableByteStreamControllerRespond( this.@associatedReadableByteStreamController, bytesWritten);38 return @readableByteStreamControllerRespond(@getByIdDirectPrivate(this, "associatedReadableByteStreamController"), bytesWritten); 39 39 } 40 40 … … 46 46 throw @makeThisTypeError("ReadableStreamBYOBRequest", "respond"); 47 47 48 if ( this.@associatedReadableByteStreamController=== @undefined)48 if (@getByIdDirectPrivate(this, "associatedReadableByteStreamController") === @undefined) 49 49 @throwTypeError("ReadableStreamBYOBRequest.associatedReadableByteStreamController is undefined"); 50 50 … … 55 55 @throwTypeError("Provided view is not an ArrayBufferView"); 56 56 57 return @readableByteStreamControllerRespondWithNewView( this.@associatedReadableByteStreamController, view);57 return @readableByteStreamControllerRespondWithNewView(@getByIdDirectPrivate(this, "associatedReadableByteStreamController"), view); 58 58 } 59 59 … … 66 66 throw @makeGetterTypeError("ReadableStreamBYOBRequest", "view"); 67 67 68 return this.@view;68 return @getByIdDirectPrivate(this, "view"); 69 69 } -
trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js
r223044 r230637 46 46 throw @makeThisTypeError("ReadableStreamDefaultController", "error"); 47 47 48 if ( this.@controlledReadableStream.@state!== @streamReadable)48 if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable) 49 49 @throwTypeError("ReadableStream is not readable"); 50 50 -
trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js
r221417 r230637 33 33 return @Promise.@reject(@makeThisTypeError("ReadableStreamDefaultReader", "cancel")); 34 34 35 if (! this.@ownerReadableStream)35 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 36 36 return @Promise.@reject(new @TypeError("cancel() called on a reader owned by no readable stream")); 37 37 … … 45 45 if (!@isReadableStreamDefaultReader(this)) 46 46 return @Promise.@reject(@makeThisTypeError("ReadableStreamDefaultReader", "read")); 47 if (! this.@ownerReadableStream)47 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 48 48 return @Promise.@reject(new @TypeError("read() called on a reader owned by no readable stream")); 49 49 … … 58 58 throw @makeThisTypeError("ReadableStreamDefaultReader", "releaseLock"); 59 59 60 if (! this.@ownerReadableStream)60 if (!@getByIdDirectPrivate(this, "ownerReadableStream")) 61 61 return; 62 62 63 if ( this.@readRequests.length)63 if (@getByIdDirectPrivate(this, "readRequests").length) 64 64 @throwTypeError("There are still pending read requests, cannot release the lock"); 65 65 … … 75 75 return @Promise.@reject(@makeGetterTypeError("ReadableStreamDefaultReader", "closed")); 76 76 77 return this.@closedPromiseCapability.@promise;77 return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise; 78 78 } -
trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js
r223044 r230637 38 38 39 39 @readableStreamReaderGenericInitialize(this, stream); 40 this.@readRequests = [];40 @putByIdDirectPrivate(this, "readRequests", []); 41 41 42 42 return this; … … 47 47 "use strict"; 48 48 49 reader.@ownerReadableStream = stream;50 stream.@reader = reader;51 if ( stream.@state=== @streamReadable)52 reader.@closedPromiseCapability = @newPromiseCapability(@Promise);53 else if ( stream.@state=== @streamClosed)54 reader.@closedPromiseCapability = { @promise: @Promise.@resolve() };49 @putByIdDirectPrivate(reader, "ownerReadableStream", stream); 50 @putByIdDirectPrivate(stream, "reader", reader); 51 if (@getByIdDirectPrivate(stream, "state") === @streamReadable) 52 @putByIdDirectPrivate(reader, "closedPromiseCapability", @newPromiseCapability(@Promise)); 53 else if (@getByIdDirectPrivate(stream, "state") === @streamClosed) 54 @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @Promise.@resolve() }); 55 55 else { 56 @assert( stream.@state=== @streamErrored);57 reader.@closedPromiseCapability = { @promise: @newHandledRejectedPromise(stream.@storedError) };56 @assert(@getByIdDirectPrivate(stream, "state") === @streamErrored); 57 @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @newHandledRejectedPromise(@getByIdDirectPrivate(stream, "storedError")) }); 58 58 } 59 59 } … … 67 67 68 68 // readableStreamController is initialized with null value. 69 if ( stream.@readableStreamController!== null)69 if (@getByIdDirectPrivate(stream, "readableStreamController") !== null) 70 70 @throwTypeError("ReadableStream already has a controller"); 71 71 72 this.@controlledReadableStream = stream;73 this.@underlyingSource = underlyingSource;74 this.@queue = @newQueue();75 this.@started = false;76 this.@closeRequested = false;77 this.@pullAgain = false;78 this.@pulling = false;79 this.@strategy = @validateAndNormalizeQueuingStrategy(size, highWaterMark);72 @putByIdDirectPrivate(this, "controlledReadableStream", stream); 73 @putByIdDirectPrivate(this, "underlyingSource", underlyingSource); 74 @putByIdDirectPrivate(this, "queue", @newQueue()); 75 @putByIdDirectPrivate(this, "started", false); 76 @putByIdDirectPrivate(this, "closeRequested", false); 77 @putByIdDirectPrivate(this, "pullAgain", false); 78 @putByIdDirectPrivate(this, "pulling", false); 79 @putByIdDirectPrivate(this, "strategy", @validateAndNormalizeQueuingStrategy(size, highWaterMark)); 80 80 81 81 const controller = this; 82 82 @promiseInvokeOrNoopNoCatch(underlyingSource, "start", [this]).@then(() => { 83 controller.@started = true;84 @assert(! controller.@pulling);85 @assert(! controller.@pullAgain);83 @putByIdDirectPrivate(controller, "started", true); 84 @assert(!@getByIdDirectPrivate(controller, "pulling")); 85 @assert(!@getByIdDirectPrivate(controller, "pullAgain")); 86 86 @readableStreamDefaultControllerCallPullIfNeeded(controller); 87 87 }, (error) => { 88 if ( stream.@state=== @streamReadable)88 if (@getByIdDirectPrivate(stream, "state") === @streamReadable) 89 89 @readableStreamDefaultControllerError(controller, error); 90 90 }); 91 91 92 this.@cancel = @readableStreamDefaultControllerCancel;93 94 this.@pull = @readableStreamDefaultControllerPull;92 @putByIdDirectPrivate(this, "cancel", @readableStreamDefaultControllerCancel); 93 94 @putByIdDirectPrivate(this, "pull", @readableStreamDefaultControllerPull); 95 95 96 96 return this; … … 101 101 "use strict"; 102 102 103 const stream = controller.@controlledReadableStream;104 @assert( stream.@state=== @streamReadable);105 controller.@queue = @newQueue();103 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 104 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable); 105 @putByIdDirectPrivate(controller, "queue", @newQueue()); 106 106 @readableStreamError(stream, error); 107 107 } … … 114 114 const reader = new @ReadableStreamDefaultReader(stream); 115 115 116 reader.@closedPromiseCapability.@promise.@then(() => { }, (e) => { sink.error(e); });116 @getByIdDirectPrivate(reader, "closedPromiseCapability").@promise.@then(() => { }, (e) => { sink.error(e); }); 117 117 118 118 function doPipe() { … … 164 164 }); 165 165 166 reader.@closedPromiseCapability.@promise.@then(@undefined, function(e) {166 @getByIdDirectPrivate(reader, "closedPromiseCapability").@promise.@then(@undefined, function(e) { 167 167 if (teeState.closedOrErrored) 168 168 return; … … 259 259 // However, since it is a private slot, it cannot be checked using hasOwnProperty(). 260 260 // Therefore, readableStreamController is initialized with null value. 261 return @isObject(stream) && stream.@readableStreamController!== @undefined;261 return @isObject(stream) && @getByIdDirectPrivate(stream, "readableStreamController") !== @undefined; 262 262 } 263 263 … … 269 269 // However, since it is a private slot, it cannot be checked using hasOwnProperty(). 270 270 // Since readRequests is initialized with an empty array, the following test is ok. 271 return @isObject(reader) && !! reader.@readRequests;271 return @isObject(reader) && !!@getByIdDirectPrivate(reader, "readRequests"); 272 272 } 273 273 … … 280 280 // underlyingSource is obtained in ReadableStream constructor: if undefined, it is set 281 281 // to an empty object. Therefore, following test is ok. 282 return @isObject(controller) && !! controller.@underlyingSource;282 return @isObject(controller) && !!@getByIdDirectPrivate(controller, "underlyingSource"); 283 283 } 284 284 … … 288 288 289 289 @assert(@isReadableStream(stream)); 290 @assert( stream.@state=== @streamReadable);291 stream.@state = @streamErrored;292 stream.@storedError = error;293 294 if (! stream.@reader)295 return; 296 297 const reader = stream.@reader;290 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable); 291 @putByIdDirectPrivate(stream, "state", @streamErrored); 292 @putByIdDirectPrivate(stream, "storedError", error); 293 294 if (!@getByIdDirectPrivate(stream, "reader")) 295 return; 296 297 const reader = @getByIdDirectPrivate(stream, "reader"); 298 298 299 299 if (@isReadableStreamDefaultReader(reader)) { 300 const requests = reader.@readRequests;300 const requests = @getByIdDirectPrivate(reader, "readRequests"); 301 301 for (let index = 0, length = requests.length; index < length; ++index) 302 302 requests[index].@reject.@call(@undefined, error); 303 reader.@readRequests = [];303 @putByIdDirectPrivate(reader, "readRequests", []); 304 304 } else { 305 305 @assert(@isReadableStreamBYOBReader(reader)); 306 const requests = reader.@readIntoRequests;306 const requests = @getByIdDirectPrivate(reader, "readIntoRequests"); 307 307 for (let index = 0, length = requests.length; index < length; ++index) 308 308 requests[index].@reject.@call(@undefined, error); 309 reader.@readIntoRequests = [];310 } 311 312 reader.@closedPromiseCapability.@reject.@call(@undefined, error);313 reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;309 @putByIdDirectPrivate(reader, "readIntoRequests", []); 310 } 311 312 @getByIdDirectPrivate(reader, "closedPromiseCapability").@reject.@call(@undefined, error); 313 @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "closedPromiseCapability").@promise, "promiseIsHandled", true); 314 314 } 315 315 … … 318 318 "use strict"; 319 319 320 const stream = controller.@controlledReadableStream;320 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 321 321 322 322 if (!@readableStreamDefaultControllerCanCloseOrEnqueue(controller)) 323 323 return; 324 if (! controller.@started)325 return; 326 if ((!@isReadableStreamLocked(stream) || ! stream.@reader.@readRequests.length) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0)327 return; 328 329 if ( controller.@pulling) {330 controller.@pullAgain = true;331 return; 332 } 333 334 @assert(! controller.@pullAgain);335 controller.@pulling = true;336 337 @promiseInvokeOrNoop( controller.@underlyingSource, "pull", [controller]).@then(function() {338 controller.@pulling = false;339 if ( controller.@pullAgain) {340 controller.@pullAgain = false;324 if (!@getByIdDirectPrivate(controller, "started")) 325 return; 326 if ((!@isReadableStreamLocked(stream) || !@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0) 327 return; 328 329 if (@getByIdDirectPrivate(controller, "pulling")) { 330 @putByIdDirectPrivate(controller, "pullAgain", true); 331 return; 332 } 333 334 @assert(!@getByIdDirectPrivate(controller, "pullAgain")); 335 @putByIdDirectPrivate(controller, "pulling", true); 336 337 @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingSource"), "pull", [controller]).@then(function() { 338 @putByIdDirectPrivate(controller, "pulling", false); 339 if (@getByIdDirectPrivate(controller, "pullAgain")) { 340 @putByIdDirectPrivate(controller, "pullAgain", false); 341 341 @readableStreamDefaultControllerCallPullIfNeeded(controller); 342 342 } 343 343 }, function(error) { 344 if ( stream.@state=== @streamReadable)344 if (@getByIdDirectPrivate(stream, "state") === @streamReadable) 345 345 @readableStreamDefaultControllerError(controller, error); 346 346 }); … … 352 352 353 353 @assert(@isReadableStream(stream)); 354 return !! stream.@reader;354 return !!@getByIdDirectPrivate(stream, "reader"); 355 355 } 356 356 … … 359 359 "use strict"; 360 360 361 const stream = controller.@controlledReadableStream; 362 363 if (stream.@state === @streamErrored) 364 return null; 365 if (stream.@state === @streamClosed) 366 return 0; 367 368 return controller.@strategy.highWaterMark - controller.@queue.size; 361 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 362 const state = @getByIdDirectPrivate(stream, "state"); 363 364 if (state === @streamErrored) 365 return null; 366 if (state === @streamClosed) 367 return 0; 368 369 return @getByIdDirectPrivate(controller, "strategy").highWaterMark - @getByIdDirectPrivate(controller, "queue").size; 369 370 } 370 371 … … 374 375 "use strict"; 375 376 376 const stream = reader.@ownerReadableStream;377 const stream = @getByIdDirectPrivate(reader, "ownerReadableStream"); 377 378 @assert(!!stream); 378 379 return @readableStreamCancel(stream, reason); … … 383 384 "use strict"; 384 385 385 stream.@disturbed = true; 386 if (stream.@state === @streamClosed) 386 @putByIdDirectPrivate(stream, "disturbed", true); 387 const state = @getByIdDirectPrivate(stream, "state"); 388 if (state === @streamClosed) 387 389 return @Promise.@resolve(); 388 if (st ream.@state === @streamErrored)389 return @Promise.@reject( stream.@storedError);390 if (state === @streamErrored) 391 return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError")); 390 392 @readableStreamClose(stream); 391 return stream.@readableStreamController.@cancel(stream.@readableStreamController, reason).@then(function() { });393 return @getByIdDirectPrivate(stream, "readableStreamController").@cancel(@getByIdDirectPrivate(stream, "readableStreamController"), reason).@then(function() { }); 392 394 } 393 395 … … 396 398 "use strict"; 397 399 398 controller.@queue = @newQueue();399 return @promiseInvokeOrNoop( controller.@underlyingSource, "cancel", [reason]);400 @putByIdDirectPrivate(controller, "queue", @newQueue()); 401 return @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingSource"), "cancel", [reason]); 400 402 } 401 403 … … 404 406 "use strict"; 405 407 406 const stream = controller.@controlledReadableStream;407 if ( controller.@queue.content.length) {408 const chunk = @dequeueValue( controller.@queue);409 if ( controller.@closeRequested && controller.@queue.content.length === 0)408 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 409 if (@getByIdDirectPrivate(controller, "queue").content.length) { 410 const chunk = @dequeueValue(@getByIdDirectPrivate(controller, "queue")); 411 if (@getByIdDirectPrivate(controller, "closeRequested") && @getByIdDirectPrivate(controller, "queue").content.length === 0) 410 412 @readableStreamClose(stream); 411 413 else … … 423 425 424 426 @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller)); 425 controller.@closeRequested = true;426 if ( controller.@queue.content.length === 0)427 @readableStreamClose( controller.@controlledReadableStream);427 @putByIdDirectPrivate(controller, "closeRequested", true); 428 if (@getByIdDirectPrivate(controller, "queue").content.length === 0) 429 @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream")); 428 430 } 429 431 … … 432 434 "use strict"; 433 435 434 @assert( stream.@state=== @streamReadable);435 stream.@state = @streamClosed;436 const reader = stream.@reader;436 @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable); 437 @putByIdDirectPrivate(stream, "state", @streamClosed); 438 const reader = @getByIdDirectPrivate(stream, "reader"); 437 439 438 440 if (!reader) … … 440 442 441 443 if (@isReadableStreamDefaultReader(reader)) { 442 const requests = reader.@readRequests;444 const requests = @getByIdDirectPrivate(reader, "readRequests"); 443 445 for (let index = 0, length = requests.length; index < length; ++index) 444 446 requests[index].@resolve.@call(@undefined, {value:@undefined, done: true}); 445 reader.@readRequests = [];446 } 447 448 reader.@closedPromiseCapability.@resolve.@call();447 @putByIdDirectPrivate(reader, "readRequests", []); 448 } 449 450 @getByIdDirectPrivate(reader, "closedPromiseCapability").@resolve.@call(); 449 451 } 450 452 … … 453 455 "use strict"; 454 456 455 stream.@reader.@readRequests.@shift().@resolve.@call(@undefined, {value: chunk, done: done});457 @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").@shift().@resolve.@call(@undefined, {value: chunk, done: done}); 456 458 } 457 459 … … 460 462 "use strict"; 461 463 462 const stream = controller.@controlledReadableStream;464 const stream = @getByIdDirectPrivate(controller, "controlledReadableStream"); 463 465 @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller)); 464 466 465 if (@isReadableStreamLocked(stream) && stream.@reader.@readRequests.length) {467 if (@isReadableStreamLocked(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length) { 466 468 @readableStreamFulfillReadRequest(stream, chunk, false); 467 469 @readableStreamDefaultControllerCallPullIfNeeded(controller); … … 471 473 try { 472 474 let chunkSize = 1; 473 if ( controller.@strategy.size !== @undefined)474 chunkSize = controller.@strategy.size(chunk);475 @enqueueValueWithSize( controller.@queue, chunk, chunkSize);475 if (@getByIdDirectPrivate(controller, "strategy").size !== @undefined) 476 chunkSize = @getByIdDirectPrivate(controller, "strategy").size(chunk); 477 @enqueueValueWithSize(@getByIdDirectPrivate(controller, "queue"), chunk, chunkSize); 476 478 } 477 479 catch(error) { 478 if ( stream.@state=== @streamReadable)480 if (@getByIdDirectPrivate(stream, "state") === @streamReadable) 479 481 @readableStreamDefaultControllerError(controller, error); 480 482 throw error; … … 487 489 "use strict"; 488 490 489 const stream = reader.@ownerReadableStream;491 const stream = @getByIdDirectPrivate(reader, "ownerReadableStream"); 490 492 @assert(!!stream); 491 492 stream.@disturbed = true; 493 if (stream.@state === @streamClosed) 493 const state = @getByIdDirectPrivate(stream, "state"); 494 495 @putByIdDirectPrivate(stream, "disturbed", true); 496 if (state === @streamClosed) 494 497 return @Promise.@resolve({value: @undefined, done: true}); 495 if (st ream.@state === @streamErrored)496 return @Promise.@reject( stream.@storedError);497 @assert(st ream.@state === @streamReadable);498 499 return stream.@readableStreamController.@pull(stream.@readableStreamController);498 if (state === @streamErrored) 499 return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError")); 500 @assert(state === @streamReadable); 501 502 return @getByIdDirectPrivate(stream, "readableStreamController").@pull(@getByIdDirectPrivate(stream, "readableStreamController")); 500 503 } 501 504 … … 504 507 "use strict"; 505 508 506 @assert(@isReadableStreamDefaultReader( stream.@reader));507 @assert( stream.@state== @streamReadable);509 @assert(@isReadableStreamDefaultReader(@getByIdDirectPrivate(stream, "reader"))); 510 @assert(@getByIdDirectPrivate(stream, "state") == @streamReadable); 508 511 509 512 const readRequest = @newPromiseCapability(@Promise); 510 stream.@reader.@readRequests.@push(readRequest);513 @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").@push(readRequest); 511 514 512 515 return readRequest.@promise; … … 518 521 519 522 @assert(@isReadableStream(stream)); 520 return stream.@disturbed;523 return @getByIdDirectPrivate(stream, "disturbed"); 521 524 } 522 525 … … 525 528 "use strict"; 526 529 527 @assert(!! reader.@ownerReadableStream);528 @assert( reader.@ownerReadableStream.@reader=== reader);529 530 if ( reader.@ownerReadableStream.@state=== @streamReadable)531 reader.@closedPromiseCapability.@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));530 @assert(!!@getByIdDirectPrivate(reader, "ownerReadableStream")); 531 @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "reader") === reader); 532 533 if (@getByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "state") === @streamReadable) 534 @getByIdDirectPrivate(reader, "closedPromiseCapability").@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state")); 532 535 else 533 reader.@closedPromiseCapability = { @promise: @newHandledRejectedPromise(new @TypeError("reader released lock")) };534 535 reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;536 reader.@ownerReadableStream.@reader = @undefined;537 reader.@ownerReadableStream = @undefined;536 @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @newHandledRejectedPromise(new @TypeError("reader released lock")) }); 537 538 @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "closedPromiseCapability").@promise, "promiseIsHandled", true); 539 @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "reader", @undefined); 540 @putByIdDirectPrivate(reader, "ownerReadableStream", @undefined); 538 541 } 539 542 … … 542 545 "use strict"; 543 546 544 return ! controller.@closeRequested && controller.@controlledReadableStream.@state=== @streamReadable;545 } 547 return !@getByIdDirectPrivate(controller, "closeRequested") && @getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable; 548 } -
trunk/Source/WebCore/Modules/streams/StreamInternals.js
r223279 r230637 82 82 @throwTypeError("size parameter must be a function"); 83 83 84 const normalizedStrategy = { };85 86 normalizedStrategy.size = size;87 normalizedStrategy.highWaterMark = @toNumber(highWaterMark);84 const normalizedStrategy = { 85 size: size, 86 highWaterMark: @toNumber(highWaterMark) 87 }; 88 88 89 89 if (@isNaN(normalizedStrategy.highWaterMark) || normalizedStrategy.highWaterMark < 0) -
trunk/Source/WebCore/Modules/streams/WritableStream.js
r221417 r230637 42 42 @throwTypeError("WritableStream constructor takes an object as second argument, if any"); 43 43 44 this.@underlyingSink = underlyingSink;45 this.@closedPromiseCapability = @newPromiseCapability(@Promise);46 this.@readyPromiseCapability = { @promise: @Promise.@resolve() };47 this.@queue = @newQueue();48 this.@state = @streamWritable;49 this.@started = false;50 this.@writing = false;44 @putByIdDirectPrivate(this, "underlyingSink", underlyingSink); 45 @putByIdDirectPrivate(this, "closedPromiseCapability", @newPromiseCapability(@Promise)); 46 @putByIdDirectPrivate(this, "readyPromiseCapability", { @promise: @Promise.@resolve() }); 47 @putByIdDirectPrivate(this, "queue", @newQueue()); 48 @putByIdDirectPrivate(this, "state", @streamWritable); 49 @putByIdDirectPrivate(this, "started", false); 50 @putByIdDirectPrivate(this, "writing", false); 51 51 52 this.@strategy = @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark);52 @putByIdDirectPrivate(this, "strategy", @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark)); 53 53 54 54 @syncWritableStreamStateWithQueue(this); … … 57 57 @errorWritableStream(this, e); 58 58 }; 59 this.@startedPromise = @promiseInvokeOrNoopNoCatch(underlyingSink, "start", [errorFunction]);60 this.@startedPromise.@then(() => {61 this.@started = true;62 this.@startedPromise = @undefined;59 @putByIdDirectPrivate(this, "startedPromise", @promiseInvokeOrNoopNoCatch(underlyingSink, "start", [errorFunction])); 60 @getByIdDirectPrivate(this, "startedPromise").@then(() => { 61 @putByIdDirectPrivate(this, "started", true); 62 @putByIdDirectPrivate(this, "startedPromise", @undefined); 63 63 }, errorFunction); 64 64 … … 73 73 return @Promise.@reject(new @TypeError("The WritableStream.abort method can only be used on instances of WritableStream")); 74 74 75 if (this.@state === @streamClosed) 75 const state = @getByIdDirectPrivate(this, "state"); 76 if (state === @streamClosed) 76 77 return @Promise.@resolve(); 77 78 78 if ( this.@state === @streamErrored)79 return @Promise.@reject( this.@storedError);79 if (state === @streamErrored) 80 return @Promise.@reject(@getByIdDirectPrivate(this, "storedError")); 80 81 81 82 @errorWritableStream(this, reason); 82 83 83 return @promiseInvokeOrFallbackOrNoop( this.@underlyingSink, "abort", [reason], "close", []).@then(function() { });84 return @promiseInvokeOrFallbackOrNoop(@getByIdDirectPrivate(this, "underlyingSink"), "abort", [reason], "close", []).@then(function() { }); 84 85 } 85 86 … … 91 92 return @Promise.@reject(new @TypeError("The WritableStream.close method can only be used on instances of WritableStream")); 92 93 93 if (this.@state === @streamClosed || this.@state === @streamClosing) 94 const state = @getByIdDirectPrivate(this, "state"); 95 if (state === @streamClosed || state === @streamClosing) 94 96 return @Promise.@reject(new @TypeError("Cannot close a WritableString that is closed or closing")); 95 97 96 if ( this.@state === @streamErrored)97 return @Promise.@reject( this.@storedError);98 if (state === @streamErrored) 99 return @Promise.@reject(@getByIdDirectPrivate(this, "storedError")); 98 100 99 if ( this.@state === @streamWaiting)100 this.@readyPromiseCapability.@resolve.@call();101 if (state === @streamWaiting) 102 @getByIdDirectPrivate(this, "readyPromiseCapability").@resolve.@call(); 101 103 102 this.@state = @streamClosing;103 @enqueueValueWithSize( this.@queue, "close", 0);104 @putByIdDirectPrivate(this, "state", @streamClosing); 105 @enqueueValueWithSize(@getByIdDirectPrivate(this, "queue"), "close", 0); 104 106 @callOrScheduleWritableStreamAdvanceQueue(this); 105 107 106 return this.@closedPromiseCapability.@promise;108 return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise; 107 109 } 108 110 … … 114 116 return @Promise.@reject(new @TypeError("The WritableStream.write method can only be used on instances of WritableStream")); 115 117 116 if (this.@state === @streamClosed || this.@state === @streamClosing) 118 const state = @getByIdDirectPrivate(this, "state"); 119 if (state === @streamClosed || state === @streamClosing) 117 120 return @Promise.@reject(new @TypeError("Cannot write on a WritableString that is closed or closing")); 118 121 119 if ( this.@state === @streamErrored)122 if (state === @streamErrored) 120 123 return @Promise.@reject(this.@storedError); 121 124 122 @assert( this.@state === @streamWritable || this.@state === @streamWaiting);125 @assert(state === @streamWritable || state === @streamWaiting); 123 126 124 127 let chunkSize = 1; 125 if ( this.@strategy.size !== @undefined) {128 if (@getByIdDirectPrivate(this, "strategy").size !== @undefined) { 126 129 try { 127 chunkSize = this.@strategy.size.@call(@undefined, chunk);130 chunkSize = @getByIdDirectPrivate(this, "strategy").size.@call(@undefined, chunk); 128 131 } catch(e) { 129 132 @errorWritableStream(this, e); … … 134 137 const promiseCapability = @newPromiseCapability(@Promise); 135 138 try { 136 @enqueueValueWithSize( this.@queue, { promiseCapability: promiseCapability, chunk: chunk }, chunkSize);139 @enqueueValueWithSize(@getByIdDirectPrivate(this, "queue"), { promiseCapability: promiseCapability, chunk: chunk }, chunkSize); 137 140 } catch (e) { 138 141 @errorWritableStream(this, e); … … 154 157 return @Promise.@reject(new @TypeError("The WritableStream.closed getter can only be used on instances of WritableStream")); 155 158 156 return this.@closedPromiseCapability.@promise;159 return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise; 157 160 } 158 161 … … 165 168 return @Promise.@reject(new @TypeError("The WritableStream.ready getter can only be used on instances of WritableStream")); 166 169 167 return this.@readyPromiseCapability.@promise;170 return @getByIdDirectPrivate(this, "readyPromiseCapability").@promise; 168 171 } 169 172 … … 176 179 @throwTypeError("The WritableStream.state getter can only be used on instances of WritableStream"); 177 180 178 switch( this.@state) {181 switch(@getByIdDirectPrivate(this, "state")) { 179 182 case @streamClosed: 180 183 return "closed"; -
trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js
r220279 r230637 32 32 "use strict"; 33 33 34 return @isObject(stream) && !! stream.@underlyingSink;34 return @isObject(stream) && !!@getByIdDirectPrivate(stream, "underlyingSink"); 35 35 } 36 36 … … 39 39 "use strict"; 40 40 41 if (stream.@state === @streamClosing) 41 const state = @getByIdDirectPrivate(stream, "state"); 42 if (state === @streamClosing) 42 43 return; 43 44 44 @assert(st ream.@state === @streamWritable || stream.@state === @streamWaiting);45 @assert(state === @streamWritable || state === @streamWaiting); 45 46 46 const shouldApplyBackpressure = stream.@queue.size > stream.@strategy.highWaterMark;47 if (shouldApplyBackpressure && st ream.@state === @streamWritable) {48 stream.@state = @streamWaiting;49 stream.@readyPromiseCapability = @newPromiseCapability(@Promise);47 const shouldApplyBackpressure = @getByIdDirectPrivate(stream, "queue").size > @getByIdDirectPrivate(stream, "strategy").highWaterMark; 48 if (shouldApplyBackpressure && state === @streamWritable) { 49 @putByIdDirectPrivate(stream, "state", @streamWaiting); 50 @putByIdDirectPrivate(stream, "readyPromiseCapability", @newPromiseCapability(@Promise)); 50 51 } 51 if (!shouldApplyBackpressure && st ream.@state === @streamWaiting) {52 stream.@state = @streamWritable;53 stream.@readyPromiseCapability.@resolve.@call();52 if (!shouldApplyBackpressure && state === @streamWaiting) { 53 @putByIdDirectPrivate(stream, "state", @streamWritable); 54 @getByIdDirectPrivate(stream, "readyPromiseCapability").@resolve.@call(); 54 55 } 55 56 } … … 59 60 "use strict"; 60 61 61 if (stream.@state === @streamClosed || stream.@state === @streamErrored) 62 const state = @getByIdDirectPrivate(stream, "state"); 63 if (state === @streamClosed || state === @streamErrored) 62 64 return; 63 while ( stream.@queue.content.length > 0) {64 const writeRecord = @dequeueValue( stream.@queue);65 while (@getByIdDirectPrivate(stream, "queue").content.length > 0) { 66 const writeRecord = @dequeueValue(@getByIdDirectPrivate(stream, "queue")); 65 67 if (writeRecord !== "close") 66 68 writeRecord.promiseCapability.@reject.@call(@undefined, e); 67 69 } 68 stream.@storedError = e;69 if (st ream.@state === @streamWaiting)70 stream.@readyPromiseCapability.@resolve.@call();71 stream.@closedPromiseCapability.@reject.@call(@undefined, e);72 stream.@state = @streamErrored;70 @putByIdDirectPrivate(stream, "storedError", e); 71 if (state === @streamWaiting) 72 @getByIdDirectPrivate(stream, "readyPromiseCapability").@resolve.@call(); 73 @getByIdDirectPrivate(stream, "closedPromiseCapability").@reject.@call(@undefined, e); 74 @putByIdDirectPrivate(stream, "state", @streamErrored); 73 75 } 74 76 … … 77 79 "use strict"; 78 80 79 if (! stream.@started)80 stream.@startedPromise.@then(function() { @writableStreamAdvanceQueue(stream); });81 if (!@getByIdDirectPrivate(stream, "started")) 82 @getByIdDirectPrivate(stream, "startedPromise").@then(function() { @writableStreamAdvanceQueue(stream); }); 81 83 else 82 84 @writableStreamAdvanceQueue(stream); … … 87 89 "use strict"; 88 90 89 if ( stream.@queue.content.length === 0 || stream.@writing)91 if (@getByIdDirectPrivate(stream, "queue").content.length === 0 || @getByIdDirectPrivate(stream, "writing")) 90 92 return; 91 93 92 const writeRecord = @peekQueueValue( stream.@queue);94 const writeRecord = @peekQueueValue(@getByIdDirectPrivate(stream, "queue")); 93 95 if (writeRecord === "close") { 94 @assert( stream.@state=== @streamClosing);95 @dequeueValue( stream.@queue);96 @assert( stream.@queue.content.length === 0);96 @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing); 97 @dequeueValue(@getByIdDirectPrivate(stream, "queue")); 98 @assert(@getByIdDirectPrivate(stream, "queue").content.length === 0); 97 99 @closeWritableStream(stream); 98 100 return; 99 101 } 100 102 101 stream.@writing = true;102 @promiseInvokeOrNoop( stream.@underlyingSink, "write", [writeRecord.chunk]).@then(103 @putByIdDirectPrivate(stream, "writing", true); 104 @promiseInvokeOrNoop(@getByIdDirectPrivate(stream, "underlyingSink"), "write", [writeRecord.chunk]).@then( 103 105 function() { 104 if ( stream.@state=== @streamErrored)106 if (@getByIdDirectPrivate(stream, "state") === @streamErrored) 105 107 return; 106 stream.@writing = false;108 @putByIdDirectPrivate(stream, "writing", false); 107 109 writeRecord.promiseCapability.@resolve.@call(); 108 @dequeueValue( stream.@queue);110 @dequeueValue(@getByIdDirectPrivate(stream, "queue")); 109 111 @syncWritableStreamStateWithQueue(stream); 110 112 @writableStreamAdvanceQueue(stream); … … 120 122 "use strict"; 121 123 122 @assert( stream.@state=== @streamClosing);123 @promiseInvokeOrNoop( stream.@underlyingSink, "close").@then(124 @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing); 125 @promiseInvokeOrNoop(@getByIdDirectPrivate(stream, "underlyingSink"), "close").@then( 124 126 function() { 125 if ( stream.@state=== @streamErrored)127 if (@getByIdDirectPrivate(stream, "state") === @streamErrored) 126 128 return; 127 @assert( stream.@state=== @streamClosing);128 stream.@closedPromiseCapability.@resolve.@call();129 stream.@state = @streamClosed;129 @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing); 130 @getByIdDirectPrivate(stream, "closedPromiseCapability").@resolve.@call(); 131 @putByIdDirectPrivate(stream, "state", @streamClosed); 130 132 }, 131 133 function(r) { -
trunk/Source/WebCore/bindings/js/JSDOMBindingInternals.js
r213108 r230637 29 29 { 30 30 "use strict"; 31 this.@backingMap.forEach((value, key, map) => {31 @getByIdDirectPrivate(this, "backingMap").forEach((value, key, map) => { 32 32 callback(value, key, this); 33 33 });
Note: See TracChangeset
for help on using the changeset viewer.