| Index: chrome/test/base/ui_test_utils_gtk.cc
|
| diff --git a/chrome/test/base/ui_test_utils_gtk.cc b/chrome/test/base/ui_test_utils_gtk.cc
|
| index 7260bc4d27c729c102e5decd95b8b76539f9fb06..d6b835a37891eb547a9dc4273fb81a7fa446b9bd 100644
|
| --- a/chrome/test/base/ui_test_utils_gtk.cc
|
| +++ b/chrome/test/base/ui_test_utils_gtk.cc
|
| @@ -6,12 +6,15 @@
|
|
|
| #include <gtk/gtk.h>
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop.h"
|
| -#include "chrome/browser/automation/ui_controls.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/gtk/view_id_util.h"
|
| +#include "ui/base/gtk/gtk_screen_util.h"
|
| +#include "ui/ui_controls/ui_controls.h"
|
| +
|
| #if defined(TOOLKIT_VIEWS)
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| #include "ui/views/focus/focus_manager.h"
|
| @@ -21,7 +24,6 @@ namespace ui_test_utils {
|
|
|
| #if !defined(TOOLKIT_VIEWS)
|
| namespace {
|
| -
|
| // Check if the focused widget for |root| is |target| or a child of |target|.
|
| static bool IsWidgetInFocusChain(GtkWidget* root, GtkWidget* target) {
|
| GtkWidget* iter = root;
|
| @@ -38,7 +40,6 @@ static bool IsWidgetInFocusChain(GtkWidget* root, GtkWidget* target) {
|
|
|
| return false;
|
| }
|
| -
|
| } // namespace
|
| #endif
|
|
|
| @@ -75,7 +76,7 @@ void ClickOnView(const Browser* browser, ViewID vid) {
|
| #endif
|
|
|
| DCHECK(view);
|
| - ui_controls::MoveMouseToCenterAndPress(
|
| + MoveMouseToCenterAndPress(
|
| view,
|
| ui_controls::LEFT,
|
| ui_controls::DOWN | ui_controls::UP,
|
| @@ -93,4 +94,60 @@ bool ShowAndFocusNativeWindow(gfx::NativeWindow window) {
|
| return true;
|
| }
|
|
|
| +#if defined(TOOLKIT_VIEWS)
|
| +
|
| +void OnConfigure(GtkWidget* gtk_widget, GdkEvent* event, gpointer data) {
|
| + views::Widget* widget = static_cast<views::Widget*>(data);
|
| + gfx::Rect actual = widget->GetWindowScreenBounds();
|
| + gfx::Rect desired = widget->GetRootView()->bounds();
|
| + if (actual.size() == desired.size())
|
| + MessageLoop::current()->Quit();
|
| +}
|
| +
|
| +void SynchronizeWidgetSize(views::Widget* widget) {
|
| + // If the actual window size and desired window size
|
| + // are different, wait until the window is resized
|
| + // to desired size.
|
| + gfx::Rect actual = widget->GetWindowScreenBounds();
|
| + gfx::Rect desired = widget->GetRootView()->bounds();
|
| + if (actual.size() != desired.size()) {
|
| + // Listen to configure-event that is emitted when an window gets
|
| + // resized.
|
| + GtkWidget* gtk_widget = widget->GetNativeView();
|
| + g_signal_connect(gtk_widget, "configure-event",
|
| + G_CALLBACK(&OnConfigure), widget);
|
| + MessageLoop::current()->Run();
|
| + }
|
| +}
|
| +
|
| +void MoveMouseToCenterAndPress(views::View* view,
|
| + ui_controls::MouseButton button,
|
| + int state,
|
| + const base::Closure& task) {
|
| + // X is asynchronous and we need to wait until the window gets
|
| + // resized to desired size.
|
| + SynchronizeWidgetSize(view->GetWidget());
|
| +
|
| + gfx::Point view_center(view->width() / 2, view->height() / 2);
|
| + views::View::ConvertPointToScreen(view, &view_center);
|
| + ui_controls::SendMouseMoveNotifyWhenDone(
|
| + view_center.x(), view_center.y(),
|
| + base::Bind(&internal::ClickTask, button, state, task));
|
| +}
|
| +
|
| +#else // !defined(TOOLKIT_VIEWS)
|
| +
|
| +void MoveMouseToCenterAndPress(GtkWidget* widget,
|
| + ui_controls::MouseButton button,
|
| + int state,
|
| + const base::Closure& task) {
|
| + gfx::Rect bounds = ui::GetWidgetScreenBounds(widget);
|
| + ui_controls::SendMouseMoveNotifyWhenDone(
|
| + bounds.x() + bounds.width() / 2,
|
| + bounds.y() + bounds.height() / 2,
|
| + base::Bind(&internal::ClickTask, button, state, task));
|
| +}
|
| +
|
| +#endif // defined(TOOLKIT_VIEWS
|
| +
|
| } // namespace ui_test_utils
|
|
|