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, |