Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(483)

Unified Diff: ui/events/test/event_generator.h

Issue 322893005: MacViews: Add WidgetEventGenerator to abstract platform-specific event generation for tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: -> event_generator_delegate_mac.mm, comment fixes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/events/test/event_generator.h
diff --git a/ui/aura/test/event_generator.h b/ui/events/test/event_generator.h
similarity index 76%
copy from ui/aura/test/event_generator.h
copy to ui/events/test/event_generator.h
index c436d3fbd1165571fdcaaf950577ca499dbaa3e2..67360c4c754035dc29e15365f3e68cb229c39331 100644
--- a/ui/aura/test/event_generator.h
+++ b/ui/events/test/event_generator.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_AURA_TEST_EVENT_GENERATOR_H_
-#define UI_AURA_TEST_EVENT_GENERATOR_H_
+#ifndef UI_EVENTS_TEST_EVENT_GENERATOR_H_
+#define UI_EVENTS_TEST_EVENT_GENERATOR_H_
#include <list>
#include <vector>
@@ -14,6 +14,7 @@
#include "base/time/time.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/point.h"
namespace base {
@@ -23,44 +24,49 @@ class TickClock;
namespace ui {
class Event;
class EventProcessor;
+class EventSource;
+class EventTarget;
class KeyEvent;
class MouseEvent;
class ScrollEvent;
class TouchEvent;
-}
-
-namespace aura {
-class Window;
-class WindowTreeHost;
-
-namespace client {
-class ScreenPositionClient;
-}
namespace test {
-typedef base::Callback<void(ui::EventType, const gfx::Vector2dF&)>
+typedef base::Callback<void(EventType, const gfx::Vector2dF&)>
ScrollStepCallback;
-// A delegate interface for EventGenerator that provides a way to
-// locate aura root window for given point.
+// A delegate interface for EventGenerator to abstract platform-specific event
+// targeting and coordinate conversion.
class EventGeneratorDelegate {
public:
virtual ~EventGeneratorDelegate() {}
- // Returns the host for given point.
- virtual WindowTreeHost* GetHostAt(const gfx::Point& point) const = 0;
+ // The ui::EventTarget at the given |location|.
+ virtual EventTarget* GetTargetAt(const gfx::Point& location) = 0;
+
+ // The ui::EventSource for the given |target|.
+ virtual EventSource* GetEventSource(EventTarget* target) = 0;
- // Returns the screen position client that determines the
- // coordinates used in EventGenerator. EventGenerator uses
- // root Window's coordinate if this returns NULL.
- virtual client::ScreenPositionClient* GetScreenPositionClient(
- const aura::Window* window) const = 0;
+ // Helper functions to determine the center point of |target| or |window|.
+ virtual gfx::Point CenterOfTarget(const EventTarget* target) const = 0;
+ virtual gfx::Point CenterOfWindow(gfx::NativeWindow window) const = 0;
+
+ // Convert a point between API's coordinates and |target|'s coordinates.
+ virtual void ConvertPointFromTarget(const EventTarget* target,
+ gfx::Point* point) const = 0;
+ virtual void ConvertPointToTarget(const EventTarget* target,
+ gfx::Point* point) const = 0;
+
+ // Convert a point from the coordinate system in the host that contains
+ // |hosted_target| into the root window's coordinate system.
+ virtual void ConvertPointFromHost(const EventTarget* hosted_target,
+ gfx::Point* point) const = 0;
};
-// EventGenerator is a tool that generates and dispatch events.
-// Unlike |ui_controls| package in ui/base/test, this does not generate platform
-// native events. Instead, it sends events to |aura::WindowEventDispatcher|
+// 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:
@@ -72,7 +78,7 @@ class EventGeneratorDelegate {
// post an event to WindowEventDispatcher, this event will not be
// handled in the nested message loop.
// 3) Similarly, |base::MessagePumpObserver| will not be invoked.
-// 4) Any other code that requires native events, such as
+// 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|
@@ -83,20 +89,24 @@ class EventGeneratorDelegate {
class EventGenerator {
public:
// Creates an EventGenerator with the mouse/touch location (0,0),
- // which uses the |root_window|'s coordinates.
- explicit EventGenerator(Window* root_window);
+ // which uses the |root_window|'s coordinates and the default delegate for
+ // this platform.
+ explicit EventGenerator(gfx::NativeWindow root_window);
// Create an EventGenerator with EventGeneratorDelegate,
- // which uses the coordinates used by |delegate|.
+ // which uses the coordinates conversions and targeting provided by
+ // |delegate|.
explicit EventGenerator(EventGeneratorDelegate* delegate);
// Creates an EventGenerator with the mouse/touch location
// at |initial_location|, which uses the |root_window|'s coordinates.
- EventGenerator(Window* root_window, const gfx::Point& initial_location);
+ EventGenerator(gfx::NativeWindow root_window,
+ const gfx::Point& initial_location);
- // Creates an EventGenerator with the mouse/touch location
- // centered over |window|, which uses the |root_window|'s coordinates.
- EventGenerator(Window* root_window, Window* window);
+ // Creates an EventGenerator with the mouse/touch location centered over
+ // |window|. This is currently the only constructor that works on Mac, since
+ // a specific window is required (and there is no root window).
+ EventGenerator(gfx::NativeWindow root_window, gfx::NativeWindow window);
virtual ~EventGenerator();
@@ -113,6 +123,7 @@ class EventGenerator {
// Resets the event flags bitmask.
void set_flags(int flags) { flags_ = flags; }
+ int flags() const { return flags_; }
// Generates a left button press event.
void PressLeftButton();
@@ -157,8 +168,8 @@ class EventGenerator {
// Generates events to move mouse to be the given |point| in |window|'s
// coordinates.
- void MoveMouseRelativeTo(const Window* window, const gfx::Point& point);
- void MoveMouseRelativeTo(const Window* window, int x, int y) {
+ void MoveMouseRelativeTo(const EventTarget* window, const gfx::Point& point);
+ void MoveMouseRelativeTo(const EventTarget* window, int x, int y) {
MoveMouseRelativeTo(window, gfx::Point(x, y));
}
@@ -178,7 +189,7 @@ class EventGenerator {
}
// Generates events to move the mouse to the center of the window.
- void MoveMouseToCenterOf(Window* window);
+ void MoveMouseToCenterOf(EventTarget* window);
// Generates a touch press event.
void PressTouch();
@@ -212,7 +223,7 @@ class EventGenerator {
// Generates press, move and release events to move touch
// to the center of the window.
- void PressMoveAndReleaseTouchToCenterOf(Window* window);
+ void PressMoveAndReleaseTouchToCenterOf(EventTarget* window);
// Generates and dispatches a Win8 edge-swipe event (swipe up from bottom or
// swipe down from top). Note that it is not possible to distinguish between
@@ -303,19 +314,19 @@ class EventGenerator {
// event without native_event() is generated. Note that ui::EF_ flags should
// be passed as |flags|, not the native ones like 'ShiftMask' in <X11/X.h>.
// TODO(yusukes): Support native_event() on all platforms.
- void PressKey(ui::KeyboardCode key_code, int flags);
+ void PressKey(KeyboardCode key_code, int flags);
// Generates a key release event. On platforms except Windows and X11, a key
// event without native_event() is generated. Note that ui::EF_ flags should
// be passed as |flags|, not the native ones like 'ShiftMask' in <X11/X.h>.
// TODO(yusukes): Support native_event() on all platforms.
- void ReleaseKey(ui::KeyboardCode key_code, int flags);
+ void ReleaseKey(KeyboardCode key_code, int flags);
// Dispatch the event to the WindowEventDispatcher.
- void Dispatch(ui::Event* event);
+ void Dispatch(Event* event);
- void set_current_host(WindowTreeHost* host) {
- current_host_ = host;
+ void set_current_target(EventTarget* target) {
+ current_target_ = target;
}
// Specify an alternative tick clock to be used for simulating time in tests.
@@ -325,32 +336,31 @@ class EventGenerator {
base::TimeDelta Now();
private:
+ // Implemented per-platform to create the default EventGeneratorDelegate.
+ static EventGeneratorDelegate* CreateDefaultPlatformDelegate(
+ EventGenerator* owner,
+ gfx::NativeWindow root_window,
+ gfx::NativeWindow window);
+
// Dispatch a key event to the WindowEventDispatcher.
- void DispatchKeyEvent(bool is_press, ui::KeyboardCode key_code, int flags);
+ void DispatchKeyEvent(bool is_press, KeyboardCode key_code, int flags);
void UpdateCurrentDispatcher(const gfx::Point& point);
void PressButton(int flag);
void ReleaseButton(int flag);
- // Convert a point between API's coordinates and
- // |target|'s coordinates.
- void ConvertPointFromTarget(const aura::Window* target,
- gfx::Point* point) const;
- void ConvertPointToTarget(const aura::Window* target,
- gfx::Point* point) const;
-
gfx::Point GetLocationInCurrentRoot() const;
- gfx::Point CenterOfWindow(const Window* window) const;
+ gfx::Point CenterOfWindow(const EventTarget* window) const;
void DispatchNextPendingEvent();
- void DoDispatchEvent(ui::Event* event, bool async);
+ void DoDispatchEvent(Event* event, bool async);
scoped_ptr<EventGeneratorDelegate> delegate_;
gfx::Point current_location_;
- WindowTreeHost* current_host_;
+ EventTarget* current_target_;
int flags_;
bool grab_;
- std::list<ui::Event*> pending_events_;
+ std::list<Event*> pending_events_;
// Set to true to cause events to be posted asynchronously.
bool async_;
scoped_ptr<base::TickClock> tick_clock_;
@@ -359,6 +369,6 @@ class EventGenerator {
};
} // namespace test
-} // namespace aura
+} // namespace ui
-#endif // UI_AURA_TEST_EVENT_GENERATOR_H_
+#endif // UI_EVENTS_TEST_EVENT_GENERATOR_H_

Powered by Google App Engine
This is Rietveld 408576698