Chromium Code Reviews| Index: components/exo/gaming_seat.h |
| diff --git a/components/exo/gaming_seat.h b/components/exo/gaming_seat.h |
| index 40e44ae33352eeb4cf86c473177ce37d6e52c548..e7a6d81b7a69496f3b6247df884b0ccad52e6094 100644 |
| --- a/components/exo/gaming_seat.h |
| +++ b/components/exo/gaming_seat.h |
| @@ -7,6 +7,7 @@ |
| #include <memory> |
| +#include "base/containers/flat_map.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/sequenced_task_runner.h" |
| @@ -17,6 +18,18 @@ |
| #include "device/gamepad/gamepad_data_fetcher.h" |
| #include "ui/aura/client/focus_change_observer.h" |
| +#if defined(USE_OZONE_GAMEPAD) |
| +#include "ui/events/ozone/gamepad/gamepad_observer.h" |
| + |
| +namespace ui { |
| +class GamepadProviderOzone; |
|
reveman
2017/06/08 00:21:44
remove this as no longer needed.
|
| +} |
| +#endif |
| + |
| +namespace base { |
| +class Thread; |
|
reveman
2017/06/08 00:21:44
remove this unless actually needed
|
| +} |
| + |
| namespace exo { |
| class GamingSeatDelegate; |
| class GamepadDelegate; |
| @@ -24,29 +37,43 @@ class GamepadDelegate; |
| using CreateGamepadDataFetcherCallback = |
| base::Callback<std::unique_ptr<device::GamepadDataFetcher>()>; |
| -// This class represents one gaming seat, it uses a background thread |
| -// for polling gamepad devices and notifies the corresponding GampadDelegate of |
| -// any changes. |
| -class GamingSeat : public WMHelper::FocusObserver { |
| +// TODO(jkwang): always use ozone_gamepad when ozone is default for all Chrome |
| +// OS builds. https://crbug.com/717246 |
| +// This class represents one gaming seat. It uses /device/gamepad or |
| +// ozone/gamepad as backend and notifies corresponding GamepadDelegate of any |
| +// gamepad changes. |
| +class GamingSeat : public WMHelper::FocusObserver |
| +#if defined(USE_OZONE_GAMEPAD) |
| + , |
| + public ui::GamepadObserver |
| +#endif |
| +{ |
| public: |
| - // This class will post tasks to invoke the delegate on the thread runner |
| - // which is associated with the thread that is creating this instance. |
| + // This class will monitor gamepad connection changes and manage gamepad |
| + // returned by gaming_seat_delegate. |
| GamingSeat(GamingSeatDelegate* gaming_seat_delegate, |
| base::SingleThreadTaskRunner* polling_task_runner); |
| - // Allows test cases to specify a CreateGamepadDataFetcherCallback that |
| - // overrides the default GamepadPlatformDataFetcher. |
| - GamingSeat(GamingSeatDelegate* gaming_seat_delegate, |
| - base::SingleThreadTaskRunner* polling_task_runner, |
| - CreateGamepadDataFetcherCallback create_fetcher_callback); |
| - |
| ~GamingSeat() override; |
| - // Overridden WMHelper::FocusObserver: |
| + // Overridden from WMHelper::FocusObserver: |
| void OnWindowFocused(aura::Window* gained_focus, |
| aura::Window* lost_focus) override; |
| +#if defined(USE_OZONE_GAMEPAD) |
| + // Overridden from ui::GamepadObserver: |
| + void OnGamepadDevicesUpdated() override; |
| + void OnGamepadEvent(const ui::GamepadEvent& event) override; |
| +#endif |
| + |
| private: |
| + // The delegate that handles gamepad_added. |
| + GamingSeatDelegate* const delegate_; |
| + |
| +#if defined(USE_OZONE_GAMEPAD) |
| + // Contains the delegate for each gamepad device. |
| + base::flat_map<int, GamepadDelegate*> gamepads_; |
| +#else |
| class ThreadSafeGamepadChangeFetcher; |
| // Processes updates of gamepad data and passes changes on to delegate. |
| @@ -56,9 +83,6 @@ class GamingSeat : public WMHelper::FocusObserver { |
| // polling thread. |
| scoped_refptr<ThreadSafeGamepadChangeFetcher> gamepad_change_fetcher_; |
| - // The delegate that handles gamepad_added. |
| - GamingSeatDelegate* const delegate_; |
| - |
| // The delegate instances that all other events are dispatched to. |
| GamepadDelegate* gamepad_delegates_[device::Gamepads::kItemsLengthCap]; |
| @@ -66,9 +90,10 @@ class GamingSeat : public WMHelper::FocusObserver { |
| device::Gamepads pad_state_; |
| // ThreadChecker for the origin thread. |
| - base::ThreadChecker thread_checker_; |
| + THREAD_CHECKER(thread_checker_); |
| base::WeakPtrFactory<GamingSeat> weak_ptr_factory_; |
| +#endif |
| DISALLOW_COPY_AND_ASSIGN(GamingSeat); |
| }; |