| Index: content/shell/renderer/test_runner/GamepadController.cpp
|
| diff --git a/content/shell/renderer/test_runner/GamepadController.cpp b/content/shell/renderer/test_runner/GamepadController.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..559585b37622a988e726083a3275d58d4be8e710
|
| --- /dev/null
|
| +++ b/content/shell/renderer/test_runner/GamepadController.cpp
|
| @@ -0,0 +1,173 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/shell/renderer/test_runner/GamepadController.h"
|
| +
|
| +#include "content/shell/renderer/test_runner/WebTestDelegate.h"
|
| +
|
| +using namespace blink;
|
| +
|
| +namespace WebTestRunner {
|
| +
|
| +GamepadController::GamepadController()
|
| +{
|
| + bindMethod("connect", &GamepadController::connect);
|
| + bindMethod("disconnect", &GamepadController::disconnect);
|
| + bindMethod("setId", &GamepadController::setId);
|
| + bindMethod("setButtonCount", &GamepadController::setButtonCount);
|
| + bindMethod("setButtonData", &GamepadController::setButtonData);
|
| + bindMethod("setAxisCount", &GamepadController::setAxisCount);
|
| + bindMethod("setAxisData", &GamepadController::setAxisData);
|
| +
|
| + bindFallbackMethod(&GamepadController::fallbackCallback);
|
| +
|
| + reset();
|
| +}
|
| +
|
| +void GamepadController::bindToJavascript(WebFrame* frame, const WebString& classname)
|
| +{
|
| + CppBoundClass::bindToJavascript(frame, classname);
|
| +}
|
| +
|
| +void GamepadController::setDelegate(WebTestDelegate* delegate)
|
| +{
|
| + m_delegate = delegate;
|
| +}
|
| +
|
| +void GamepadController::reset()
|
| +{
|
| + memset(&m_gamepads, 0, sizeof(m_gamepads));
|
| +}
|
| +
|
| +void GamepadController::connect(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 1) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + m_gamepads.items[index].connected = true;
|
| + m_gamepads.length = 0;
|
| + for (unsigned i = 0; i < blink::WebGamepads::itemsLengthCap; ++i)
|
| + if (m_gamepads.items[i].connected)
|
| + m_gamepads.length = i + 1;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::disconnect(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 1) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + m_gamepads.items[index].connected = false;
|
| + m_gamepads.length = 0;
|
| + for (unsigned i = 0; i < blink::WebGamepads::itemsLengthCap; ++i)
|
| + if (m_gamepads.items[i].connected)
|
| + m_gamepads.length = i + 1;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::setId(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 2) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + std::string src = args[1].toString();
|
| + const char* p = src.c_str();
|
| + memset(m_gamepads.items[index].id, 0, sizeof(m_gamepads.items[index].id));
|
| + for (unsigned i = 0; *p && i < blink::WebGamepad::idLengthCap - 1; ++i)
|
| + m_gamepads.items[index].id[i] = *p++;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::setButtonCount(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 2) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + int buttons = args[1].toInt32();
|
| + if (buttons < 0 || buttons >= static_cast<int>(blink::WebGamepad::buttonsLengthCap))
|
| + return;
|
| + m_gamepads.items[index].buttonsLength = buttons;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::setButtonData(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 3) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + int button = args[1].toInt32();
|
| + if (button < 0 || button >= static_cast<int>(blink::WebGamepad::buttonsLengthCap))
|
| + return;
|
| + double data = args[2].toDouble();
|
| + m_gamepads.items[index].buttons[button] = data;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::setAxisCount(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 2) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + int axes = args[1].toInt32();
|
| + if (axes < 0 || axes >= static_cast<int>(blink::WebGamepad::axesLengthCap))
|
| + return;
|
| + m_gamepads.items[index].axesLength = axes;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::setAxisData(const CppArgumentList& args, CppVariant* result)
|
| +{
|
| + if (args.size() < 3) {
|
| + m_delegate->printMessage("Invalid args");
|
| + return;
|
| + }
|
| + int index = args[0].toInt32();
|
| + if (index < 0 || index >= static_cast<int>(blink::WebGamepads::itemsLengthCap))
|
| + return;
|
| + int axis = args[1].toInt32();
|
| + if (axis < 0 || axis >= static_cast<int>(blink::WebGamepad::axesLengthCap))
|
| + return;
|
| + double data = args[2].toDouble();
|
| + m_gamepads.items[index].axes[axis] = data;
|
| + m_delegate->setGamepadData(m_gamepads);
|
| + result->setNull();
|
| +}
|
| +
|
| +void GamepadController::fallbackCallback(const CppArgumentList&, CppVariant* result)
|
| +{
|
| + m_delegate->printMessage("CONSOLE MESSAGE: JavaScript ERROR: unknown method called on GamepadController\n");
|
| + result->setNull();
|
| +}
|
| +
|
| +}
|
|
|