// 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 #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 { public: static base::WeakPtr 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 pending_changes_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(GamepadController); }; } // namespace test_runner #endif // COMPONENTS_TEST_RUNNER_GAMEPAD_CONTROLLER_H_