Bug 193962 - Dispatch pointercancel events when content is panned or zoomed on iOS
Summary: Dispatch pointercancel events when content is panned or zoomed on iOS
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: DOM (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Antoine Quint
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2019-01-29 04:07 PST by Antoine Quint
Modified: 2020-11-24 23:06 PST (History)
11 users (show)

See Also:


Attachments
Patch (32.95 KB, patch)
2019-01-31 14:05 PST, Antoine Quint
dino: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Antoine Quint 2019-01-29 04:07:39 PST
When a UA gesture starts, we should dispatch a pointercancel event and stop dispatching more pointer events for all of the touch identifiers involved in that gesture.
Comment 1 Radar WebKit Bug Importer 2019-01-29 04:08:00 PST
<rdar://problem/47629134>
Comment 2 Antoine Quint 2019-01-31 14:05:39 PST
Created attachment 360774 [details]
Patch
Comment 3 Dean Jackson 2019-01-31 14:30:25 PST
Comment on attachment 360774 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=360774&action=review

> Source/WebCore/ChangeLog:11
> +        has been cancelled, which is important because a cancelled pointer should no longer dispatch any further pointer events, and
> +        to cancel a pointer.

did you mean cancel the capture?

> Source/WebCore/dom/PointerEvent.h:59
> +    static Ref<PointerEvent> create(const AtomicString& type, int32_t pointerId, String pointerType)

We really need PointerID to be a type somewhere.

> Source/WebCore/page/PointerCaptureController.h:59
> +        String pointerType;

This should be an enum by this point. It probably should be an enum on PointerEvent too.
Comment 4 Antoine Quint 2019-01-31 14:32:58 PST
(In reply to Dean Jackson from comment #3)
> Comment on attachment 360774 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=360774&action=review
> 
> > Source/WebCore/ChangeLog:11
> > +        has been cancelled, which is important because a cancelled pointer should no longer dispatch any further pointer events, and
> > +        to cancel a pointer.
> 
> did you mean cancel the capture?

No, there is one new method to check whether a pointer has been cancelled, and one to cancel it.

> > Source/WebCore/dom/PointerEvent.h:59
> > +    static Ref<PointerEvent> create(const AtomicString& type, int32_t pointerId, String pointerType)
> 
> We really need PointerID to be a type somewhere.

Agreed. What's the best way to achieve this?

> > Source/WebCore/page/PointerCaptureController.h:59
> > +        String pointerType;
> 
> This should be an enum by this point. It probably should be an enum on
> PointerEvent too.

I'd like to address this as a followup.
Comment 5 Antoine Quint 2019-02-01 13:53:58 PST
Committed r240875: <https://trac.webkit.org/changeset/240875>
Comment 6 Lucas Forschler 2019-02-06 09:18:46 PST
Mass move bugs into the DOM component.
Comment 7 Samuel 2020-11-18 07:33:45 PST
I have been experiencing exactly this issue on iOS (13 and 14) (iPad Pro) for a while. When I start panning (scrolling) an overflown list, "pointerdown" is fired but there is no subsequent "pointercancel".

This page demonstrates the problem:

https://abiding-vigorous-bill.glitch.me/
Comment 8 Samuel 2020-11-24 23:06:00 PST
(In reply to Samuel from comment #7)
> I have been experiencing exactly this issue on iOS (13 and 14) (iPad Pro)
> for a while. When I start panning (scrolling) an overflown list,
> "pointerdown" is fired but there is no subsequent "pointercancel".
> 
> This page demonstrates the problem:
> 
> https://abiding-vigorous-bill.glitch.me/

Forget about this comment. My mistake.