// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_EVENTS_TEST_EVENT_GENERATOR_H_ #define UI_EVENTS_TEST_EVENT_GENERATOR_H_ #include <memory> #include <optional> #include <vector> #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "build/chromeos_buildflags.h" #include "ui/events/event.h" #include "ui/events/event_constants.h" #include "ui/events/event_dispatcher.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/native_widget_types.h" namespace ui { class EventSource; class EventTarget; namespace test { // See EventGenerator::GestureScrollSequenceWithCallback for details. ScrollStepCallback; class TestTickClock; class EventGenerator; // A delegate interface for EventGenerator to abstract platform-specific event // targeting and coordinate conversion. class EventGeneratorDelegate { … }; // ui::test::EventGenerator is a tool that generates and dispatches events. // Unlike |ui_controls| package in ui/base/test, this does not use platform // native message loops. Instead, it sends events to the event dispatcher // synchronously. // // This class is not suited for the following cases: // // 1) If your test depends on native events (ui::Event::native_event()). // This return is empty/NULL event with EventGenerator. // 2) If your test involves nested run loop, such as // menu or drag & drop. Because this class directly // post an event to WindowEventDispatcher, this event will not be // handled in the nested run loop. // 3) Similarly, |base::MessagePumpObserver| will not be invoked. // 4) Any other code that requires native message loops, such as // tests for WindowTreeHostWin/WindowTreeHostX11. // // If one of these applies to your test, please use |ui_controls| // package instead. // // Note: The coordinates of the points in API is determined by the // EventGeneratorDelegate. class EventGenerator { … }; // This generates key events for moidfiers as well as the key with // modifiers. // TODO(crbug.com/40256427): Remove this once the EventGenerator is // modified to generate the same sequence. void EmulateFullKeyPressReleaseSequence(test::EventGenerator* generator, KeyboardCode key, bool control, bool shift, bool alt, bool command); } // namespace test } // namespace ui #endif // UI_EVENTS_TEST_EVENT_GENERATOR_H_