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