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