1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/test/ui_controls.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/test/ui_controls_internal_win.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui_controls { 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool g_ui_controls_enabled = false; 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void EnableUIControls() { 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) g_ui_controls_enabled = true; 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendKeyPress(gfx::NativeWindow window, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode key, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool control, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool shift, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool alt, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool command) { 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!command); // No command key on Windows 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendKeyPressImpl(window, key, control, shift, alt, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode key, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool control, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool shift, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool alt, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool command, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& task) { 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!command); // No command key on Windows 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendKeyPressImpl(window, key, control, shift, alt, task); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendMouseMove(long x, long y) { 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendMouseMoveImpl(x, y, base::Closure()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendMouseMoveNotifyWhenDone(long x, long y, const base::Closure& task) { 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendMouseMoveImpl(x, y, task); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendMouseEvents(MouseButton type, int state) { 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendMouseEventsImpl(type, state, base::Closure()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendMouseEventsNotifyWhenDone(MouseButton type, int state, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& task) { 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendMouseEventsImpl(type, state, task); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SendMouseClick(MouseButton type) { 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK(g_ui_controls_enabled); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return internal::SendMouseEventsImpl(type, UP | DOWN, base::Closure()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RunClosureAfterAllPendingUIEvents(const base::Closure& closure) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On windows, posting UI events is synchronous so just post the closure. 71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::MessageLoopForUI::current()->PostTask(FROM_HERE, closure); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui_controls 75