Closed Bug 2040252 Opened 14 days ago Closed 11 days ago

Consider disabling scroll axis lock in WebDriver

Categories

(Remote Protocol :: Agent, enhancement, P2)

enhancement

Tracking

(firefox153 fixed)

RESOLVED FIXED
153 Branch
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: nobody → hikezoe.birchill
Status: NEW → ASSIGNED

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.

(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.

Priority: -- → P2
Whiteboard: [webdriver:m20] [webdriver:external]
Status: ASSIGNED → RESOLVED
Closed: 11 days ago
Resolution: --- → FIXED
Target Milestone: --- → 153 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: