Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / content / shell / renderer / test_runner / GamepadController.cpp
1 // Copyright 2013 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/shell/renderer/test_runner/GamepadController.h"
6
7 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
8
9 using namespace blink;
10
11 namespace WebTestRunner {
12
13 GamepadController::GamepadController()
14 {
15     bindMethod("connect", &GamepadController::connect);
16     bindMethod("disconnect", &GamepadController::disconnect);
17     bindMethod("setId", &GamepadController::setId);
18     bindMethod("setButtonCount", &GamepadController::setButtonCount);
19     bindMethod("setButtonData", &GamepadController::setButtonData);
20     bindMethod("setAxisCount", &GamepadController::setAxisCount);
21     bindMethod("setAxisData", &GamepadController::setAxisData);
22
23     bindFallbackMethod(&GamepadController::fallbackCallback);
24
25     reset();
26 }
27
28 void GamepadController::bindToJavascript(WebFrame* frame, const WebString& classname)
29 {
30     CppBoundClass::bindToJavascript(frame, classname);
31 }
32
33 void GamepadController::setDelegate(WebTestDelegate* delegate)
34 {
35     m_delegate = delegate;
36 }
37
38 void GamepadController::reset()
39 {
40     memset(&m_gamepads, 0, sizeof(m_gamepads));
41 }
42
43 void GamepadController::connect(const CppArgumentList& args, CppVariant* result)
44 {
45     if (args.size() < 1) {
46         m_delegate->printMessage("Invalid args");
47         return;
48     }
49     int index = args[0].toInt32();
50     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
51         return;
52     m_gamepads.items[index].connected = true;
53     m_gamepads.length = 0;
54     for (unsigned i = 0; i < blink::WebGamepads::itemsLengthCap; ++i)
55         if (m_gamepads.items[i].connected)
56             m_gamepads.length = i + 1;
57     m_delegate->setGamepadData(m_gamepads);
58     result->setNull();
59 }
60
61 void GamepadController::disconnect(const CppArgumentList& args, CppVariant* result)
62 {
63     if (args.size() < 1) {
64         m_delegate->printMessage("Invalid args");
65         return;
66     }
67     int index = args[0].toInt32();
68     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
69         return;
70     m_gamepads.items[index].connected = false;
71     m_gamepads.length = 0;
72     for (unsigned i = 0; i < blink::WebGamepads::itemsLengthCap; ++i)
73         if (m_gamepads.items[i].connected)
74             m_gamepads.length = i + 1;
75     m_delegate->setGamepadData(m_gamepads);
76     result->setNull();
77 }
78
79 void GamepadController::setId(const CppArgumentList& args, CppVariant* result)
80 {
81     if (args.size() < 2) {
82         m_delegate->printMessage("Invalid args");
83         return;
84     }
85     int index = args[0].toInt32();
86     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
87         return;
88     std::string src = args[1].toString();
89     const char* p = src.c_str();
90     memset(m_gamepads.items[index].id, 0, sizeof(m_gamepads.items[index].id));
91     for (unsigned i = 0; *p && i < blink::WebGamepad::idLengthCap - 1; ++i)
92         m_gamepads.items[index].id[i] = *p++;
93     m_delegate->setGamepadData(m_gamepads);
94     result->setNull();
95 }
96
97 void GamepadController::setButtonCount(const CppArgumentList& args, CppVariant* result)
98 {
99     if (args.size() < 2) {
100         m_delegate->printMessage("Invalid args");
101         return;
102     }
103     int index = args[0].toInt32();
104     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
105         return;
106     int buttons = args[1].toInt32();
107     if (buttons < 0 || buttons >= static_cast<int>(blink::WebGamepad::buttonsLengthCap))
108         return;
109     m_gamepads.items[index].buttonsLength = buttons;
110     m_delegate->setGamepadData(m_gamepads);
111     result->setNull();
112 }
113
114 void GamepadController::setButtonData(const CppArgumentList& args, CppVariant* result)
115 {
116     if (args.size() < 3) {
117         m_delegate->printMessage("Invalid args");
118         return;
119     }
120     int index = args[0].toInt32();
121     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
122         return;
123     int button = args[1].toInt32();
124     if (button < 0 || button >= static_cast<int>(blink::WebGamepad::buttonsLengthCap))
125         return;
126     double data = args[2].toDouble();
127     m_gamepads.items[index].buttons[button] = data;
128     m_delegate->setGamepadData(m_gamepads);
129     result->setNull();
130 }
131
132 void GamepadController::setAxisCount(const CppArgumentList& args, CppVariant* result)
133 {
134     if (args.size() < 2) {
135         m_delegate->printMessage("Invalid args");
136         return;
137     }
138     int index = args[0].toInt32();
139     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
140         return;
141     int axes = args[1].toInt32();
142     if (axes < 0 || axes >= static_cast<int>(blink::WebGamepad::axesLengthCap))
143         return;
144     m_gamepads.items[index].axesLength = axes;
145     m_delegate->setGamepadData(m_gamepads);
146     result->setNull();
147 }
148
149 void GamepadController::setAxisData(const CppArgumentList& args, CppVariant* result)
150 {
151     if (args.size() < 3) {
152         m_delegate->printMessage("Invalid args");
153         return;
154     }
155     int index = args[0].toInt32();
156     if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
157         return;
158     int axis = args[1].toInt32();
159     if (axis < 0 || axis >= static_cast<int>(blink::WebGamepad::axesLengthCap))
160         return;
161     double data = args[2].toDouble();
162     m_gamepads.items[index].axes[axis] = data;
163     m_delegate->setGamepadData(m_gamepads);
164     result->setNull();
165 }
166
167 void GamepadController::fallbackCallback(const CppArgumentList&, CppVariant* result)
168 {
169     m_delegate->printMessage("CONSOLE MESSAGE: JavaScript ERROR: unknown method called on GamepadController\n");
170     result->setNull();
171 }
172
173 }