1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/html_viewer/blink_input_events_type_converters.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/logging.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/time/time.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/services/public/interfaces/input_events/input_event_constants.mojom.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/web/WebInputEvent.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Used for scrolling. This matches Firefox behavior.
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int kPixelsPerTick = 53;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint EventFlagsToWebEventModifiers(int flags) {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int modifiers = 0;
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_SHIFT_DOWN)
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::ShiftKey;
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_CONTROL_DOWN)
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::ControlKey;
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_ALT_DOWN)
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::AltKey;
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(beng): MetaKey/META_MASK
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON)
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::LeftButtonDown;
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_MIDDLE_MOUSE_BUTTON)
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::MiddleButtonDown;
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_RIGHT_MOUSE_BUTTON)
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::RightButtonDown;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::EVENT_FLAGS_CAPS_LOCK_DOWN)
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    modifiers |= blink::WebInputEvent::CapsLockOn;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return modifiers;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint EventFlagsToWebInputEventModifiers(int flags) {
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      (flags & mojo::EVENT_FLAGS_SHIFT_DOWN ?
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)       blink::WebInputEvent::ShiftKey : 0) |
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      (flags & mojo::EVENT_FLAGS_CONTROL_DOWN ?
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)       blink::WebInputEvent::ControlKey : 0) |
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      (flags & mojo::EVENT_FLAGS_CAPS_LOCK_DOWN ?
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)       blink::WebInputEvent::CapsLockOn : 0) |
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      (flags & mojo::EVENT_FLAGS_ALT_DOWN ?
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)       blink::WebInputEvent::AltKey : 0);
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint GetClickCount(int flags) {
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (flags & mojo::MOUSE_EVENT_FLAGS_IS_TRIPLE_CLICK)
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return 3;
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  else if (flags & mojo::MOUSE_EVENT_FLAGS_IS_DOUBLE_CLICK)
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return 2;
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return 1;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<blink::WebInputEvent> BuildWebMouseEventFrom(const EventPtr& event) {
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<blink::WebMouseEvent> web_event(new blink::WebMouseEvent);
6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->x = event->location_data->in_view_location->x;
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->y = event->location_data->in_view_location->y;
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // TODO(erg): Remove this if check once we can rely on screen_location
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // actually being passed to us. As written today, getting the screen
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // location from ui::Event objects can only be done by querying the
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // underlying native events, so all synthesized events don't have screen
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // locations.
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!event->location_data->screen_location.is_null()) {
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->globalX = event->location_data->screen_location->x;
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->globalY = event->location_data->screen_location->y;
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->modifiers = EventFlagsToWebEventModifiers(event->flags);
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->timeStampSeconds =
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::TimeDelta::FromInternalValue(event->time_stamp).InSecondsF();
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->button = blink::WebMouseEvent::ButtonNone;
8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (event->flags & mojo::EVENT_FLAGS_LEFT_MOUSE_BUTTON)
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->button = blink::WebMouseEvent::ButtonLeft;
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (event->flags & mojo::EVENT_FLAGS_MIDDLE_MOUSE_BUTTON)
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->button = blink::WebMouseEvent::ButtonMiddle;
8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (event->flags & mojo::EVENT_FLAGS_RIGHT_MOUSE_BUTTON)
8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->button = blink::WebMouseEvent::ButtonRight;
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  switch (event->action) {
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_PRESSED:
8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->type = blink::WebInputEvent::MouseDown;
9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_RELEASED:
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->type = blink::WebInputEvent::MouseUp;
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_ENTERED:
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->type = blink::WebInputEvent::MouseLeave;
9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->button = blink::WebMouseEvent::ButtonNone;
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_EXITED:
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_MOVED:
10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_MOUSE_DRAGGED:
10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->type = blink::WebInputEvent::MouseMove;
10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    default:
10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      NOTIMPLEMENTED() << "Received unexpected event: " << event->action;
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->clickCount = GetClickCount(event->flags);
10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return web_event.PassAs<blink::WebInputEvent>();
11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<blink::WebInputEvent> BuildWebKeyboardEvent(
11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    const EventPtr& event) {
11503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<blink::WebKeyboardEvent> web_event(new blink::WebKeyboardEvent);
11603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->modifiers = EventFlagsToWebInputEventModifiers(event->flags);
11803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->timeStampSeconds =
11903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::TimeDelta::FromInternalValue(event->time_stamp).InSecondsF();
12003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
12103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  switch (event->action) {
12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_KEY_PRESSED:
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      web_event->type = event->key_data->is_char ? blink::WebInputEvent::Char :
12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          blink::WebInputEvent::RawKeyDown;
12503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
12603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    case EVENT_TYPE_KEY_RELEASED:
12703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      web_event->type = blink::WebInputEvent::KeyUp;
12803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      break;
12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    default:
13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      NOTREACHED();
13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (web_event->modifiers & blink::WebInputEvent::AltKey)
13403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->isSystemKey = true;
13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->windowsKeyCode = event->key_data->windows_key_code;
13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->nativeKeyCode = event->key_data->native_key_code;
13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->text[0] = event->key_data->text;
13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->unmodifiedText[0] = event->key_data->unmodified_text;
14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->setKeyIdentifierFromWindowsKeyCode();
14203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return web_event.PassAs<blink::WebInputEvent>();
14303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<blink::WebInputEvent> BuildWebMouseWheelEventFrom(
14603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    const EventPtr& event) {
14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<blink::WebMouseWheelEvent> web_event(
14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      new blink::WebMouseWheelEvent);
14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->type = blink::WebInputEvent::MouseWheel;
15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->button = blink::WebMouseEvent::ButtonNone;
15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->modifiers = EventFlagsToWebEventModifiers(event->flags);
15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->timeStampSeconds =
15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::TimeDelta::FromInternalValue(event->time_stamp).InSecondsF();
15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->x = event->location_data->in_view_location->x;
15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->y = event->location_data->in_view_location->y;
15703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
15803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // TODO(erg): Remove this null check as parallel to above.
15903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!event->location_data->screen_location.is_null()) {
16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->globalX = event->location_data->screen_location->x;
16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->globalY = event->location_data->screen_location->y;
16203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
16303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
16403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if ((event->flags & mojo::EVENT_FLAGS_SHIFT_DOWN) != 0 &&
16503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      event->wheel_data->x_offset == 0) {
16603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->deltaX = event->wheel_data->y_offset;
16703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->deltaY = 0;
16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  } else {
16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->deltaX = event->wheel_data->x_offset;
17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    web_event->deltaY = event->wheel_data->y_offset;
17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->wheelTicksX = web_event->deltaX / kPixelsPerTick;
17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  web_event->wheelTicksY = web_event->deltaY / kPixelsPerTick;
17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return web_event.PassAs<blink::WebInputEvent>();
17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
17803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_ptr<blink::WebInputEvent>
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTypeConverter<scoped_ptr<blink::WebInputEvent>, EventPtr>::Convert(
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const EventPtr& event) {
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (event->action == EVENT_TYPE_MOUSE_PRESSED ||
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event->action == EVENT_TYPE_MOUSE_RELEASED ||
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event->action == EVENT_TYPE_MOUSE_ENTERED ||
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event->action == EVENT_TYPE_MOUSE_EXITED ||
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event->action == EVENT_TYPE_MOUSE_MOVED ||
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event->action == EVENT_TYPE_MOUSE_DRAGGED) {
19103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return BuildWebMouseEventFrom(event);
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if ((event->action == EVENT_TYPE_KEY_PRESSED ||
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              event->action == EVENT_TYPE_KEY_RELEASED) &&
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch             event->key_data) {
19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return BuildWebKeyboardEvent(event);
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (event->action == EVENT_TYPE_MOUSEWHEEL) {
19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return BuildWebMouseWheelEventFrom(event);
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return scoped_ptr<blink::WebInputEvent>();
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
204