#ifndef GamepadManager_h
#define GamepadManager_h
#if ENABLE(GAMEPAD)
#include "GamepadProviderClient.h"
#include <wtf/HashSet.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/RefPtr.h>
#include <wtf/text/AtomicString.h>
namespace WebCore {
class DOMWindow;
class Gamepad;
class NavigatorGamepad;
class GamepadManager : public GamepadProviderClient {
WTF_MAKE_NONCOPYABLE(GamepadManager);
friend class NeverDestroyed<GamepadManager>;
public:
static GamepadManager& singleton();
virtual void platformGamepadConnected(PlatformGamepad&) override final;
virtual void platformGamepadDisconnected(PlatformGamepad&) override final;
virtual void platformGamepadInputActivity() override final;
void registerNavigator(NavigatorGamepad*);
void unregisterNavigator(NavigatorGamepad*);
void registerDOMWindow(DOMWindow*);
void unregisterDOMWindow(DOMWindow*);
private:
GamepadManager();
void makeGamepadVisible(PlatformGamepad&, HashSet<NavigatorGamepad*>&, HashSet<DOMWindow*>&);
void dispatchGamepadEvent(const WTF::AtomicString& eventName, PlatformGamepad&);
void maybeStartMonitoringGamepads();
void maybeStopMonitoringGamepads();
bool m_isMonitoringGamepads;
HashSet<NavigatorGamepad*> m_navigators;
HashSet<NavigatorGamepad*> m_gamepadBlindNavigators;
HashSet<DOMWindow*> m_domWindows;
HashSet<DOMWindow*> m_gamepadBlindDOMWindows;
};
}
#endif // ENABLE(GAMEPAD)
#endif // GamepadManager_h