| Index: content/browser/renderer_host/input/touch_event_queue.cc
|
| diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc
|
| index 6adc661be18c5394f4571ac2d037c11b74133cda..6bc5cb9421fa0af4fc974672985c7a697d3a4d7e 100644
|
| --- a/content/browser/renderer_host/input/touch_event_queue.cc
|
| +++ b/content/browser/renderer_host/input/touch_event_queue.cc
|
| @@ -46,14 +46,15 @@ bool ShouldTouchTriggerTimeout(const WebTouchEvent& event) {
|
| }
|
|
|
| // Compare all properties of touch points to determine the state.
|
| -bool HasPointChanged(const WebTouchPoint& last_point,
|
| - const WebTouchPoint& current_point) {
|
| - if (last_point.screenPosition != current_point.screenPosition ||
|
| - last_point.position != current_point.position ||
|
| - last_point.radiusX != current_point.radiusX ||
|
| - last_point.radiusY != current_point.radiusY ||
|
| - last_point.rotationAngle != current_point.rotationAngle ||
|
| - last_point.force != current_point.force) {
|
| +bool HasPointChanged(const WebTouchPoint& point_1,
|
| + const WebTouchPoint& point_2) {
|
| + DCHECK_EQ(point_1.id, point_2.id);
|
| + if (point_1.screenPosition != point_2.screenPosition ||
|
| + point_1.position != point_2.position ||
|
| + point_1.radiusX != point_2.radiusX ||
|
| + point_1.radiusY != point_2.radiusY ||
|
| + point_1.rotationAngle != point_2.rotationAngle ||
|
| + point_1.force != point_2.force) {
|
| return true;
|
| }
|
| return false;
|
| @@ -729,9 +730,24 @@ TouchEventQueue::FilterBeforeForwarding(const WebTouchEvent& event) {
|
| continue;
|
|
|
| for (size_t j = 0; j < last_sent_touchevent_->touchesLength; ++j) {
|
| - if (point.id == last_sent_touchevent_->touches[j].id)
|
| + if (point.id != last_sent_touchevent_->touches[j].id)
|
| + continue;
|
| +
|
| + if (event.type != WebInputEvent::TouchMove)
|
| + return FORWARD_TO_RENDERER;
|
| +
|
| + // All pointers in TouchMove events may have state as StateMoved,
|
| + // even though none of the pointers have not changed in real.
|
| + // Forward these events when at least one pointer has changed.
|
| + if (HasPointChanged(last_sent_touchevent_->touches[j], point))
|
| return FORWARD_TO_RENDERER;
|
| +
|
| + // This is a TouchMove event for which we have yet to find a
|
| + // non-stationary pointer. Continue checking the next pointers
|
| + // in the |event|.
|
| + break;
|
| }
|
| +
|
| }
|
| }
|
|
|
|
|