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.
| value | outcome | accessor returns | why |
|---|---|---|---|
| Not run yet. | |||
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.
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)