| Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| index 301e853c96863ced66d6d649ca5744ccbc80000b..456df865bfb62fe97238f10e4670c01efbca9446 100644
|
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| @@ -33,6 +33,22 @@ bool HasPointerEventListener(const EventHandlerRegistry& registry) {
|
| return registry.HasEventHandlers(EventHandlerRegistry::kPointerEvent);
|
| }
|
|
|
| +Vector<WebPointerEvent> GetCoalescedWebPointerEventsWithNoTransformation(
|
| + const Vector<WebTouchEvent>& coalesced_events,
|
| + int id) {
|
| + Vector<WebPointerEvent> related_pointer_events;
|
| + for (const auto& touch_event : coalesced_events) {
|
| + for (unsigned i = 0; i < touch_event.touches_length; ++i) {
|
| + if (touch_event.touches[i].id == id &&
|
| + touch_event.touches[i].state != WebTouchPoint::kStateStationary) {
|
| + related_pointer_events.push_back(
|
| + WebPointerEvent(touch_event, touch_event.touches[i]));
|
| + }
|
| + }
|
| + }
|
| + return related_pointer_events;
|
| +}
|
| +
|
| Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints(
|
| const Vector<WebTouchEvent>& coalesced_events,
|
| int id) {
|
| @@ -324,7 +340,6 @@ WebInputEventResult PointerEventManager::HandleTouchEvents(
|
| }
|
| UserGestureIndicator holder(possible_gesture_token);
|
|
|
| - HeapVector<EventHandlingUtil::PointerEventTarget> pointer_event_targets;
|
|
|
| for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length;
|
| ++touch_point_idx) {
|
| @@ -334,17 +349,26 @@ WebInputEventResult PointerEventManager::HandleTouchEvents(
|
| EventHandlingUtil::PointerEventTarget pointer_event_target =
|
| touch_point_idx ? ComputePointerEventTarget(touch_point)
|
| : first_pointer_event_target;
|
| - pointer_event_targets.push_back(pointer_event_target);
|
|
|
| - DispatchTouchPointerEvent(
|
| - touch_point, pointer_event_target,
|
| - GetCoalescedPoints(coalesced_events, touch_point.id),
|
| - static_cast<WebInputEvent::Modifiers>(event.GetModifiers()),
|
| - event.TimeStampSeconds(), event.unique_touch_event_id);
|
| + if (touch_point.state != blink::WebTouchPoint::kStateStationary) {
|
| + DispatchTouchPointerEvent(
|
| + touch_point, pointer_event_target,
|
| + GetCoalescedPoints(coalesced_events, touch_point.id),
|
| + static_cast<WebInputEvent::Modifiers>(event.GetModifiers()),
|
| + event.TimeStampSeconds(), event.unique_touch_event_id);
|
| +
|
| + touch_event_manager_->HandleTouchPoint(
|
| + WebPointerEvent(event, event.touches[touch_point_idx]),
|
| + GetCoalescedWebPointerEventsWithNoTransformation(
|
| + coalesced_events, event.touches[touch_point_idx].id),
|
| + pointer_event_target);
|
| + }
|
| }
|
|
|
| - return touch_event_manager_->HandleTouchEvent(event, coalesced_events,
|
| - pointer_event_targets);
|
| + // Calling this function |FlushEvents| will be moved to MainThreadEventQueue
|
| + // class. It will be called before rAF and also whenever we run in low latency
|
| + // mode as mentioned in crbug.com/728250.
|
| + return touch_event_manager_->FlushEvents();
|
| }
|
|
|
| EventHandlingUtil::PointerEventTarget
|
| @@ -410,7 +434,6 @@ void PointerEventManager::DispatchTouchPointerEvent(
|
| // required.
|
| // Do not send pointer events for stationary touches or null targetFrame
|
| if (pointer_event_target.target_node && pointer_event_target.target_frame &&
|
| - touch_point.state != WebTouchPoint::kStateStationary &&
|
| !in_canceled_state_for_pointer_type_touch_) {
|
| PointerEvent* pointer_event = pointer_event_factory_.Create(
|
| touch_point, coalesced_events,
|
|
|