172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/testing_automation_provider.h"
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <gtk/gtk.h>
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/utf_string_conversions.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_window_tracker.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/view_id_util.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ActivateWindow(int handle) {
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NOTIMPLEMENTED();
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::IsWindowMaximized(int handle,
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                  bool* is_maximized,
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                  bool* success) {
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *success = false;
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NOTIMPLEMENTED();
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::TerminateSession(int handle, bool* success) {
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *success = false;
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NOTIMPLEMENTED();
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if !defined(TOOLKIT_VIEWS)
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WindowGetViewBounds(int handle,
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    int view_id,
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    bool screen_coordinates,
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    bool* success,
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    gfx::Rect* bounds) {
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *success = false;
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  GtkWindow* window = window_tracker_->GetResource(handle);
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (window) {
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window),
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                              static_cast<ViewID>(view_id));
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    if (!widget)
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      return;
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    *success = true;
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    *bounds = gfx::Rect(widget->allocation.width, widget->allocation.height);
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    gint x, y;
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    if (screen_coordinates) {
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      gfx::Point point = gtk_util::GetWidgetScreenPosition(widget);
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      x = point.x();
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      y = point.y();
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    } else {
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      gtk_widget_translate_coordinates(widget, GTK_WIDGET(window),
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                       0, 0, &x, &y);
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    bounds->set_origin(gfx::Point(x, y));
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetWindowBounds(int handle,
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                gfx::Rect* bounds,
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                bool* result) {
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *result = false;
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NOTIMPLEMENTED();
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetWindowBounds(int handle,
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                const gfx::Rect& bounds,
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                bool* success) {
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *success = false;
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  GtkWindow* window = window_tracker_->GetResource(handle);
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (window) {
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    gtk_window_move(window, bounds.x(), bounds.height());
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    gtk_window_resize(window, bounds.width(), bounds.height());
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    *success = true;
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetWindowVisible(int handle,
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                 bool visible,
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                 bool* result) {
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  *result = false;
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  GtkWindow* window = window_tracker_->GetResource(handle);
85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (window) {
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    if (visible) {
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      gtk_window_present(window);
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    } else {
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      gtk_widget_hide(GTK_WIDGET(window));
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    *result = true;
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetWindowTitle(int handle, string16* text) {
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  gfx::NativeWindow window = window_tracker_->GetResource(handle);
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const gchar* title = gtk_window_get_title(window);
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  text->assign(UTF8ToUTF16(title));
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
100