Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
| diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
| index 49ee8e48f09e47f0b9305899e12443c993a9e26f..4fd23fe14bccdcdba248145a345a6428763ffed0 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
| @@ -1140,21 +1140,38 @@ void RenderWidgetHostViewAura::GestureEventAck( |
| void RenderWidgetHostViewAura::ProcessAckedTouchEvent( |
| const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) { |
| - ScopedVector<ui::TouchEvent> events; |
| - if (!MakeUITouchEventsFromWebTouchEvents(touch, &events, |
| - SCREEN_COORDINATES)) |
| - return; |
| - |
| aura::WindowTreeHost* host = window_->GetHost(); |
| - // |host| is NULL during tests. |
| + // |host| is sometimes NULL during tests. |
| if (!host) |
| return; |
| ui::EventResult result = (ack_result == |
| INPUT_EVENT_ACK_STATE_CONSUMED) ? ui::ER_HANDLED : ui::ER_UNHANDLED; |
| - for (ScopedVector<ui::TouchEvent>::iterator iter = events.begin(), |
| - end = events.end(); iter != end; ++iter) { |
| - host->dispatcher()->ProcessedTouchEvent((*iter), window_, result); |
| + |
| + // Only send acks for changed touches. |
| + blink::WebTouchPoint::State required_state; |
| + switch(touch.event.type) { |
| + case blink::WebInputEvent::TouchStart: |
| + required_state = blink::WebTouchPoint::StatePressed; |
| + break; |
| + case blink::WebInputEvent::TouchEnd: |
| + required_state = blink::WebTouchPoint::StateReleased; |
| + break; |
| + case blink::WebInputEvent::TouchMove: |
| + required_state = blink::WebTouchPoint::StateMoved; |
| + break; |
| + case blink::WebInputEvent::TouchCancel: |
| + required_state = blink::WebTouchPoint::StateCancelled; |
| + break; |
| + default: |
| + required_state = blink::WebTouchPoint::StateUndefined; |
| + DCHECK(false); |
|
tdresser
2014/12/03 19:49:52
Should be NOTREACHED().
tdresser
2015/02/06 17:43:49
Done.
|
| + break; |
| + } |
| + |
| + for (size_t i = 0; i < touch.event.touchesLength; ++i) { |
| + if (touch.event.touches[i].state == required_state) |
| + host->dispatcher()->ProcessedTouchEvent(window_, result); |
| } |
| } |