Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Unified Diff: content/browser/gamepad/gamepad_service.h

Issue 195873019: Gamepad API: add support for connection events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: and a missing override Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/gamepad/gamepad_provider.cc ('k') | content/browser/gamepad/gamepad_service.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/gamepad/gamepad_service.h
diff --git a/content/browser/gamepad/gamepad_service.h b/content/browser/gamepad/gamepad_service.h
index 94620b34b60f901c8b1bfb4865d3092eeb313ee8..60081884228fd400b360f60f69b7fb74fc51c127 100644
--- a/content/browser/gamepad/gamepad_service.h
+++ b/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);
};
« no previous file with comments | « content/browser/gamepad/gamepad_provider.cc ('k') | content/browser/gamepad/gamepad_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698