| // Copyright (c) 2012 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 CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_ |
| #define CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_ |
| |
| #include "chrome/browser/ui/view_ids.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "ui/base/test/ui_controls.h" |
| |
| #if defined(TOOLKIT_VIEWS) |
| #include "ui/views/view.h" |
| #endif |
| |
| namespace gfx { |
| class Point; |
| } |
| |
| namespace ui_test_utils { |
| |
| // Brings the native window for |browser| to the foreground. Returns true on |
| // success. |
| bool BringBrowserWindowToFront(const Browser* browser) WARN_UNUSED_RESULT; |
| |
| // Returns true if the View is focused. |
| bool IsViewFocused(const Browser* browser, ViewID vid); |
| |
| // Simulates a mouse click on a View in the browser. |
| void ClickOnView(const Browser* browser, ViewID vid); |
| |
| // A collection of utilities that are used from interactive_ui_tests. These are |
| // separated from ui_test_utils.h to ensure that browser_tests don't use them, |
| // since they depend on focus which isn't possible for sharded test. |
| |
| // Hide a native window. |
| void HideNativeWindow(gfx::NativeWindow window); |
| |
| // Show and focus a native window. Returns true on success. |
| bool ShowAndFocusNativeWindow(gfx::NativeWindow window) WARN_UNUSED_RESULT; |
| |
| // Sends a key press, blocking until the key press is received or the test times |
| // out. This uses ui_controls::SendKeyPress, see it for details. Returns true |
| // if the event was successfully sent and received. |
| bool SendKeyPressSync(const Browser* browser, |
| ui::KeyboardCode key, |
| bool control, |
| bool shift, |
| bool alt, |
| bool command) WARN_UNUSED_RESULT; |
| |
| // Sends a key press, blocking until the key press is received or the test times |
| // out. This uses ui_controls::SendKeyPress, see it for details. Returns true |
| // if the event was successfully sent and received. |
| bool SendKeyPressToWindowSync(const gfx::NativeWindow window, |
| ui::KeyboardCode key, |
| bool control, |
| bool shift, |
| bool alt, |
| bool command) WARN_UNUSED_RESULT; |
| |
| // Sends a key press, blocking until both the key press and a notification from |
| // |source| of type |type| are received, or until the test times out. This uses |
| // ui_controls::SendKeyPress, see it for details. Returns true if the event was |
| // successfully sent and both the event and notification were received. |
| bool SendKeyPressAndWait(const Browser* browser, |
| ui::KeyboardCode key, |
| bool control, |
| bool shift, |
| bool alt, |
| bool command, |
| int type, |
| const content::NotificationSource& source) |
| WARN_UNUSED_RESULT; |
| |
| // Sends a move event blocking until received. Returns true if the event was |
| // successfully received. This uses ui_controls::SendMouse***NotifyWhenDone, |
| // see it for details. |
| bool SendMouseMoveSync(const gfx::Point& location) WARN_UNUSED_RESULT; |
| bool SendMouseEventsSync(ui_controls::MouseButton type, |
| int state) WARN_UNUSED_RESULT; |
| |
| // See SendKeyPressAndWait. This function additionally performs a check on the |
| // NotificationDetails using the provided Details<U>. |
| template <class U> |
| bool SendKeyPressAndWaitWithDetails( |
| const Browser* browser, |
| ui::KeyboardCode key, |
| bool control, |
| bool shift, |
| bool alt, |
| bool command, |
| int type, |
| const content::NotificationSource& source, |
| const content::Details<U>& details) WARN_UNUSED_RESULT; |
| |
| template <class U> |
| bool SendKeyPressAndWaitWithDetails( |
| const Browser* browser, |
| ui::KeyboardCode key, |
| bool control, |
| bool shift, |
| bool alt, |
| bool command, |
| int type, |
| const content::NotificationSource& source, |
| const content::Details<U>& details) { |
| WindowedNotificationObserverWithDetails<U> observer(type, source); |
| |
| if (!SendKeyPressSync(browser, key, control, shift, alt, command)) |
| return false; |
| |
| observer.Wait(); |
| |
| U my_details; |
| if (!observer.GetDetailsFor(source.map_key(), &my_details)) |
| return false; |
| |
| return *details.ptr() == my_details && !testing::Test::HasFatalFailure(); |
| } |
| |
| // A combination of SendMouseMove to the middle of the view followed by |
| // SendMouseEvents. |
| void MoveMouseToCenterAndPress( |
| #if defined(TOOLKIT_VIEWS) |
| views::View* view, |
| #elif defined(OS_IOS) |
| UIView* view, |
| #elif defined(OS_MACOSX) |
| NSView* view, |
| #endif |
| ui_controls::MouseButton button, |
| int state, |
| const base::Closure& task); |
| |
| namespace internal { |
| |
| // A utility function to send a mouse click event in a closure. It's shared by |
| // ui_controls_linux.cc and ui_controls_mac.cc |
| void ClickTask(ui_controls::MouseButton button, |
| int state, |
| const base::Closure& followup); |
| |
| } // namespace internal |
| |
| } // namespace ui_test_utils |
| |
| #endif // CHROME_TEST_BASE_INTERACTIVE_TEST_UTILS_H_ |