#ifndef UI_OZONE_COMMON_BASE_KEYBOARD_HOOK_H_
#define UI_OZONE_COMMON_BASE_KEYBOARD_HOOK_H_
#include <optional>
#include "base/containers/flat_set.h"
#include "base/functional/callback.h"
#include "ui/ozone/public/platform_keyboard_hook.h"
namespace ui {
enum class DomCode : uint32_t;
class KeyEvent;
class BaseKeyboardHook : public PlatformKeyboardHook {
public:
using KeyEventCallback = base::RepeatingCallback<void(KeyEvent* event)>;
BaseKeyboardHook(std::optional<base::flat_set<DomCode>> dom_codes,
KeyEventCallback callback);
BaseKeyboardHook(const BaseKeyboardHook&) = delete;
BaseKeyboardHook& operator=(const BaseKeyboardHook&) = delete;
~BaseKeyboardHook() override;
bool IsKeyLocked(DomCode dom_code) const override;
protected:
bool ShouldCaptureKeyEvent(DomCode dom_code) const;
void ForwardCapturedKeyEvent(KeyEvent* event);
const std::optional<base::flat_set<DomCode>>& dom_codes() {
return dom_codes_;
}
private:
KeyEventCallback key_event_callback_;
std::optional<base::flat_set<DomCode>> dom_codes_;
};
}
#endif