Index: content/browser/gamepad/gamepad_provider.h |
diff --git a/content/browser/gamepad/gamepad_provider.h b/content/browser/gamepad/gamepad_provider.h |
index 22c39c58495f740e4f06478f8dca6d1f16d554cb..c4a7806cfc428087ec8a2f532aaf3e9e1e9934f3 100644 |
--- a/content/browser/gamepad/gamepad_provider.h |
+++ b/content/browser/gamepad/gamepad_provider.h |
@@ -5,6 +5,11 @@ |
#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_PROVIDER_H_ |
#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_PROVIDER_H_ |
+#include <utility> |
+#include <vector> |
+ |
+#include "base/callback_forward.h" |
+#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
#include "base/message_loop_proxy.h" |
@@ -14,6 +19,7 @@ |
#include "content/common/content_export.h" |
namespace base { |
+class MessageLoopProxy; |
class Thread; |
} |
@@ -25,13 +31,16 @@ struct GamepadHardwareBuffer; |
class CONTENT_EXPORT GamepadProvider : |
public base::SystemMonitor::DevicesChangedObserver { |
public: |
- explicit GamepadProvider(); |
- virtual ~GamepadProvider(); |
+ GamepadProvider(); |
- // Set the platform-specific data fetcher. Mostly used for testing. |
- void SetDataFetcher(GamepadDataFetcher* fetcher); |
+ // Manually specifies the data fetcher. Used for testing. |
+ explicit GamepadProvider(scoped_ptr<GamepadDataFetcher> fetcher); |
+ |
+ virtual ~GamepadProvider(); |
- base::SharedMemoryHandle GetRendererSharedMemoryHandle( |
+ // Returns the shared memory handle of the gamepad data duplicated into the |
+ // given process. |
+ base::SharedMemoryHandle GetSharedMemoryHandleForProcess( |
base::ProcessHandle renderer_process); |
// Pause and resume the background polling thread. Can be called from any |
@@ -39,14 +48,19 @@ class CONTENT_EXPORT GamepadProvider : |
void Pause(); |
void Resume(); |
+ // Registers the given closure for calling when the user has interacted with |
+ // the device. This callback will only be issued once. |
+ void RegisterForUserGesture(const base::Closure& closure); |
+ |
// base::SystemMonitor::DevicesChangedObserver implementation. |
virtual void OnDevicesChanged(base::SystemMonitor::DeviceType type) OVERRIDE; |
private: |
+ void Initialize(scoped_ptr<GamepadDataFetcher> fetcher); |
// Method for setting up the platform-specific data fetcher. Takes ownership |
// of |fetcher|. |
- void DoInitializePollingThread(GamepadDataFetcher* fetcher); |
+ void DoInitializePollingThread(scoped_ptr<GamepadDataFetcher> fetcher); |
// Method for sending pause hints to the low-level data fetcher. Runs on |
// polling_thread_. |
@@ -58,6 +72,9 @@ class CONTENT_EXPORT GamepadProvider : |
GamepadHardwareBuffer* SharedMemoryAsHardwareBuffer(); |
+ // Checks the gamepad state to see if the user has interacted with it. |
+ void CheckForUserGesture(); |
+ |
enum { kDesiredSamplingIntervalMs = 16 }; |
// Keeps track of when the background thread is paused. Access to is_paused_ |
@@ -70,6 +87,23 @@ class CONTENT_EXPORT GamepadProvider : |
// |is_paused_|. |
bool have_scheduled_do_poll_; |
+ // Lists all observers registered for user gestures, and the thread which |
+ // to issue the callbacks on. Since we always issue the callback on the |
+ // thread which the registration happened, and this class lives on the I/O |
+ // thread, the message loop proxies will normally just be the I/O thread. |
+ // However, this will be the main thread for unit testing. |
+ base::Lock user_gesture_lock_; |
+ struct ClosureAndThread { |
+ ClosureAndThread(const base::Closure& c, |
+ const scoped_refptr<base::MessageLoopProxy>& m); |
+ ~ClosureAndThread(); |
+ |
+ base::Closure closure; |
+ scoped_refptr<base::MessageLoopProxy> message_loop; |
+ }; |
+ typedef std::vector<ClosureAndThread> UserGestureObserverVector; |
+ UserGestureObserverVector user_gesture_observers_; |
+ |
// Updated based on notification from SystemMonitor when the system devices |
// have been updated, and this notification is passed on to the data fetcher |
// to enable it to avoid redundant (and possibly expensive) is-connected |