blob: eab4f01d652b2b9423fd2e8eae72ca34650de208 [file] [log] [blame]
// Copyright 2014 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.
#ifndef COMPONENTS_TEST_RUNNER_GAMEPAD_CONTROLLER_H_
#define COMPONENTS_TEST_RUNNER_GAMEPAD_CONTROLLER_H_
#include <map>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/test_runner/test_runner_export.h"
#include "third_party/WebKit/public/platform/WebGamepads.h"
namespace blink {
class WebFrame;
class WebGamepadListener;
}
namespace test_runner {
class WebTestDelegate;
class TEST_RUNNER_EXPORT GamepadController
: public base::SupportsWeakPtr<GamepadController> {
public:
static base::WeakPtr<GamepadController> Create(WebTestDelegate* delegate);
~GamepadController();
void Reset();
void Install(blink::WebFrame* frame);
void SampleGamepads(blink::WebGamepads& gamepads);
void SetListener(blink::WebGamepadListener* listener);
private:
friend class GamepadControllerBindings;
GamepadController();
// TODO(b.kelemen): for historical reasons Connect just initializes the
// object. The 'gamepadconnected' event will be dispatched via
// DispatchConnected. Tests for connected events need to first connect(),
// then set the gamepad data and finally call dispatchConnected().
// We should consider renaming Connect to Init and DispatchConnected to
// Connect and at the same time updating all the gamepad tests.
void Connect(int index);
void DispatchConnected(int index);
void Disconnect(int index);
void SetId(int index, const std::string& src);
void SetButtonCount(int index, int buttons);
void SetButtonData(int index, int button, double data);
void SetAxisCount(int index, int axes);
void SetAxisData(int index, int axis, double data);
blink::WebGamepadListener* listener_;
blink::WebGamepads gamepads_;
// Mapping from gamepad index to connection state.
std::map<int, bool> pending_changes_;
base::WeakPtrFactory<GamepadController> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(GamepadController);
};
} // namespace test_runner
#endif // COMPONENTS_TEST_RUNNER_GAMEPAD_CONTROLLER_H_