| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Implementation of WritableStream for Blink. See | 5 // Implementation of WritableStream for Blink. See |
| 6 // https://streams.spec.whatwg.org/#ws. The implementation closely follows the | 6 // https://streams.spec.whatwg.org/#ws. The implementation closely follows the |
| 7 // standard, except where required for performance or integration with Blink. In | 7 // standard, except where required for performance or integration with Blink. In |
| 8 // particular, classes, methods and abstract operations are implemented in the | 8 // particular, classes, methods and abstract operations are implemented in the |
| 9 // same order as in the standard, to simplify side-by-side reading. | 9 // same order as in the standard, to simplify side-by-side reading. |
| 10 | 10 |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 } | 299 } |
| 300 v8.markPromiseAsHandled(writer[_readyPromise]); | 300 v8.markPromiseAsHandled(writer[_readyPromise]); |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 | 303 |
| 304 function WritableStreamFinishClose(stream) { | 304 function WritableStreamFinishClose(stream) { |
| 305 const state = stream[_state]; | 305 const state = stream[_state]; |
| 306 TEMP_ASSERT(state === CLOSING || state === ERRORED, | 306 TEMP_ASSERT(state === CLOSING || state === ERRORED, |
| 307 'state is "closing" or "errored"'); | 307 'state is "closing" or "errored"'); |
| 308 | 308 |
| 309 const writer = stream[_writer]; |
| 309 if (state === CLOSING) { | 310 if (state === CLOSING) { |
| 310 v8.resolvePromise(stream[_writer][_closedPromise], undefined); | 311 if (writer !== undefined) { |
| 312 v8.resolvePromise(writer[_closedPromise], undefined); |
| 313 } |
| 311 stream[_state] = CLOSED; | 314 stream[_state] = CLOSED; |
| 312 } else { | 315 } else if (writer !== undefined) { |
| 313 TEMP_ASSERT(state === ERRORED, 'state is "errored"'); | 316 TEMP_ASSERT(state === ERRORED, 'state is "errored"'); |
| 314 v8.rejectPromise(stream[_writer][_closedPromise], stream[_storedError]); | 317 v8.rejectPromise(writer[_closedPromise], stream[_storedError]); |
| 315 v8.markPromiseAsHandled(stream[_writer][_closedPromise]); | 318 v8.markPromiseAsHandled(writer[_closedPromise]); |
| 316 } | 319 } |
| 317 | 320 |
| 318 if (stream[_pendingAbortRequest] !== undefined) { | 321 if (stream[_pendingAbortRequest] !== undefined) { |
| 319 v8.resolvePromise(stream[_pendingAbortRequest], undefined); | 322 v8.resolvePromise(stream[_pendingAbortRequest], undefined); |
| 320 stream[_pendingAbortRequest] = undefined; | 323 stream[_pendingAbortRequest] = undefined; |
| 321 } | 324 } |
| 322 } | 325 } |
| 323 | 326 |
| 324 function WritableStreamRejectPromisesInReactionToError(stream) { | 327 function WritableStreamRejectPromisesInReactionToError(stream) { |
| 325 TEMP_ASSERT(stream[_state] === ERRORED, 'stream.[[state]] is "errored"'); | 328 TEMP_ASSERT(stream[_state] === ERRORED, 'stream.[[state]] is "errored"'); |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 | 928 |
| 926 defineProperty(global, 'WritableStream', { | 929 defineProperty(global, 'WritableStream', { |
| 927 value: WritableStream, | 930 value: WritableStream, |
| 928 enumerable: false, | 931 enumerable: false, |
| 929 configurable: true, | 932 configurable: true, |
| 930 writable: true | 933 writable: true |
| 931 }); | 934 }); |
| 932 | 935 |
| 933 // TODO(ricea): Exports to Blink | 936 // TODO(ricea): Exports to Blink |
| 934 }); | 937 }); |
| OLD | NEW |