| Index: third_party/WebKit/Source/core/streams/WritableStream.js
|
| diff --git a/third_party/WebKit/Source/core/streams/WritableStream.js b/third_party/WebKit/Source/core/streams/WritableStream.js
|
| index 38f7adc1fa5c52471f8e4ae6017e6fcd8e87bd9a..ed39672b2175b71fe753f3c65e2ad50ae6e8f459 100644
|
| --- a/third_party/WebKit/Source/core/streams/WritableStream.js
|
| +++ b/third_party/WebKit/Source/core/streams/WritableStream.js
|
| @@ -141,11 +141,8 @@
|
| setDefaultControllerFlag(controller, FLAG_INCLOSE, value);
|
| }
|
|
|
| - function rejectPromises(array, e) {
|
| - // array is an InternalPackedArray so forEach won't work.
|
| - for (let i = 0; i < array.length; ++i) {
|
| - v8.rejectPromise(array[i], e);
|
| - }
|
| + function rejectPromises(queue, e) {
|
| + queue.forEach(promise => v8.rejectPromise(promise, e));
|
| }
|
|
|
| // https://tc39.github.io/ecma262/#sec-ispropertykey
|
| @@ -178,7 +175,7 @@
|
| this[_pendingWriteRequest] = undefined;
|
| this[_pendingCloseRequest] = undefined;
|
| this[_pendingAbortRequest] = undefined;
|
| - this[_writeRequests] = new v8.InternalPackedArray();
|
| + this[_writeRequests] = new binding.SimpleQueue();
|
| const type = underlyingSink.type;
|
| if (type !== undefined) {
|
| throw new RangeError(streamErrors.invalidType);
|
| @@ -331,7 +328,7 @@
|
|
|
| const storedError = stream[_storedError];
|
| rejectPromises(stream[_writeRequests], storedError);
|
| - stream[_writeRequests] = new v8.InternalPackedArray();
|
| + stream[_writeRequests] = new binding.SimpleQueue();
|
|
|
| if (stream[_pendingCloseRequest] !== undefined) {
|
| TEMP_ASSERT(
|
| @@ -623,7 +620,7 @@
|
| }
|
| this[_controlledWritableStream] = stream;
|
| this[_underlyingSink] = underlyingSink;
|
| - this[_queue] = new v8.InternalPackedArray();
|
| + this[_queue] = new binding.SimpleQueue();
|
| this[_queueSize] = 0;
|
| this[_defaultControllerFlags] = 0;
|
| const normalizedStrategy =
|
| @@ -665,7 +662,7 @@
|
| }
|
|
|
| function WritableStreamDefaultControllerAbort(controller, reason) {
|
| - controller[_queue] = v8.InternalPackedArray();
|
| + controller[_queue] = new binding.SimpleQueue();
|
| controller[_queueSize] = 0;
|
| const sinkAbortPromise =
|
| PromiseInvokeOrNoop(controller[_underlyingSink], 'abort', [reason]);
|
| @@ -805,7 +802,7 @@
|
| stream[_pendingWriteRequest] = stream[_writeRequests].shift();
|
|
|
| const sinkWritePromise = PromiseInvokeOrNoop(controller[_underlyingSink],
|
| - 'write', [chunk, controller]);
|
| + 'write', [chunk, controller]);
|
| thenPromise(
|
| sinkWritePromise,
|
| () => {
|
| @@ -881,16 +878,12 @@
|
| TEMP_ASSERT(state === WRITABLE || state === CLOSING,
|
| 'stream.[[state]] is "writable" or "closing".');
|
| WritableStreamError(stream, e);
|
| - controller[_queue] = new v8.InternalPackedArray();
|
| + controller[_queue] = new binding.SimpleQueue();
|
| controller[_queueSize] = 0;
|
| }
|
|
|
| // Queue-with-Sizes Operations
|
| //
|
| - // These differ from the versions in the standard: they take a controller
|
| - // argument in order to cache the total queue size. This is necessary to avoid
|
| - // O(N^2) behaviour.
|
| - //
|
| // TODO(ricea): Share these operations with ReadableStream.js.
|
| function DequeueValueForController(controller) {
|
| TEMP_ASSERT(controller[_queue].length !== 0,
|
| @@ -917,7 +910,7 @@
|
| function PeekQueueValue(queue) {
|
| TEMP_ASSERT(queue.length !== 0,
|
| 'queue is not empty.');
|
| - return queue[0].value;
|
| + return queue.peek().value;
|
| }
|
|
|
| // Miscellaneous Operations
|
|
|