Commit 2ceff58d authored by Adam Rice's avatar Adam Rice Committed by Commit Bot

Update WritableStream to match standard

Update WritableStream to standard version
https://github.com/whatwg/streams/commit/51227372cc84846bdcf68312724c4cac6a4b9e58

Remove failing test expectations.

Changes:

The timing of access of strategy parameters has been changed to
match the standard. This mostly only affects the tests that are looking
for it.

Algorithms are cleared out once they will no longer be called, enabling
garbage collection.

Bug: 866388
Change-Id: I948a858c101960bd19c826f9d8764575d5360c66
Reviewed-on: https://chromium-review.googlesource.com/1146622Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#580822}
parent c9543723
This is a testharness.js-based test.
PASS controller argument should be passed to start method
PASS controller argument should be passed to write method
PASS controller argument should not be passed to close method
PASS highWaterMark should be reflected to desiredSize
PASS WritableStream should be writable and ready should fulfill immediately if the strategy does not apply backpressure
PASS WritableStream should be constructible with no arguments
PASS WritableStream instances should have standard methods and properties
PASS private constructors should not be exported
PASS WritableStreamDefaultController constructor should throw
PASS WritableStreamDefaultController constructor should throw when passed an initialised WritableStream
PASS WritableStreamDefaultWriter should throw unless passed a WritableStream
PASS WritableStreamDefaultWriter constructor should throw when stream argument is locked
FAIL WritableStream constructor should stop after get on size fails assert_equals: operations should be performed in the right order expected "get on size" but got "get on type,get on size"
FAIL WritableStream constructor should stop after get on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after get on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type"
FAIL WritableStream constructor should stop after validate on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after validate on size fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after tonumber on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after validate on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after get on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after validate on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after get on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after validate on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after get on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after validate on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after get on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
FAIL WritableStream constructor should stop after validate on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
Harness: the test ran to completion.
This is a testharness.js-based test.
PASS controller argument should be passed to start method
PASS controller argument should be passed to write method
PASS controller argument should not be passed to close method
PASS highWaterMark should be reflected to desiredSize
PASS WritableStream should be writable and ready should fulfill immediately if the strategy does not apply backpressure
PASS WritableStream should be constructible with no arguments
PASS WritableStream instances should have standard methods and properties
PASS private constructors should not be exported
PASS WritableStreamDefaultController constructor should throw
PASS WritableStreamDefaultController constructor should throw when passed an initialised WritableStream
PASS WritableStreamDefaultWriter should throw unless passed a WritableStream
PASS WritableStreamDefaultWriter constructor should throw when stream argument is locked
FAIL WritableStream constructor should stop after get on size fails assert_equals: operations should be performed in the right order expected "get on size" but got "get on type,get on size"
FAIL WritableStream constructor should stop after get on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after get on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type"
FAIL WritableStream constructor should stop after validate on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after validate on size fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after tonumber on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after validate on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after get on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after validate on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after get on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after validate on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after get on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after validate on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after get on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
FAIL WritableStream constructor should stop after validate on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
Harness: the test ran to completion.
This is a testharness.js-based test.
PASS Service worker test setup
PASS controller argument should be passed to start method
PASS controller argument should be passed to write method
PASS controller argument should not be passed to close method
PASS highWaterMark should be reflected to desiredSize
PASS WritableStream should be writable and ready should fulfill immediately if the strategy does not apply backpressure
PASS WritableStream should be constructible with no arguments
PASS WritableStream instances should have standard methods and properties
PASS private constructors should not be exported
PASS WritableStreamDefaultController constructor should throw
PASS WritableStreamDefaultController constructor should throw when passed an initialised WritableStream
PASS WritableStreamDefaultWriter should throw unless passed a WritableStream
PASS WritableStreamDefaultWriter constructor should throw when stream argument is locked
FAIL WritableStream constructor should stop after get on size fails assert_equals: operations should be performed in the right order expected "get on size" but got "get on type,get on size"
FAIL WritableStream constructor should stop after get on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after get on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type"
FAIL WritableStream constructor should stop after validate on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after validate on size fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after tonumber on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after validate on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after get on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after validate on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after get on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after validate on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after get on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after validate on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after get on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
FAIL WritableStream constructor should stop after validate on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
Harness: the test ran to completion.
This is a testharness.js-based test.
PASS controller argument should be passed to start method
PASS controller argument should be passed to write method
PASS controller argument should not be passed to close method
PASS highWaterMark should be reflected to desiredSize
PASS WritableStream should be writable and ready should fulfill immediately if the strategy does not apply backpressure
PASS WritableStream should be constructible with no arguments
PASS WritableStream instances should have standard methods and properties
PASS private constructors should not be exported
PASS WritableStreamDefaultController constructor should throw
PASS WritableStreamDefaultController constructor should throw when passed an initialised WritableStream
PASS WritableStreamDefaultWriter should throw unless passed a WritableStream
PASS WritableStreamDefaultWriter constructor should throw when stream argument is locked
FAIL WritableStream constructor should stop after get on size fails assert_equals: operations should be performed in the right order expected "get on size" but got "get on type,get on size"
FAIL WritableStream constructor should stop after get on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after get on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type"
FAIL WritableStream constructor should stop after validate on type fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after validate on size fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type" but got "get on type,get on size,get on highWaterMark"
FAIL WritableStream constructor should stop after tonumber on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after validate on highWaterMark fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark"
FAIL WritableStream constructor should stop after get on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after validate on write fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write"
FAIL WritableStream constructor should stop after get on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after validate on close fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close"
FAIL WritableStream constructor should stop after get on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after validate on abort fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort"
FAIL WritableStream constructor should stop after get on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
FAIL WritableStream constructor should stop after validate on start fails assert_equals: operations should be performed in the right order expected "get on size,get on highWaterMark,get on type,tonumber on highWaterMark,get on write,get on close,get on abort,get on start" but got "get on type,get on size,get on highWaterMark,tonumber on highWaterMark,get on write,get on close,get on abort,get on start"
Harness: the test ran to completion.
...@@ -144,9 +144,9 @@ ...@@ -144,9 +144,9 @@
} }
InitializeWritableStream(this); InitializeWritableStream(this);
const type = underlyingSink.type;
const size = strategy.size; const size = strategy.size;
let highWaterMark = strategy.highWaterMark; let highWaterMark = strategy.highWaterMark;
const type = underlyingSink.type;
if (type !== undefined) { if (type !== undefined) {
throw new RangeError(streamErrors.invalidType); throw new RangeError(streamErrors.invalidType);
} }
...@@ -822,7 +822,9 @@ ...@@ -822,7 +822,9 @@
// or impossible, so use static dispatch for now. This will have to be fixed // or impossible, so use static dispatch for now. This will have to be fixed
// when adding a byte controller. // when adding a byte controller.
function WritableStreamDefaultControllerAbortSteps(controller, reason) { function WritableStreamDefaultControllerAbortSteps(controller, reason) {
return controller[_abortAlgorithm](reason); const result = controller[_abortAlgorithm](reason);
WritableStreamDefaultControllerClearAlgorithms(controller);
return result;
} }
function WritableStreamDefaultControllerErrorSteps(controller) { function WritableStreamDefaultControllerErrorSteps(controller) {
...@@ -897,6 +899,12 @@ ...@@ -897,6 +899,12 @@
sizeAlgorithm); sizeAlgorithm);
} }
function WritableStreamDefaultControllerClearAlgorithms(controller) {
controller[_writeAlgorithm] = undefined;
controller[_closeAlgorithm] = undefined;
controller[_abortAlgorithm] = undefined;
}
function WritableStreamDefaultControllerClose(controller) { function WritableStreamDefaultControllerClose(controller) {
EnqueueValueWithSize(controller, 'close', 0); EnqueueValueWithSize(controller, 'close', 0);
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
...@@ -979,6 +987,7 @@ ...@@ -979,6 +987,7 @@
// assert(controller[_queue].length === 0, // assert(controller[_queue].length === 0,
// 'controller.[[queue]] is empty.'); // 'controller.[[queue]] is empty.');
const sinkClosePromise = controller[_closeAlgorithm](); const sinkClosePromise = controller[_closeAlgorithm]();
WritableStreamDefaultControllerClearAlgorithms(controller);
thenPromise( thenPromise(
sinkClosePromise, () => WritableStreamFinishInFlightClose(stream), sinkClosePromise, () => WritableStreamFinishInFlightClose(stream),
reason => WritableStreamFinishInFlightCloseWithError(stream, reason)); reason => WritableStreamFinishInFlightCloseWithError(stream, reason));
...@@ -1005,6 +1014,10 @@ ...@@ -1005,6 +1014,10 @@
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
}, },
reason => { reason => {
const state = stream[_stateAndFlags] & STATE_MASK;
if (state === WRITABLE) {
WritableStreamDefaultControllerClearAlgorithms(controller);
}
WritableStreamFinishInFlightWriteWithError(stream, reason); WritableStreamFinishInFlightWriteWithError(stream, reason);
}); });
} }
...@@ -1019,6 +1032,7 @@ ...@@ -1019,6 +1032,7 @@
const stream = controller[_controlledWritableStream]; const stream = controller[_controlledWritableStream];
// assert((stream[_stateAndFlags] & STATE_MASK) === WRITABLE, // assert((stream[_stateAndFlags] & STATE_MASK) === WRITABLE,
// '_stream_.[[state]] is `"writable"`.'); // '_stream_.[[state]] is `"writable"`.');
WritableStreamDefaultControllerClearAlgorithms(controller);
WritableStreamStartErroring(stream, error); WritableStreamStartErroring(stream, error);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment