diff options
Diffstat (limited to 'chromium/content/browser/gamepad/gamepad_service.h')
-rw-r--r-- | chromium/content/browser/gamepad/gamepad_service.h | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/chromium/content/browser/gamepad/gamepad_service.h b/chromium/content/browser/gamepad/gamepad_service.h index 94620b34b60..60081884228 100644 --- a/chromium/content/browser/gamepad/gamepad_service.h +++ b/chromium/content/browser/gamepad/gamepad_service.h @@ -5,6 +5,8 @@ #ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_SERVICE_H #define CONTENT_BROWSER_GAMEPAD_GAMEPAD_SERVICE_H +#include <set> + #include "base/basictypes.h" #include "base/callback_forward.h" #include "base/memory/scoped_ptr.h" @@ -13,8 +15,13 @@ #include "base/threading/thread_checker.h" #include "content/common/content_export.h" +namespace blink { +class WebGamepad; +} + namespace content { +class GamepadConsumer; class GamepadDataFetcher; class GamepadProvider; class GamepadServiceTestConstructor; @@ -30,14 +37,28 @@ class CONTENT_EXPORT GamepadService { // Increments the number of users of the provider. The Provider is running // when there's > 0 users, and is paused when the count drops to 0. + // consumer is registered to listen for gamepad connections. If this is the + // first time it is added to the set of consumers it will be treated + // specially: it will not be informed about connections before a new user + // gesture is observed at which point it will be notified for every connected + // gamepads. // // Must be called on the I/O thread. - void AddConsumer(); + void ConsumerBecameActive(GamepadConsumer* consumer); - // Removes a consumer. Should be matched with an AddConsumer call. + // Decrements the number of users of the provider. consumer will not be + // informed about connections until it's added back via ConsumerBecameActive. + // Must be matched with a ConsumerBecameActive call. // // Must be called on the I/O thread. - void RemoveConsumer(); + void ConsumerBecameInactive(GamepadConsumer* consumer); + + // Decrements the number of users of the provider and removes consumer from + // the set of consumers. Should be matched with a a ConsumerBecameActive + // call. + // + // Must be called on the I/O thread. + void RemoveConsumer(GamepadConsumer* consumer); // Registers the given closure for calling when the user has interacted with // the device. This callback will only be issued once. Should only be called @@ -52,6 +73,12 @@ class CONTENT_EXPORT GamepadService { // Stop/join with the background thread in GamepadProvider |provider_|. void Terminate(); + // Called on IO thread when a gamepad is connected. + void OnGamepadConnected(int index, const blink::WebGamepad& pad); + + // Called on IO thread when a gamepad is disconnected. + void OnGamepadDisconnected(int index, const blink::WebGamepad& pad); + private: friend struct DefaultSingletonTraits<GamepadService>; friend class GamepadServiceTestConstructor; @@ -64,11 +91,34 @@ class CONTENT_EXPORT GamepadService { virtual ~GamepadService(); - int num_readers_; + void OnUserGesture(); + + struct ConsumerInfo { + ConsumerInfo(GamepadConsumer* consumer) + : consumer(consumer), + did_observe_user_gesture(false) { + } + + bool operator<(const ConsumerInfo& other) const { + return consumer < other.consumer; + } + + GamepadConsumer* consumer; + mutable bool is_active; + mutable bool did_observe_user_gesture; + }; + scoped_ptr<GamepadProvider> provider_; base::ThreadChecker thread_checker_; + typedef std::set<ConsumerInfo> ConsumerSet; + ConsumerSet consumers_; + + int num_active_consumers_; + + bool gesture_callback_pending_; + DISALLOW_COPY_AND_ASSIGN(GamepadService); }; |