// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FUCHSIA_WEB_WEBENGINE_BROWSER_EVENT_FILTER_H_
#define FUCHSIA_WEB_WEBENGINE_BROWSER_EVENT_FILTER_H_
#include <fuchsia/web/cpp/fidl.h>
#include "fuchsia_web/webengine/web_engine_export.h"
#include "ui/events/event_handler.h"
#include "ui/events/types/event_type.h"
// Event filter which can be configured to drop all events, or certain kinds of
// events.
class WEB_ENGINE_EXPORT EventFilter : public ui::EventHandler {
public:
EventFilter();
~EventFilter() override;
EventFilter(const EventFilter&) = delete;
EventFilter& operator=(const EventFilter&) = delete;
void ConfigureInputTypes(fuchsia::web::InputTypes types,
fuchsia::web::AllowInputState allow);
private:
friend class EventFilterTest;
bool IsEventAllowed(ui::EventType type);
// Returns whether |type| is set in the |enabled_input_types_| bitmask.
bool IsTypeEnabled(fuchsia::web::InputTypes type) const;
// ui::EventRewriter implementation.
void OnEvent(ui::Event* event) final;
void OnGestureEvent(ui::GestureEvent* event) final;
uint64_t enabled_input_types_ = 0;
// Allows input events not mapped to fuchsia::web::InputTypes entries
// to be processed. Set by allowing or denying fuchsia::web::InputTypes::ALL.
bool enable_unknown_types_ = true;
};
#endif // FUCHSIA_WEB_WEBENGINE_BROWSER_EVENT_FILTER_H_