UIGamepadProvider.h [plain text]
#pragma once
#if ENABLE(GAMEPAD)
#include <WebCore/GamepadProviderClient.h>
#include <wtf/HashSet.h>
#include <wtf/RunLoop.h>
#include <wtf/Vector.h>
namespace WebKit {
class UIGamepad;
class WebPageProxy;
class WebProcessPool;
class GamepadData;
class UIGamepadProvider final : public WebCore::GamepadProviderClient {
public:
static UIGamepadProvider& singleton();
void processPoolStartedUsingGamepads(WebProcessPool&);
void processPoolStoppedUsingGamepads(WebProcessPool&);
void viewBecameActive(WebPageProxy&);
void viewBecameInactive(WebPageProxy&);
Vector<GamepadData> gamepadStates() const;
#if PLATFORM(COCOA)
static void setUsesGameControllerFramework();
#endif
Vector<GamepadData> snapshotGamepads();
size_t numberOfConnectedGamepads() const { return m_gamepads.size(); }
private:
friend NeverDestroyed<UIGamepadProvider>;
UIGamepadProvider();
~UIGamepadProvider() final;
void startMonitoringGamepads();
void stopMonitoringGamepads();
void platformSetDefaultGamepadProvider();
WebPageProxy* platformWebPageProxyForGamepadInput();
void platformStopMonitoringInput();
void platformStartMonitoringInput();
void platformGamepadConnected(WebCore::PlatformGamepad&, WebCore::EventMakesGamepadsVisible) final;
void platformGamepadDisconnected(WebCore::PlatformGamepad&) final;
void platformGamepadInputActivity(WebCore::EventMakesGamepadsVisible) final;
void scheduleGamepadStateSync();
void gamepadSyncTimerFired();
HashSet<WebProcessPool*> m_processPoolsUsingGamepads;
Vector<std::unique_ptr<UIGamepad>> m_gamepads;
RunLoop::Timer<UIGamepadProvider> m_gamepadSyncTimer;
bool m_isMonitoringGamepads { false };
bool m_shouldMakeGamepadsVisibleOnSync { false };
};
}
#endif // ENABLE(GAMEPAD)