|  | // 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_ |