Changeset 244598 in webkit


Ignore:
Timestamp:
Apr 24, 2019 11:00:11 AM (5 years ago)
Author:
graouts@webkit.org
Message:

[iOS] Calling preventDefault() when handling a pointerdown event should not prevent panning, zooming or click event dispatch
https://bugs.webkit.org/show_bug.cgi?id=195839
<rdar://problem/48946154>

Reviewed by Brent Fulgham.

Source/WebCore:

Tests: pointerevents/ios/pointer-events-prevent-default-allows-click-event.html

pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html

The Pointer Events specification defines that the default action of any and all pointer events MUST NOT
be a manipulation of the viewport (e.g. panning or zooming). In practice, this means that calling
preventDefault() while handling a Pointer Event has no effect on the inner workings of the user agent,
so we change the method signature of PointerCaptureController::dispatchEventForTouchAtIndex() to return
void since we don't need to know whether preventDefault() was called.

https://www.w3.org/TR/pointerevents/#declaring-candidate-regions-for-default-touch-behaviors

  • page/PointerCaptureController.cpp:

(WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):

  • page/PointerCaptureController.h:

LayoutTests:

Modify the existing test to check that we *have* scrolled after performing a swipe gesture and calling
preventDefault() while handling the pointerdown handling. We also add a new test that checks that the
click event is indeed dispatched when tapping on an element and calling preventDefault() while handling
the pointerdown event.

  • pointerevents/ios/pointer-events-prevent-default-allows-click-event-expected.txt: Added.
  • pointerevents/ios/pointer-events-prevent-default-allows-click-event.html: Added.
  • pointerevents/ios/pointer-events-prevent-default-allows-scrolling-expected.txt: Added.
  • pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html: Renamed from LayoutTests/pointerevents/ios/pointer-events-prevent-default.html.
  • pointerevents/ios/pointer-events-prevent-default-expected.txt: Removed.
Location:
trunk
Files:
3 added
1 deleted
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r244595 r244598  
     12019-04-24  Antoine Quint  <graouts@apple.com>
     2
     3        [iOS] Calling preventDefault() when handling a pointerdown event should not prevent panning, zooming or click event dispatch
     4        https://bugs.webkit.org/show_bug.cgi?id=195839
     5        <rdar://problem/48946154>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Modify the existing test to check that we *have* scrolled after performing a swipe gesture and calling
     10        preventDefault() while handling the pointerdown handling. We also add a new test that checks that the
     11        click event is indeed dispatched when tapping on an element and calling preventDefault() while handling
     12        the pointerdown event.
     13
     14        * pointerevents/ios/pointer-events-prevent-default-allows-click-event-expected.txt: Added.
     15        * pointerevents/ios/pointer-events-prevent-default-allows-click-event.html: Added.
     16        * pointerevents/ios/pointer-events-prevent-default-allows-scrolling-expected.txt: Added.
     17        * pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html: Renamed from LayoutTests/pointerevents/ios/pointer-events-prevent-default.html.
     18        * pointerevents/ios/pointer-events-prevent-default-expected.txt: Removed.
     19
    1202019-04-24  Frederic Wang  <fwang@igalia.com>
    221
  • trunk/LayoutTests/pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html

    r244597 r244598  
    2121    target.addEventListener("pointerdown", event => event.preventDefault());
    2222    ui.swipe({ x: 100, y: 100 }, { x: 100, y: 50 }).then(() => {
    23         assert_equals(target.scrollTop, initialScrollTop);
     23        assert_not_equals(target.scrollTop, initialScrollTop);
    2424        test.done();
    2525    });
    26 }, "Scrolling of content can be disabled by calling preventDefault() on a pointer event.");
     26}, "Scrolling of content cannot be disabled by calling preventDefault() on a pointer event.");
    2727
    2828</script>
  • trunk/Source/WebCore/ChangeLog

    r244595 r244598  
     12019-04-24  Antoine Quint  <graouts@apple.com>
     2
     3        [iOS] Calling preventDefault() when handling a pointerdown event should not prevent panning, zooming or click event dispatch
     4        https://bugs.webkit.org/show_bug.cgi?id=195839
     5        <rdar://problem/48946154>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Tests: pointerevents/ios/pointer-events-prevent-default-allows-click-event.html
     10               pointerevents/ios/pointer-events-prevent-default-allows-scrolling.html
     11
     12        The Pointer Events specification defines that the default action of any and all pointer events MUST NOT
     13        be a manipulation of the viewport (e.g. panning or zooming). In practice, this means that calling
     14        preventDefault() while handling a Pointer Event has no effect on the inner workings of the user agent,
     15        so we change the method signature of PointerCaptureController::dispatchEventForTouchAtIndex() to return
     16        void since we don't need to know whether preventDefault() was called.
     17
     18        https://www.w3.org/TR/pointerevents/#declaring-candidate-regions-for-default-touch-behaviors
     19
     20        * page/PointerCaptureController.cpp:
     21        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
     22        * page/PointerCaptureController.h:
     23
    1242019-04-24  Frederic Wang  <fwang@igalia.com>
    225
  • trunk/Source/WebCore/page/PointerCaptureController.cpp

    r244423 r244598  
    159159
    160160#if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY)
    161 std::pair<bool, bool> PointerCaptureController::dispatchEventForTouchAtIndex(EventTarget& target, const PlatformTouchEvent& platformTouchEvent, unsigned index, bool isPrimary, WindowProxy& view)
    162 {
    163     bool defaultPrevented = false;
    164     bool defaultHandled = false;
    165 
     161void PointerCaptureController::dispatchEventForTouchAtIndex(EventTarget& target, const PlatformTouchEvent& platformTouchEvent, unsigned index, bool isPrimary, WindowProxy& view)
     162{
    166163    auto dispatchEvent = [&](const String& type) {
    167         auto event = PointerEvent::create(type, platformTouchEvent, index, isPrimary, view);
    168         target.dispatchEvent(event);
    169         defaultPrevented |= event->defaultPrevented();
    170         defaultHandled |= event->defaultHandled();
     164        target.dispatchEvent(PointerEvent::create(type, platformTouchEvent, index, isPrimary, view));
    171165    };
    172166
     
    183177    pointerEventWillBeDispatched(pointerEvent, &target);
    184178    target.dispatchEvent(pointerEvent);
    185     defaultPrevented |= pointerEvent->defaultPrevented();
    186     defaultHandled |= pointerEvent->defaultHandled();
    187179    pointerEventWasDispatched(pointerEvent);
    188180
     
    194186        dispatchEvent(eventNames().pointerleaveEvent);
    195187    }
    196 
    197     return { defaultPrevented, defaultHandled };
    198188}
    199189#endif
  • trunk/Source/WebCore/page/PointerCaptureController.h

    r244423 r244598  
    5050
    5151#if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY)
    52     std::pair<bool, bool> dispatchEventForTouchAtIndex(EventTarget&, const PlatformTouchEvent&, unsigned, bool isPrimary, WindowProxy&);
     52    void dispatchEventForTouchAtIndex(EventTarget&, const PlatformTouchEvent&, unsigned, bool isPrimary, WindowProxy&);
    5353#endif
    5454
Note: See TracChangeset for help on using the changeset viewer.