1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/bind.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/logging.h" 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/env.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/test/aura_test_utils.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/aura/test/ui_controls_factory_aura.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/aura/window_tree_host.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/base/test/ui_controls_aura.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace aura { 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test { 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass UIControlsOzone : public ui_controls::UIControlsAura { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UIControlsOzone(WindowTreeHost* host) : host_(host) {} 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendKeyPress(gfx::NativeWindow window, 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::KeyboardCode key, 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool control, 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool shift, 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool alt, 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool command) OVERRIDE { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return SendKeyPressNotifyWhenDone( 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch window, key, control, shift, alt, command, base::Closure()); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendKeyPressNotifyWhenDone( 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::NativeWindow window, 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::KeyboardCode key, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool control, 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool shift, 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool alt, 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool command, 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& closure) OVERRIDE { 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int flags = button_down_mask_; 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (control) { 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags |= ui::EF_CONTROL_DOWN; 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, flags); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (shift) { 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags |= ui::EF_SHIFT_DOWN; 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SHIFT, flags); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (alt) { 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags |= ui::EF_ALT_DOWN; 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_MENU, flags); 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (command) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_COMMAND_DOWN; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PostKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_LWIN, flags); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_PRESSED, key, flags); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_RELEASED, key, flags); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (alt) { 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags &= ~ui::EF_ALT_DOWN; 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_MENU, flags); 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (shift) { 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags &= ~ui::EF_SHIFT_DOWN; 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_SHIFT, flags); 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (control) { 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags &= ~ui::EF_CONTROL_DOWN; 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, flags); 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (command) { 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags &= ~ui::EF_COMMAND_DOWN; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PostKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_LWIN, flags); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunClosureAfterAllPendingUIEvents(closure); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendMouseMove(long screen_x, long screen_y) OVERRIDE { 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return SendMouseMoveNotifyWhenDone(screen_x, screen_y, base::Closure()); 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendMouseMoveNotifyWhenDone( 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch long screen_x, 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch long screen_y, 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& closure) OVERRIDE { 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Point root_location(screen_x, screen_y); 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) aura::client::ScreenPositionClient* screen_position_client = 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) aura::client::GetScreenPositionClient(host_->window()); 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (screen_position_client) { 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) screen_position_client->ConvertPointFromScreen(host_->window(), 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &root_location); 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Point root_current_location = 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) QueryLatestMousePositionRequestInHost(host_); 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) host_->ConvertPointFromHost(&root_current_location); 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (button_down_mask_) 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostMouseEvent(ui::ET_MOUSE_DRAGGED, root_location, 0, 0); 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) else 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostMouseEvent(ui::ET_MOUSE_MOVED, root_location, 0, 0); 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunClosureAfterAllPendingUIEvents(closure); 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendMouseEvents(ui_controls::MouseButton type, 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int state) OVERRIDE { 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return SendMouseEventsNotifyWhenDone(type, state, base::Closure()); 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendMouseEventsNotifyWhenDone( 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_controls::MouseButton type, 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int state, 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& closure) OVERRIDE { 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Point loc = aura::Env::GetInstance()->last_mouse_location(); 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) aura::client::ScreenPositionClient* screen_position_client = 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) aura::client::GetScreenPositionClient(host_->window()); 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (screen_position_client) { 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) screen_position_client->ConvertPointFromScreen(host_->window(), &loc); 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int flag = 0; 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switch (type) { 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ui_controls::LEFT: 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flag = ui::EF_LEFT_MOUSE_BUTTON; 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ui_controls::MIDDLE: 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flag = ui::EF_MIDDLE_MOUSE_BUTTON; 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ui_controls::RIGHT: 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flag = ui::EF_RIGHT_MOUSE_BUTTON; 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) default: 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NOTREACHED(); 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (state & ui_controls::DOWN) { 1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) button_down_mask_ |= flag; 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostMouseEvent(ui::ET_MOUSE_PRESSED, loc, button_down_mask_ | flag, flag); 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (state & ui_controls::UP) { 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) button_down_mask_ &= ~flag; 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PostMouseEvent( 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::ET_MOUSE_RELEASED, loc, button_down_mask_ | flag, flag); 1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunClosureAfterAllPendingUIEvents(closure); 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool SendMouseClick(ui_controls::MouseButton type) OVERRIDE { 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return SendMouseEvents(type, ui_controls::UP | ui_controls::DOWN); 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RunClosureAfterAllPendingUIEvents( 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& closure) OVERRIDE { 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!closure.is_null()) 1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, closure); 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void PostKeyEvent(ui::EventType type, ui::KeyboardCode key_code, int flags) { 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::MessageLoop::current()->PostTask( 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FROM_HERE, 1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&UIControlsOzone::PostKeyEventTask, 1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this), 1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) type, 1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) key_code, 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags)); 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void PostKeyEventTask(ui::EventType type, 1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::KeyboardCode key_code, 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int flags) { 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Do not rewrite injected events. See crbug.com/136465. 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags |= ui::EF_FINAL; 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::KeyEvent key_event(type, key_code, flags); 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) host_->PostNativeEvent(&key_event); 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void PostMouseEvent(ui::EventType type, 1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const gfx::PointF& location, 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int flags, 1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int changed_button_flags) { 1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::MessageLoop::current()->PostTask( 1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FROM_HERE, 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&UIControlsOzone::PostMouseEventTask, 1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this), 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) type, 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) location, 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) flags, 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) changed_button_flags)); 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void PostMouseEventTask(ui::EventType type, 2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const gfx::PointF& location, 2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int flags, 2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int changed_button_flags) { 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::MouseEvent mouse_event( 2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) type, location, location, flags, changed_button_flags); 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // This hack is necessary to set the repeat count for clicks. 2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::MouseEvent mouse_event2(&mouse_event); 2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) host_->PostNativeEvent(&mouse_event2); 2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WindowTreeHost* host_; 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Mask of the mouse buttons currently down. 2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) unsigned button_down_mask_ = 0; 2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(UIControlsOzone); 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdochui_controls::UIControlsAura* CreateUIControlsAura(WindowTreeHost* host) { 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return new UIControlsOzone(host); 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace test 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace aura 231