1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_
6 #define CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_
8 #include "chrome/browser/ui/view_ids.h"
9 #include "chrome/test/base/ui_test_utils.h"
10 #include "ui/base/test/ui_controls.h"
12 #if defined(TOOLKIT_VIEWS)
13 #include "ui/views/view.h"
20 namespace ui_test_utils
{
22 // Brings the native window for |browser| to the foreground. Returns true on
24 bool BringBrowserWindowToFront(const Browser
* browser
) WARN_UNUSED_RESULT
;
26 // Returns true if the View is focused.
27 bool IsViewFocused(const Browser
* browser
, ViewID vid
);
29 // Simulates a mouse click on a View in the browser.
30 void ClickOnView(const Browser
* browser
, ViewID vid
);
32 // A collection of utilities that are used from interactive_ui_tests. These are
33 // separated from ui_test_utils.h to ensure that browser_tests don't use them,
34 // since they depend on focus which isn't possible for sharded test.
36 // Hide a native window.
37 void HideNativeWindow(gfx::NativeWindow window
);
39 // Show and focus a native window. Returns true on success.
40 bool ShowAndFocusNativeWindow(gfx::NativeWindow window
) WARN_UNUSED_RESULT
;
42 // Sends a key press, blocking until the key press is received or the test times
43 // out. This uses ui_controls::SendKeyPress, see it for details. Returns true
44 // if the event was successfully sent and received.
45 bool SendKeyPressSync(const Browser
* browser
,
50 bool command
) WARN_UNUSED_RESULT
;
52 // Sends a key press, blocking until the key press is received or the test times
53 // out. This uses ui_controls::SendKeyPress, see it for details. Returns true
54 // if the event was successfully sent and received.
55 bool SendKeyPressToWindowSync(const gfx::NativeWindow window
,
60 bool command
) WARN_UNUSED_RESULT
;
62 // Sends a key press, blocking until both the key press and a notification from
63 // |source| of type |type| are received, or until the test times out. This uses
64 // ui_controls::SendKeyPress, see it for details. Returns true if the event was
65 // successfully sent and both the event and notification were received.
66 bool SendKeyPressAndWait(const Browser
* browser
,
73 const content::NotificationSource
& source
)
76 // Sends a move event blocking until received. Returns true if the event was
77 // successfully received. This uses ui_controls::SendMouse***NotifyWhenDone,
78 // see it for details.
79 bool SendMouseMoveSync(const gfx::Point
& location
) WARN_UNUSED_RESULT
;
80 bool SendMouseEventsSync(ui_controls::MouseButton type
,
81 int state
) WARN_UNUSED_RESULT
;
83 // See SendKeyPressAndWait. This function additionally performs a check on the
84 // NotificationDetails using the provided Details<U>.
86 bool SendKeyPressAndWaitWithDetails(
87 const Browser
* browser
,
94 const content::NotificationSource
& source
,
95 const content::Details
<U
>& details
) WARN_UNUSED_RESULT
;
98 bool SendKeyPressAndWaitWithDetails(
99 const Browser
* browser
,
100 ui::KeyboardCode key
,
106 const content::NotificationSource
& source
,
107 const content::Details
<U
>& details
) {
108 WindowedNotificationObserverWithDetails
<U
> observer(type
, source
);
110 if (!SendKeyPressSync(browser
, key
, control
, shift
, alt
, command
))
116 if (!observer
.GetDetailsFor(source
.map_key(), &my_details
))
119 return *details
.ptr() == my_details
&& !testing::Test::HasFatalFailure();
122 // A combination of SendMouseMove to the middle of the view followed by
124 void MoveMouseToCenterAndPress(
125 #if defined(TOOLKIT_VIEWS)
127 #elif defined(TOOLKIT_GTK)
129 #elif defined(OS_IOS)
131 #elif defined(OS_MACOSX)
134 ui_controls::MouseButton button
,
136 const base::Closure
& task
);
140 // A utility function to send a mouse click event in a closure. It's shared by
141 // ui_controls_linux.cc and ui_controls_mac.cc
142 void ClickTask(ui_controls::MouseButton button
,
144 const base::Closure
& followup
);
146 } // namespace internal
148 } // namespace ui_test_utils
150 #endif // CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_