Bug 1784772 - Queue SwipeEventQueue only if we don't know whether the pan event wasn...
commitd96b738428f86a81788071cc428243afb2d2ad10
authorHiroyuki Ikezoe <hikezoe.birchill@mozilla.com>
Tue, 14 Mar 2023 21:01:01 +0000 (14 21:01 +0000)
committerHiroyuki Ikezoe <hikezoe.birchill@mozilla.com>
Tue, 14 Mar 2023 21:01:01 +0000 (14 21:01 +0000)
tree8bddbdcf9d6e0f5b9851c3ef609f600c6924192c
parenta16d3fadf64e9bc7acab7aeb74ea981f8a32697e
Bug 1784772 - Queue SwipeEventQueue only if we don't know whether the pan event wasn't consumed by APZ. r=botond

If we queue the SwipeEventQueue in the case where the corresponding pan-start
event was consumed by the root content APZC, we wait for a response from the
content. And if the consumed pan-start event scrolled to the edge of the scroll
container and if the new scrolled position has been reached to the content
process before we tell whether the scroll position of the scroll container is
at the edge [1], we report it back to the SwipeTracker as the event should be
an event as a start of swipe navigation gestures. Thus, once after we got a
pan-end event, we trigger a swipe navigation. It results timeouts on a test case
waiting for an APZ:TransformEnd notification which never happens due to the page
navigation.

There's also a similar race condition where a pan-start event was consumed by a
non-root content APZC. But I haven't been able to reproduce the similar case
manually so I just filed bug 1821967 for the race and I am not going to handle
the race here. Note that I haven't been able to reproduce the original race
condition manually either though.

[1] https://searchfox.org/mozilla-central/rev/2f9a79d1c4ae7090cf50d93be86ba9dc2767a733/dom/events/EventStateManager.cpp#3727-3728

Differential Revision: https://phabricator.services.mozilla.com/D172391
widget/nsBaseWidget.cpp