// 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. #include "chrome/test/webdriver/commands/window_commands.h" #include "base/values.h" #include "chrome/test/webdriver/commands/response.h" #include "chrome/test/webdriver/webdriver_error.h" #include "chrome/test/webdriver/webdriver_session.h" #include "chrome/test/webdriver/webdriver_util.h" using base::Value; namespace webdriver { namespace { bool GetWindowId(const std::string& window_id_string, const WebViewId& current_id, WebViewId* window_id, Response* const response) { if (window_id_string == "current") { *window_id = current_id; } else if (!StringToWebViewId(window_id_string, window_id)) { response->SetError( new Error(kBadRequest, "Invalid window ID")); return false; } return true; } } WindowSizeCommand::WindowSizeCommand( const std::vector& path_segments, const base::DictionaryValue* parameters) : WebDriverCommand(path_segments, parameters) { } WindowSizeCommand::~WindowSizeCommand() { } bool WindowSizeCommand::DoesGet() { return true; } bool WindowSizeCommand::DoesPost() { return true; } void WindowSizeCommand::ExecuteGet(Response* const response) { // Path segment: "/session/$sessionId/window/$windowHandle/size" WebViewId window_id; WebViewId current_id = session_->current_target().view_id; if (!GetWindowId(GetPathVariable(4), current_id, &window_id, response)) return; Rect bounds; Error* error = session_->GetWindowBounds(window_id, &bounds); if (error) { response->SetError(error); return; } base::DictionaryValue* size = new base::DictionaryValue(); size->SetInteger("width", bounds.width()); size->SetInteger("height", bounds.height()); response->SetValue(size); } void WindowSizeCommand::ExecutePost(Response* const response) { // Path segment: "/session/$sessionId/window/$windowHandle/size" WebViewId window_id; WebViewId current_id = session_->current_target().view_id; if (!GetWindowId(GetPathVariable(4), current_id, &window_id, response)) return; int width, height; if (!GetIntegerParameter("width", &width) || !GetIntegerParameter("height", &height)) { response->SetError(new Error( kBadRequest, "Missing or invalid 'width' or 'height' parameters")); return; } Rect bounds; Error* error = session_->GetWindowBounds(window_id, &bounds); if (!error) { bounds = Rect(bounds.origin(), Size(width, height)); error = session_->SetWindowBounds(window_id, bounds); } if (error) { response->SetError(error); return; } } WindowPositionCommand::WindowPositionCommand( const std::vector& path_segments, const base::DictionaryValue* parameters) : WebDriverCommand(path_segments, parameters) { } WindowPositionCommand::~WindowPositionCommand() { } bool WindowPositionCommand::DoesGet() { return true; } bool WindowPositionCommand::DoesPost() { return true; } void WindowPositionCommand::ExecuteGet(Response* const response) { // Path segment: "/session/$sessionId/window/$windowHandle/position" WebViewId window_id; WebViewId current_id = session_->current_target().view_id; if (!GetWindowId(GetPathVariable(4), current_id, &window_id, response)) return; Rect bounds; Error* error = session_->GetWindowBounds(window_id, &bounds); if (error) { response->SetError(error); return; } base::DictionaryValue* size = new base::DictionaryValue(); size->SetInteger("x", bounds.x()); size->SetInteger("y", bounds.y()); response->SetValue(size); } void WindowPositionCommand::ExecutePost(Response* const response) { // Path segment: "/session/$sessionId/window/$windowHandle/position" WebViewId window_id; WebViewId current_id = session_->current_target().view_id; if (!GetWindowId(GetPathVariable(4), current_id, &window_id, response)) return; int x, y; if (!GetIntegerParameter("x", &x) || !GetIntegerParameter("y", &y)) { response->SetError(new Error( kBadRequest, "Missing or invalid 'x' or 'y' parameters")); return; } Rect bounds; Error* error = session_->GetWindowBounds(window_id, &bounds); if (!error) { bounds = Rect(Point(x, y), bounds.size()); error = session_->SetWindowBounds(window_id, bounds); } if (error) { response->SetError(error); return; } } WindowMaximizeCommand::WindowMaximizeCommand( const std::vector& path_segments, const base::DictionaryValue* parameters) : WebDriverCommand(path_segments, parameters) { } WindowMaximizeCommand::~WindowMaximizeCommand() { } bool WindowMaximizeCommand::DoesPost() { return true; } void WindowMaximizeCommand::ExecutePost(Response* const response) { // Path segment: "/session/$sessionId/window/$windowHandle/maximize" WebViewId window_id; WebViewId current_id = session_->current_target().view_id; if (!GetWindowId(GetPathVariable(4), current_id, &window_id, response)) return; Error* error = session_->MaximizeWindow(window_id); if (error) { response->SetError(error); return; } } } // namespace webdriver