summaryrefslogtreecommitdiff
path: root/extensions/web/06_streams.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/web/06_streams.js')
-rw-r--r--extensions/web/06_streams.js29
1 files changed, 18 insertions, 11 deletions
diff --git a/extensions/web/06_streams.js b/extensions/web/06_streams.js
index b3c55fa85..b24ab21a0 100644
--- a/extensions/web/06_streams.js
+++ b/extensions/web/06_streams.js
@@ -366,10 +366,10 @@
* @param {number} defaultHWM
*/
function extractHighWaterMark(strategy, defaultHWM) {
- if (!("highWaterMark" in strategy)) {
+ if (strategy.highWaterMark === undefined) {
return defaultHWM;
}
- const highWaterMark = Number(strategy.highWaterMark);
+ const highWaterMark = strategy.highWaterMark;
if (Number.isNaN(highWaterMark) || highWaterMark < 0) {
throw RangeError(
`Expected highWaterMark to be a positive number or Infinity, got "${highWaterMark}".`,
@@ -384,12 +384,17 @@
* @return {(chunk: T) => number}
*/
function extractSizeAlgorithm(strategy) {
- const { size } = strategy;
-
- if (!size) {
+ if (strategy.size === undefined) {
return () => 1;
}
- return (chunk) => size(chunk);
+ return (chunk) =>
+ webidl.invokeCallbackFunction(
+ strategy.size,
+ [chunk],
+ undefined,
+ webidl.converters["unrestricted double"],
+ { prefix: "Failed to call `sizeAlgorithm`" },
+ );
}
/**
@@ -1031,6 +1036,10 @@
if (reader === undefined) {
return;
}
+ /** @type {Deferred<void>} */
+ const closedPromise = reader[_closedPromise];
+ closedPromise.reject(e);
+ setPromiseIsHandledToTrue(closedPromise.promise);
if (isReadableStreamDefaultReader(reader)) {
/** @type {Array<ReadRequest<R>>} */
const readRequests = reader[_readRequests];
@@ -1040,10 +1049,6 @@
reader[_readRequests] = [];
}
// 3.5.6.8 Otherwise, support BYOB Reader
- /** @type {Deferred<void>} */
- const closedPromise = reader[_closedPromise];
- closedPromise.reject(e);
- setPromiseIsHandledToTrue(closedPromise.promise);
}
/**
@@ -3158,7 +3163,9 @@
return Promise.reject(err);
}
if (isReadableStreamLocked(this)) {
- Promise.reject(new TypeError("Cannot cancel a locked ReadableStream."));
+ return Promise.reject(
+ new TypeError("Cannot cancel a locked ReadableStream."),
+ );
}
return readableStreamCancel(this, reason);
}