| Index: components/exo/gaming_seat.h
 | 
| diff --git a/components/exo/gaming_seat.h b/components/exo/gaming_seat.h
 | 
| index 40e44ae33352eeb4cf86c473177ce37d6e52c548..f24dbd65923323c7670ace8a4964b94525e31333 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;
 | 
| +}
 | 
| +#endif
 | 
| +
 | 
| +namespace base {
 | 
| +class Thread;
 | 
| +}
 | 
| +
 | 
|  namespace exo {
 | 
|  class GamingSeatDelegate;
 | 
|  class GamepadDelegate;
 | 
| @@ -24,29 +37,46 @@ 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_;
 | 
| +
 | 
| +  // Cached pointer to GamepadProviderOzone.
 | 
| +  ui::GamepadProviderOzone* gamepad_provider_;
 | 
| +#else
 | 
|    class ThreadSafeGamepadChangeFetcher;
 | 
|  
 | 
|    // Processes updates of gamepad data and passes changes on to delegate.
 | 
| @@ -56,9 +86,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 +93,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);
 | 
|  };
 | 
| 
 |