v158 · webtransport · congestion control
A hint, not a guarantee
Two failure edges define this feature. A string outside the WebTransportCongestionControl enum is a WebIDL violation — the constructor must throw TypeError before touching the network. And a valid preference the user agent cannot optimise for is silently resolved to "default": the spec even marks the option a feature at risk because, at the time of writing, no browser ships a genuinely low-latency-optimised algorithm. Both edges run for real below.
Chrome targets congestionControl for Chrome 158 behind the WebTransportCongestionControl runtime flag (--enable-blink-features=WebTransportCongestionControl, or chrome://flags/#enable-experimental-web-platform-features). On a pre-158 build this page's first test is the most honest probe there is: the bogus value not throwing proves the dictionary member is being ignored entirely.
Edge 1 · An invalid enum value must throw TypeError
This probe can genuinely return false. A build that parses the option throws on { congestionControl: "bogus" }; a build that ignores unknown dictionary members constructs happily — which is exactly how WebIDL treats members it has never heard of, and exactly why "the constructor accepted my option" proves nothing about support.
Not run yet.
Edge 2 · Requested-but-unsatisfied resolves to "default"
For each valid enum value, construct a real session and compare requested with granted. The spec allows only two answers per row: the requested value itself, or "default". Anything else — including undefined — is this build not implementing the attribute.
| requested | granted (attribute) | spec-legal? |
|---|---|---|
| Not run yet. | ||
Edge 3 · Read the enum without bucketing unknown values
Today's vocabulary is "default" | "throughput" | "low-latency" — but enums grow. A reader that treats "anything that isn't throughput" as default will silently misreport a future value. This page's reader refuses to guess:
function describeCongestionControl(value) {
switch (value) {
case "default": return "no preference granted";
case "throughput": return "optimised for throughput";
case "low-latency": return "optimised for low latency";
default:
// Log the ACTUAL value — never bucket what you don't know.
return "unrecognised value " + JSON.stringify(value) +
" — vocabulary newer than this code";
}
}
Not run yet.