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); |
} |
} |