Consider disabling scroll axis lock in WebDriver
Categories
(Remote Protocol :: Agent, enhancement, P2)
Tracking
(firefox153 fixed)
| Tracking | Status | |
|---|---|---|
| firefox153 | --- | fixed |
People
(Reporter: hiro, Assigned: hiro)
References
(Blocks 2 open bugs)
Details
(Whiteboard: [webdriver:m20] [webdriver:external])
Attachments
(1 file)
This is a blocker to pass one of scroll interop 2026 wpt (bug 2015367).
Claude Code summarized:
Axis-locking is a UX accommodation for human input: when a finger or trackpad
gesture is near horizontal or near vertical, the engine zeros the
cross-axis delta so a slightly-tilted swipe doesn't drift diagonally. The exact
shape — what input source triggers it, what threshold engages the lock, when
the lock breaks — varies per engine.
| Engine | Mechanism | Input source | Layer | Lock angle | Platforms |
|---|---|---|---|---|---|
| Chrome | SnapScrollController |
raw touchscreen MotionEvent |
gesture-detection (pre-gesture) | ~38.7° (kMinSnapRatio = 1.25) |
Android, Aura |
| touchscreen | |||||
| Chrome | MouseWheelRailsFilterMac |
trackpad wheel events with phase | wheel pipeline | ~26.6° (kMinRailRatio = 2.0) |
macOS only |
| WebKit | WheelEventDeltaFilterMac (_NSScrollingPredominantAxisFilter) |
trackpad wheel events with Began/Changed phase |
wheel pipeline | OS -defined (AppKit private) | macOS |
| WebKit | BasicWheelEventDeltaFilter |
wheel events with Began/Changed phase |
wheel pipeline | strict (3-event unanimity) | GTK, WPE, Win |
| Firefox | APZ axis lock | any PanGestureInput or touch |
APZ | 30° (apz.axis_lock.lock_angle = π/6) |
all |
Cross-engine punchline for WebDriver scrolls: Chrome and WebKit both
bypass their axis-locks naturally, because synthesized wheel events carry no
phase information and the lock is gated on phase. Firefox's APZ axis-lock has
no phase gate — it fires on any PanGestureInput — so a per-session pref
disable is required to match.
| Assignee | ||
Comment 1•14 days ago
|
||
Updated•14 days ago
|
Comment 2•14 days ago
|
||
Hiro, I assume this only affects the touch events when dispatched asynchronously via the parent process, right? We probably should mark this bug as a blocker for bug 1773393 as well.
| Assignee | ||
Comment 3•14 days ago
|
||
(In reply to Henrik Skupin [:whimboo][⌚️UTC+2] from comment #2)
Hiro, I assume this only affects the touch events when dispatched asynchronously via the parent process, right? We probably should mark this bug as a blocker for bug 1773393 as well.
This will also affect WebDriver's wheel actions via the parent process, since in bug 2015367 we are going to handle wheel actions as pan gestures just like what Chrome and Safari do.
Updated•14 days ago
|
Description
•