OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/devtools/protocol/input_handler.h" | |
6 | |
7 #include "base/strings/stringprintf.h" | |
8 #include "content/browser/renderer_host/render_view_host_impl.h" | |
9 #include "third_party/WebKit/public/web/WebInputEvent.h" | |
10 | |
11 namespace content { | |
12 namespace devtools { | |
13 namespace input { | |
14 | |
15 typedef DevToolsProtocolClient::Response Response; | |
16 | |
17 InputHandler::InputHandler() | |
18 : host_(NULL) { | |
19 } | |
20 | |
21 InputHandler::~InputHandler() { | |
22 } | |
23 | |
24 void InputHandler::SetRenderViewHost(RenderViewHostImpl* host) { | |
25 host_ = host; | |
26 } | |
27 | |
28 Response InputHandler::EmulateTouchFromMouseEvent(const std::string& type, | |
29 int x, | |
30 int y, | |
31 double timestamp, | |
32 const std::string& button, | |
33 double* delta_x, | |
34 double* delta_y, | |
35 int* modifiers, | |
36 int* click_count) { | |
37 blink::WebMouseWheelEvent wheel_event; | |
38 blink::WebMouseEvent mouse_event; | |
39 blink::WebMouseEvent* event = &mouse_event; | |
40 | |
41 if (type == emulate_touch_from_mouse_event::kTypeMousePressed) { | |
42 event->type = blink::WebInputEvent::MouseDown; | |
43 } else if (type == emulate_touch_from_mouse_event::kTypeMouseReleased) { | |
44 event->type = blink::WebInputEvent::MouseUp; | |
45 } else if (type == emulate_touch_from_mouse_event::kTypeMouseMoved) { | |
46 event->type = blink::WebInputEvent::MouseMove; | |
47 } else if (type == emulate_touch_from_mouse_event::kTypeMouseWheel) { | |
48 if (!delta_x || !delta_y) { | |
49 return Response::InvalidParams( | |
50 "'deltaX' and 'deltaY' are expected for mouseWheel event"); | |
51 } | |
52 wheel_event.deltaX = static_cast<float>(*delta_x); | |
53 wheel_event.deltaY = static_cast<float>(*delta_y); | |
54 event = &wheel_event; | |
55 event->type = blink::WebInputEvent::MouseWheel; | |
56 } else { | |
57 return Response::InvalidParams( | |
58 base::StringPrintf("Unexpected event type '%s'", type.c_str())); | |
59 } | |
60 | |
61 if (modifiers) { | |
62 if (*modifiers & 1) | |
63 event->modifiers |= blink::WebInputEvent::AltKey; | |
64 if (*modifiers & 2) | |
65 event->modifiers |= blink::WebInputEvent::ControlKey; | |
66 if (*modifiers & 4) | |
67 event->modifiers |= blink::WebInputEvent::MetaKey; | |
68 if (*modifiers & 8) | |
69 event->modifiers |= blink::WebInputEvent::ShiftKey; | |
70 } | |
71 | |
72 event->timeStampSeconds = timestamp; | |
73 event->x = x; | |
74 event->y = y; | |
75 event->windowX = x; | |
76 event->windowY = y; | |
77 event->globalX = x; | |
78 event->globalY = y; | |
79 | |
80 if (click_count) | |
81 event->clickCount = *click_count; | |
82 | |
83 if (button == emulate_touch_from_mouse_event::kButtonNone) { | |
84 event->button = blink::WebMouseEvent::ButtonNone; | |
85 } else if (button == emulate_touch_from_mouse_event::kButtonLeft) { | |
86 event->button = blink::WebMouseEvent::ButtonLeft; | |
87 event->modifiers |= blink::WebInputEvent::LeftButtonDown; | |
88 } else if (button == emulate_touch_from_mouse_event::kButtonMiddle) { | |
89 event->button = blink::WebMouseEvent::ButtonMiddle; | |
90 event->modifiers |= blink::WebInputEvent::MiddleButtonDown; | |
91 } else if (button == emulate_touch_from_mouse_event::kButtonRight) { | |
92 event->button = blink::WebMouseEvent::ButtonRight; | |
93 event->modifiers |= blink::WebInputEvent::RightButtonDown; | |
94 } else { | |
95 return Response::InvalidParams( | |
96 base::StringPrintf("Unexpected mouse button '%s'", button.c_str())); | |
97 } | |
98 | |
99 if (!host_) | |
100 return Response::ServerError("Could not connect to view"); | |
101 | |
102 if (event->type == blink::WebInputEvent::MouseWheel) | |
103 host_->ForwardWheelEvent(wheel_event); | |
104 else | |
105 host_->ForwardMouseEvent(mouse_event); | |
106 return Response::OK(); | |
107 } | |
108 | |
109 } // namespace input | |
110 } // namespace devtools | |
111 } // namespace content | |
OLD | NEW |