demo · v136
Wheel passthrough
The video-conferencing pattern that motivated the spec: a live "preview tile" of the captured tab where the user can wheel/scroll inside the tile and have those wheel deltas forwarded to the captured surface — without having to leave the call to do it.
Probing…
Permission
On first
forwardWheel() call, the captured tab's user must accept Chrome's "control capture" prompt. Self-capturing this tab is disallowed by Chrome — pick another open tab when the share dialog appears.
Tile is idle — press "Start capture" then wheel here.
capture stateidle
forwardWheel bindingnot bound
last wheel deltaY—
forwarding path—
cumulative px sent0
action log
the code
const tile = document.getElementById("tile");
const ctrl = new CaptureController();
const stream = await navigator.mediaDevices.getDisplayMedia({ controller: ctrl });
tile.querySelector("video").srcObject = stream;
// Current CSC binds a trusted wheel source element once.
await ctrl.forwardWheel(tile);
tile.addEventListener("wheel", (e) => {
e.preventDefault(); // don't scroll the tile itself
renderWheelTelemetry(e.deltaX, e.deltaY);
}, { passive: false });
why this angle
The sibling concept exposes the API surface — "press the up/down buttons, they call forwardWheel." Real VC products don't ship those buttons; users scroll the preview tile with their real trackpad or mouse wheel. The trusted wheel source → CSC binding is what the spec was designed for, and is what makes the difference between "demo" and "shippable feature." This page binds the actual preview tile and logs the live wheel stream.
see also
- Captured Surface Control — feature index
- API-surface concept
- ChromeStatus entry
- CSC spec draft