v158 · webtransport · concurrency hints

The edges: EnforceRange, null, and the floor of 100

Both hints are declared [EnforceRange] unsigned short? — integers 0 through 65535, nullable. That one line of IDL decides everything on this page: which values are stored, which throw a real TypeError before any connection exists, and why the same out-of-range value does nothing at all on a build that predates the feature.

Enabled by default in Chrome 158. On an earlier build, run Chrome with --enable-blink-features=WebTransportAnticipatedConcurrentIncomingStreams, or flip chrome://flags/#enable-experimental-web-platform-features and relaunch. On a build without the feature every row below reports ignored — an unread dictionary member is never range-checked, which is itself the most honest detection signal this page has.

Feed the constructor the boundary values

Each row constructs a real WebTransport against a dead local port with anticipatedConcurrentIncomingUnidirectionalStreams set to that value, then reports the constructor's actual behaviour and the accessor's actual readback.

Constructor option, value by value
valueoutcomeaccessor returnswhy
Not run yet.
Press the button to run every boundary case.

The setter enforces the same range

The read-write attribute uses the same IDL type, so assigning 65536 to a live object must throw the same TypeError — and assigning null must clear the hint. This runs both against one object and reports what actually happened.

Not run yet.

code path

// [EnforceRange] unsigned short? — the whole contract:
new WebTransport(url, { anticipatedConcurrentIncomingUnidirectionalStreams: 65535 }); // stored
new WebTransport(url, { anticipatedConcurrentIncomingUnidirectionalStreams: 65536 }); // TypeError
new WebTransport(url, { anticipatedConcurrentIncomingUnidirectionalStreams: -1 });    // TypeError
new WebTransport(url, { anticipatedConcurrentIncomingUnidirectionalStreams: null });  // no hint

// The floor: hints below 100 are stored faithfully, but the spec still
// requires the client to permit at least 100 incoming streams of each type,
// so a hint of 12 never *shrinks* the allowance.
const t = new WebTransport(url, { anticipatedConcurrentIncomingUnidirectionalStreams: 12 });
t.anticipatedConcurrentIncomingUnidirectionalStreams; // → 12 (the hint, not the allowance)

see also