| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/autoclick/autoclick_controller.h" | 5 #include "ash/autoclick/autoclick_controller.h" |
| 6 #include "ash/shell.h" | 6 #include "ash/shell.h" |
| 7 #include "ash/test/ash_test_base.h" | 7 #include "ash/test/ash_test_base.h" |
| 8 #include "ui/aura/test/test_window_delegate.h" | 8 #include "ui/aura/test/test_window_delegate.h" |
| 9 #include "ui/aura/window.h" | 9 #include "ui/aura/window.h" |
| 10 #include "ui/aura/window_event_dispatcher.h" | 10 #include "ui/aura/window_event_dispatcher.h" |
| 11 #include "ui/events/event.h" | 11 #include "ui/events/event.h" |
| 12 #include "ui/events/event_constants.h" | 12 #include "ui/events/event_constants.h" |
| 13 #include "ui/events/event_handler.h" | 13 #include "ui/events/event_handler.h" |
| 14 #include "ui/events/event_utils.h" | 14 #include "ui/events/event_utils.h" |
| 15 #include "ui/events/keycodes/keyboard_codes.h" | 15 #include "ui/events/keycodes/keyboard_codes.h" |
| 16 #include "ui/events/test/event_generator.h" | 16 #include "ui/events/test/event_generator.h" |
| 17 | 17 |
| 18 namespace ash { | 18 namespace ash { |
| 19 | 19 |
| 20 class MouseEventCapturer : public ui::EventHandler { | 20 class MouseEventCapturer : public ui::EventHandler { |
| 21 public: | 21 public: |
| 22 MouseEventCapturer() { Reset(); } | 22 MouseEventCapturer() { Reset(); } |
| 23 ~MouseEventCapturer() override {} | 23 ~MouseEventCapturer() override {} |
| 24 | 24 |
| 25 void Reset() { | 25 void Reset() { events_.clear(); } |
| 26 events_.clear(); | |
| 27 } | |
| 28 | 26 |
| 29 void OnMouseEvent(ui::MouseEvent* event) override { | 27 void OnMouseEvent(ui::MouseEvent* event) override { |
| 30 if (!(event->flags() & ui::EF_LEFT_MOUSE_BUTTON)) | 28 if (!(event->flags() & ui::EF_LEFT_MOUSE_BUTTON)) |
| 31 return; | 29 return; |
| 32 // Filter out extraneous mouse events like mouse entered, exited, | 30 // Filter out extraneous mouse events like mouse entered, exited, |
| 33 // capture changed, etc. | 31 // capture changed, etc. |
| 34 ui::EventType type = event->type(); | 32 ui::EventType type = event->type(); |
| 35 if (type == ui::ET_MOUSE_MOVED || type == ui::ET_MOUSE_PRESSED || | 33 if (type == ui::ET_MOUSE_MOVED || type == ui::ET_MOUSE_PRESSED || |
| 36 type == ui::ET_MOUSE_RELEASED) { | 34 type == ui::ET_MOUSE_RELEASED) { |
| 37 events_.push_back(ui::MouseEvent(event->type(), event->location(), | 35 events_.push_back(ui::MouseEvent(event->type(), event->location(), |
| 38 event->root_location(), | 36 event->root_location(), |
| 39 ui::EventTimeForNow(), event->flags(), | 37 ui::EventTimeForNow(), event->flags(), |
| 40 event->changed_button_flags())); | 38 event->changed_button_flags())); |
| 41 // Stop event propagation so we don't click on random stuff that | 39 // Stop event propagation so we don't click on random stuff that |
| 42 // might break test assumptions. | 40 // might break test assumptions. |
| 43 event->StopPropagation(); | 41 event->StopPropagation(); |
| 44 } | 42 } |
| 45 | 43 |
| 46 // If there is a possibility that we're in an infinite loop, we should | 44 // If there is a possibility that we're in an infinite loop, we should |
| 47 // exit early with a sensible error rather than letting the test time out. | 45 // exit early with a sensible error rather than letting the test time out. |
| 48 ASSERT_LT(events_.size(), 100u); | 46 ASSERT_LT(events_.size(), 100u); |
| 49 } | 47 } |
| 50 | 48 |
| 51 const std::vector<ui::MouseEvent>& captured_events() const { | 49 const std::vector<ui::MouseEvent>& captured_events() const { return events_; } |
| 52 return events_; | |
| 53 } | |
| 54 | 50 |
| 55 private: | 51 private: |
| 56 std::vector<ui::MouseEvent> events_; | 52 std::vector<ui::MouseEvent> events_; |
| 57 | 53 |
| 58 DISALLOW_COPY_AND_ASSIGN(MouseEventCapturer); | 54 DISALLOW_COPY_AND_ASSIGN(MouseEventCapturer); |
| 59 }; | 55 }; |
| 60 | 56 |
| 61 class AutoclickTest : public test::AshTestBase { | 57 class AutoclickTest : public test::AshTestBase { |
| 62 public: | 58 public: |
| 63 AutoclickTest() {} | 59 AutoclickTest() {} |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 } | 203 } |
| 208 | 204 |
| 209 TEST_F(AutoclickTest, KeyModifiersReleased) { | 205 TEST_F(AutoclickTest, KeyModifiersReleased) { |
| 210 GetAutoclickController()->SetEnabled(true); | 206 GetAutoclickController()->SetEnabled(true); |
| 211 | 207 |
| 212 ui::EventFlags modifier_flags = static_cast<ui::EventFlags>( | 208 ui::EventFlags modifier_flags = static_cast<ui::EventFlags>( |
| 213 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN); | 209 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN); |
| 214 MoveMouseWithFlagsTo(12, 12, modifier_flags); | 210 MoveMouseWithFlagsTo(12, 12, modifier_flags); |
| 215 | 211 |
| 216 // Simulate releasing key modifiers by sending key released events. | 212 // Simulate releasing key modifiers by sending key released events. |
| 217 GetEventGenerator().ReleaseKey(ui::VKEY_CONTROL, | 213 GetEventGenerator().ReleaseKey( |
| 214 ui::VKEY_CONTROL, |
| 218 static_cast<ui::EventFlags>(ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)); | 215 static_cast<ui::EventFlags>(ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)); |
| 219 GetEventGenerator().ReleaseKey(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); | 216 GetEventGenerator().ReleaseKey(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); |
| 220 | 217 |
| 221 std::vector<ui::MouseEvent> events; | 218 std::vector<ui::MouseEvent> events; |
| 222 events = WaitForMouseEvents(); | 219 events = WaitForMouseEvents(); |
| 223 EXPECT_EQ(2u, events.size()); | 220 EXPECT_EQ(2u, events.size()); |
| 224 EXPECT_EQ(0, events[0].flags() & ui::EF_CONTROL_DOWN); | 221 EXPECT_EQ(0, events[0].flags() & ui::EF_CONTROL_DOWN); |
| 225 EXPECT_EQ(0, events[0].flags() & ui::EF_SHIFT_DOWN); | 222 EXPECT_EQ(0, events[0].flags() & ui::EF_SHIFT_DOWN); |
| 226 EXPECT_EQ(ui::EF_ALT_DOWN, events[0].flags() & ui::EF_ALT_DOWN); | 223 EXPECT_EQ(ui::EF_ALT_DOWN, events[0].flags() & ui::EF_ALT_DOWN); |
| 227 } | 224 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 246 | 243 |
| 247 // Performing a gesture should cancel the autoclick. | 244 // Performing a gesture should cancel the autoclick. |
| 248 GetEventGenerator().MoveMouseTo(200, 200); | 245 GetEventGenerator().MoveMouseTo(200, 200); |
| 249 GetEventGenerator().GestureTapDownAndUp(gfx::Point(100, 100)); | 246 GetEventGenerator().GestureTapDownAndUp(gfx::Point(100, 100)); |
| 250 events = WaitForMouseEvents(); | 247 events = WaitForMouseEvents(); |
| 251 EXPECT_EQ(0u, events.size()); | 248 EXPECT_EQ(0u, events.size()); |
| 252 | 249 |
| 253 // Test another gesture. | 250 // Test another gesture. |
| 254 GetEventGenerator().MoveMouseTo(100, 100); | 251 GetEventGenerator().MoveMouseTo(100, 100); |
| 255 GetEventGenerator().GestureScrollSequence( | 252 GetEventGenerator().GestureScrollSequence( |
| 256 gfx::Point(100, 100), | 253 gfx::Point(100, 100), gfx::Point(200, 200), |
| 257 gfx::Point(200, 200), | 254 base::TimeDelta::FromMilliseconds(200), 3); |
| 258 base::TimeDelta::FromMilliseconds(200), | |
| 259 3); | |
| 260 events = WaitForMouseEvents(); | 255 events = WaitForMouseEvents(); |
| 261 EXPECT_EQ(0u, events.size()); | 256 EXPECT_EQ(0u, events.size()); |
| 262 | 257 |
| 263 // Test scroll events. | 258 // Test scroll events. |
| 264 GetEventGenerator().MoveMouseTo(200, 200); | 259 GetEventGenerator().MoveMouseTo(200, 200); |
| 265 GetEventGenerator().ScrollSequence( | 260 GetEventGenerator().ScrollSequence(gfx::Point(100, 100), |
| 266 gfx::Point(100, 100), base::TimeDelta::FromMilliseconds(200), | 261 base::TimeDelta::FromMilliseconds(200), 0, |
| 267 0, 100, 3, 2); | 262 100, 3, 2); |
| 268 events = WaitForMouseEvents(); | 263 events = WaitForMouseEvents(); |
| 269 EXPECT_EQ(0u, events.size()); | 264 EXPECT_EQ(0u, events.size()); |
| 270 } | 265 } |
| 271 | 266 |
| 272 TEST_F(AutoclickTest, SynthesizedMouseMovesIgnored) { | 267 TEST_F(AutoclickTest, SynthesizedMouseMovesIgnored) { |
| 273 GetAutoclickController()->SetEnabled(true); | 268 GetAutoclickController()->SetEnabled(true); |
| 274 std::vector<ui::MouseEvent> events; | 269 std::vector<ui::MouseEvent> events; |
| 275 GetEventGenerator().MoveMouseTo(100, 100); | 270 GetEventGenerator().MoveMouseTo(100, 100); |
| 276 events = WaitForMouseEvents(); | 271 events = WaitForMouseEvents(); |
| 277 EXPECT_EQ(2u, events.size()); | 272 EXPECT_EQ(2u, events.size()); |
| 278 | 273 |
| 279 // Show a window and make sure the new window is under the cursor. As a | 274 // Show a window and make sure the new window is under the cursor. As a |
| 280 // result, synthesized mouse events will be dispatched to the window, but it | 275 // result, synthesized mouse events will be dispatched to the window, but it |
| 281 // should not trigger an autoclick. | 276 // should not trigger an autoclick. |
| 282 aura::test::EventCountDelegate delegate; | 277 aura::test::EventCountDelegate delegate; |
| 283 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( | 278 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( |
| 284 &delegate, 123, gfx::Rect(50, 50, 100, 100))); | 279 &delegate, 123, gfx::Rect(50, 50, 100, 100))); |
| 285 window->Show(); | 280 window->Show(); |
| 286 events = WaitForMouseEvents(); | 281 events = WaitForMouseEvents(); |
| 287 EXPECT_EQ(0u, events.size()); | 282 EXPECT_EQ(0u, events.size()); |
| 288 EXPECT_EQ("1 1 0", delegate.GetMouseMotionCountsAndReset()); | 283 EXPECT_EQ("1 1 0", delegate.GetMouseMotionCountsAndReset()); |
| 289 } | 284 } |
| 290 | 285 |
| 291 } // namespace ash | 286 } // namespace ash |
| OLD | NEW |