14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/input/synthetic_web_input_event_builders.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h"
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/common/input/web_touch_event_traits.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace content {
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent;
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebKeyboardEvent;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGestureEvent;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseEvent;
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseWheelEvent;
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTouchEvent;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTouchPoint;
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebMouseEvent SyntheticWebMouseEventBuilder::Build(
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebInputEvent::Type type) {
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebMouseEvent result;
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.type = type;
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebMouseEvent SyntheticWebMouseEventBuilder::Build(
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebInputEvent::Type type,
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    int window_x,
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    int window_y,
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    int modifiers) {
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(WebInputEvent::isMouseEventType(type));
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebMouseEvent result = Build(type);
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.x = window_x;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.y = window_y;
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.windowX = window_x;
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.windowY = window_y;
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.modifiers = modifiers;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (type == WebInputEvent::MouseDown || type == WebInputEvent::MouseUp)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    result.button = WebMouseEvent::ButtonLeft;
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  else
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    result.button = WebMouseEvent::ButtonNone;
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebMouseWheelEvent SyntheticWebMouseWheelEventBuilder::Build(
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WebMouseWheelEvent::Phase phase) {
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebMouseWheelEvent result;
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.type = WebInputEvent::MouseWheel;
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.phase = phase;
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebMouseWheelEvent SyntheticWebMouseWheelEventBuilder::Build(float dx,
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                                             float dy,
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                                             int modifiers,
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                                             bool precise) {
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebMouseWheelEvent result;
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.type = WebInputEvent::MouseWheel;
634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.deltaX = dx;
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.deltaY = dy;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (dx)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    result.wheelTicksX = dx > 0.0f ? 1.0f : -1.0f;
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (dy)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    result.wheelTicksY = dy > 0.0f ? 1.0f : -1.0f;
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.modifiers = modifiers;
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.hasPreciseScrollingDeltas = precise;
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)WebKeyboardEvent SyntheticWebKeyboardEventBuilder::Build(
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WebInputEvent::Type type) {
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(WebInputEvent::isKeyboardEventType(type));
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  WebKeyboardEvent result;
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.type = type;
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.windowsKeyCode = ui::VKEY_L;  // non-null made up value.
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebGestureEvent SyntheticWebGestureEventBuilder::Build(
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WebInputEvent::Type type,
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    blink::WebGestureDevice source_device) {
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(WebInputEvent::isGestureEventType(type));
874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebGestureEvent result;
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.type = type;
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.sourceDevice = source_device;
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (type == WebInputEvent::GestureTap ||
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      type == WebInputEvent::GestureTapUnconfirmed ||
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      type == WebInputEvent::GestureDoubleTap) {
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    result.data.tap.tapCount = 1;
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    result.data.tap.width = 10;
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    result.data.tap.height = 10;
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)WebGestureEvent SyntheticWebGestureEventBuilder::BuildScrollBegin(
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    float dx_hint,
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    float dy_hint) {
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  WebGestureEvent result = Build(WebInputEvent::GestureScrollBegin,
10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 blink::WebGestureDeviceTouchscreen);
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  result.data.scrollBegin.deltaXHint = dx_hint;
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  result.data.scrollBegin.deltaYHint = dy_hint;
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return result;
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebGestureEvent SyntheticWebGestureEventBuilder::BuildScrollUpdate(
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float dx,
1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float dy,
1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int modifiers) {
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebGestureEvent result = Build(WebInputEvent::GestureScrollUpdate,
11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                 blink::WebGestureDeviceTouchscreen);
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.data.scrollUpdate.deltaX = dx;
1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.data.scrollUpdate.deltaY = dy;
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.modifiers = modifiers;
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebGestureEvent SyntheticWebGestureEventBuilder::BuildPinchUpdate(
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float scale,
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float anchor_x,
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float anchor_y,
126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    int modifiers,
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    blink::WebGestureDevice source_device) {
128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  WebGestureEvent result =
129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      Build(WebInputEvent::GesturePinchUpdate, source_device);
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.data.pinchUpdate.scale = scale;
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.x = anchor_x;
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.y = anchor_y;
133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  result.globalX = anchor_x;
134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  result.globalY = anchor_y;
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.modifiers = modifiers;
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebGestureEvent SyntheticWebGestureEventBuilder::BuildFling(
1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float velocity_x,
1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float velocity_y,
14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    blink::WebGestureDevice source_device) {
1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebGestureEvent result = Build(WebInputEvent::GestureFlingStart,
1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                 source_device);
1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.data.flingStart.velocityX = velocity_x;
1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result.data.flingStart.velocityY = velocity_y;
1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return result;
1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)SyntheticWebTouchEvent::SyntheticWebTouchEvent() : WebTouchEvent() {
15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetTimestamp(base::TimeTicks::Now() - base::TimeTicks());
15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SyntheticWebTouchEvent::ResetPoints() {
1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int point = 0;
1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (unsigned int i = 0; i < touchesLength; ++i) {
1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (touches[i].state == WebTouchPoint::StateReleased)
1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      continue;
1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    touches[point] = touches[i];
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    touches[point].state = WebTouchPoint::StateStationary;
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ++point;
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  touchesLength = point;
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  type = WebInputEvent::Undefined;
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
16823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)int SyntheticWebTouchEvent::PressPoint(float x, float y) {
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (touchesLength == touchesLengthCap)
1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return -1;
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebTouchPoint& point = touches[touchesLength];
1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.id = touchesLength;
1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.position.x = point.screenPosition.x = x;
1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.position.y = point.screenPosition.y = y;
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.state = WebTouchPoint::StatePressed;
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.radiusX = point.radiusY = 1.f;
1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ++touchesLength;
1785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  WebTouchEventTraits::ResetType(
1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      WebInputEvent::TouchStart, timeStampSeconds, this);
1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return point.id;
1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
18323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void SyntheticWebTouchEvent::MovePoint(int index, float x, float y) {
1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CHECK(index >= 0 && index < touchesLengthCap);
1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  WebTouchPoint& point = touches[index];
1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.position.x = point.screenPosition.x = x;
1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  point.position.y = point.screenPosition.y = y;
1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  touches[index].state = WebTouchPoint::StateMoved;
1895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  WebTouchEventTraits::ResetType(
1905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      WebInputEvent::TouchMove, timeStampSeconds, this);
1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SyntheticWebTouchEvent::ReleasePoint(int index) {
1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CHECK(index >= 0 && index < touchesLengthCap);
1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  touches[index].state = WebTouchPoint::StateReleased;
1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  WebTouchEventTraits::ResetType(
1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      WebInputEvent::TouchEnd, timeStampSeconds, this);
1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SyntheticWebTouchEvent::CancelPoint(int index) {
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CHECK(index >= 0 && index < touchesLengthCap);
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  touches[index].state = WebTouchPoint::StateCancelled;
2035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  WebTouchEventTraits::ResetType(
2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      WebInputEvent::TouchCancel, timeStampSeconds, this);
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SyntheticWebTouchEvent::SetTimestamp(base::TimeDelta timestamp) {
2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  timeStampSeconds = timestamp.InSecondsF();
2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace content
212