Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: ui/aura/window_event_dispatcher_unittest.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/aura/window_event_dispatcher.cc ('k') | ui/aura/window_targeter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/aura/window_event_dispatcher.h" 5 #include "ui/aura/window_event_dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 return client::GetFocusClient(window)->GetFocusedWindow() == window; 102 return client::GetFocusClient(window)->GetFocusedWindow() == window;
103 } 103 }
104 104
105 } // namespace 105 } // namespace
106 106
107 typedef test::AuraTestBase WindowEventDispatcherTest; 107 typedef test::AuraTestBase WindowEventDispatcherTest;
108 108
109 TEST_F(WindowEventDispatcherTest, OnHostMouseEvent) { 109 TEST_F(WindowEventDispatcherTest, OnHostMouseEvent) {
110 // Create two non-overlapping windows so we don't have to worry about which 110 // Create two non-overlapping windows so we don't have to worry about which
111 // is on top. 111 // is on top.
112 scoped_ptr<NonClientDelegate> delegate1(new NonClientDelegate()); 112 std::unique_ptr<NonClientDelegate> delegate1(new NonClientDelegate());
113 scoped_ptr<NonClientDelegate> delegate2(new NonClientDelegate()); 113 std::unique_ptr<NonClientDelegate> delegate2(new NonClientDelegate());
114 const int kWindowWidth = 123; 114 const int kWindowWidth = 123;
115 const int kWindowHeight = 45; 115 const int kWindowHeight = 45;
116 gfx::Rect bounds1(100, 200, kWindowWidth, kWindowHeight); 116 gfx::Rect bounds1(100, 200, kWindowWidth, kWindowHeight);
117 gfx::Rect bounds2(300, 400, kWindowWidth, kWindowHeight); 117 gfx::Rect bounds2(300, 400, kWindowWidth, kWindowHeight);
118 scoped_ptr<aura::Window> window1(CreateTestWindowWithDelegate( 118 std::unique_ptr<aura::Window> window1(CreateTestWindowWithDelegate(
119 delegate1.get(), -1234, bounds1, root_window())); 119 delegate1.get(), -1234, bounds1, root_window()));
120 scoped_ptr<aura::Window> window2(CreateTestWindowWithDelegate( 120 std::unique_ptr<aura::Window> window2(CreateTestWindowWithDelegate(
121 delegate2.get(), -5678, bounds2, root_window())); 121 delegate2.get(), -5678, bounds2, root_window()));
122 122
123 // Send a mouse event to window1. 123 // Send a mouse event to window1.
124 gfx::Point point(101, 201); 124 gfx::Point point(101, 201);
125 ui::MouseEvent event1(ui::ET_MOUSE_PRESSED, point, point, 125 ui::MouseEvent event1(ui::ET_MOUSE_PRESSED, point, point,
126 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 126 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
127 ui::EF_LEFT_MOUSE_BUTTON); 127 ui::EF_LEFT_MOUSE_BUTTON);
128 DispatchEventUsingWindowDispatcher(&event1); 128 DispatchEventUsingWindowDispatcher(&event1);
129 129
130 // Event was tested for non-client area for the target window. 130 // Event was tested for non-client area for the target window.
(...skipping 28 matching lines...) Expand all
159 RunAllPendingInMessageLoop(); 159 RunAllPendingInMessageLoop();
160 EXPECT_TRUE(Env::GetInstance()->is_touch_down()); 160 EXPECT_TRUE(Env::GetInstance()->is_touch_down());
161 } 161 }
162 162
163 // Check that we correctly track the state of the mouse buttons in response to 163 // Check that we correctly track the state of the mouse buttons in response to
164 // button press and release events. 164 // button press and release events.
165 TEST_F(WindowEventDispatcherTest, MouseButtonState) { 165 TEST_F(WindowEventDispatcherTest, MouseButtonState) {
166 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown()); 166 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown());
167 167
168 gfx::Point location; 168 gfx::Point location;
169 scoped_ptr<ui::MouseEvent> event; 169 std::unique_ptr<ui::MouseEvent> event;
170 170
171 // Press the left button. 171 // Press the left button.
172 event.reset(new ui::MouseEvent( 172 event.reset(new ui::MouseEvent(
173 ui::ET_MOUSE_PRESSED, location, location, ui::EventTimeForNow(), 173 ui::ET_MOUSE_PRESSED, location, location, ui::EventTimeForNow(),
174 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)); 174 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON));
175 DispatchEventUsingWindowDispatcher(event.get()); 175 DispatchEventUsingWindowDispatcher(event.get());
176 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); 176 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown());
177 177
178 // Additionally press the right. 178 // Additionally press the right.
179 event.reset(new ui::MouseEvent( 179 event.reset(new ui::MouseEvent(
(...skipping 19 matching lines...) Expand all
199 199
200 // Press the middle button. 200 // Press the middle button.
201 event.reset(new ui::MouseEvent( 201 event.reset(new ui::MouseEvent(
202 ui::ET_MOUSE_PRESSED, location, location, ui::EventTimeForNow(), 202 ui::ET_MOUSE_PRESSED, location, location, ui::EventTimeForNow(),
203 ui::EF_MIDDLE_MOUSE_BUTTON, ui::EF_MIDDLE_MOUSE_BUTTON)); 203 ui::EF_MIDDLE_MOUSE_BUTTON, ui::EF_MIDDLE_MOUSE_BUTTON));
204 DispatchEventUsingWindowDispatcher(event.get()); 204 DispatchEventUsingWindowDispatcher(event.get());
205 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); 205 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown());
206 } 206 }
207 207
208 TEST_F(WindowEventDispatcherTest, TranslatedEvent) { 208 TEST_F(WindowEventDispatcherTest, TranslatedEvent) {
209 scoped_ptr<Window> w1(test::CreateTestWindowWithDelegate(NULL, 1, 209 std::unique_ptr<Window> w1(test::CreateTestWindowWithDelegate(
210 gfx::Rect(50, 50, 100, 100), root_window())); 210 NULL, 1, gfx::Rect(50, 50, 100, 100), root_window()));
211 211
212 gfx::Point origin(100, 100); 212 gfx::Point origin(100, 100);
213 ui::MouseEvent root(ui::ET_MOUSE_PRESSED, origin, origin, 213 ui::MouseEvent root(ui::ET_MOUSE_PRESSED, origin, origin,
214 ui::EventTimeForNow(), 0, 0); 214 ui::EventTimeForNow(), 0, 0);
215 215
216 EXPECT_EQ("100,100", root.location().ToString()); 216 EXPECT_EQ("100,100", root.location().ToString());
217 EXPECT_EQ("100,100", root.root_location().ToString()); 217 EXPECT_EQ("100,100", root.root_location().ToString());
218 218
219 ui::MouseEvent translated_event( 219 ui::MouseEvent translated_event(
220 root, static_cast<Window*>(root_window()), w1.get(), 220 root, static_cast<Window*>(root_window()), w1.get(),
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 ui::test::TestEventHandler lock_ef; 289 ui::test::TestEventHandler lock_ef;
290 client.GetNonLockWindow()->AddPreTargetHandler(&nonlock_ef); 290 client.GetNonLockWindow()->AddPreTargetHandler(&nonlock_ef);
291 client.GetLockWindow()->AddPreTargetHandler(&lock_ef); 291 client.GetLockWindow()->AddPreTargetHandler(&lock_ef);
292 292
293 Window* w1 = test::CreateTestWindowWithBounds(gfx::Rect(10, 10, 20, 20), 293 Window* w1 = test::CreateTestWindowWithBounds(gfx::Rect(10, 10, 20, 20),
294 client.GetNonLockWindow()); 294 client.GetNonLockWindow());
295 w1->set_id(1); 295 w1->set_id(1);
296 Window* w2 = test::CreateTestWindowWithBounds(gfx::Rect(30, 30, 20, 20), 296 Window* w2 = test::CreateTestWindowWithBounds(gfx::Rect(30, 30, 20, 20),
297 client.GetNonLockWindow()); 297 client.GetNonLockWindow());
298 w2->set_id(2); 298 w2->set_id(2);
299 scoped_ptr<Window> w3( 299 std::unique_ptr<Window> w3(test::CreateTestWindowWithDelegate(
300 test::CreateTestWindowWithDelegate(&d, 3, gfx::Rect(30, 30, 20, 20), 300 &d, 3, gfx::Rect(30, 30, 20, 20), client.GetLockWindow()));
301 client.GetLockWindow()));
302 301
303 w1->Focus(); 302 w1->Focus();
304 EXPECT_TRUE(IsFocusedWindow(w1)); 303 EXPECT_TRUE(IsFocusedWindow(w1));
305 304
306 client.Lock(); 305 client.Lock();
307 306
308 // Since we're locked, the attempt to focus w2 will be ignored. 307 // Since we're locked, the attempt to focus w2 will be ignored.
309 w2->Focus(); 308 w2->Focus();
310 EXPECT_TRUE(IsFocusedWindow(w1)); 309 EXPECT_TRUE(IsFocusedWindow(w1));
311 EXPECT_FALSE(IsFocusedWindow(w2)); 310 EXPECT_FALSE(IsFocusedWindow(w2));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 ui::KeyEvent unknown_key_with_char_event(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, 362 ui::KeyEvent unknown_key_with_char_event(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN,
364 ui::EF_NONE); 363 ui::EF_NONE);
365 unknown_key_with_char_event.set_character(0x00e4 /* "ä" */); 364 unknown_key_with_char_event.set_character(0x00e4 /* "ä" */);
366 DispatchEventUsingWindowDispatcher(&unknown_key_with_char_event); 365 DispatchEventUsingWindowDispatcher(&unknown_key_with_char_event);
367 EXPECT_TRUE(unknown_key_with_char_event.handled()); 366 EXPECT_TRUE(unknown_key_with_char_event.handled());
368 EXPECT_EQ(1, handler.num_key_events()); 367 EXPECT_EQ(1, handler.num_key_events());
369 root_window()->RemovePreTargetHandler(&handler); 368 root_window()->RemovePreTargetHandler(&handler);
370 } 369 }
371 370
372 TEST_F(WindowEventDispatcherTest, NoDelegateWindowReceivesKeyEvents) { 371 TEST_F(WindowEventDispatcherTest, NoDelegateWindowReceivesKeyEvents) {
373 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); 372 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
374 w1->Show(); 373 w1->Show();
375 w1->Focus(); 374 w1->Focus();
376 375
377 ui::test::TestEventHandler handler; 376 ui::test::TestEventHandler handler;
378 w1->AddPreTargetHandler(&handler); 377 w1->AddPreTargetHandler(&handler);
379 ui::KeyEvent key_press(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); 378 ui::KeyEvent key_press(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
380 DispatchEventUsingWindowDispatcher(&key_press); 379 DispatchEventUsingWindowDispatcher(&key_press);
381 EXPECT_TRUE(key_press.handled()); 380 EXPECT_TRUE(key_press.handled());
382 EXPECT_EQ(1, handler.num_key_events()); 381 EXPECT_EQ(1, handler.num_key_events());
383 382
(...skipping 23 matching lines...) Expand all
407 root_window()->RemovePreTargetHandler(&handler); 406 root_window()->RemovePreTargetHandler(&handler);
408 } 407 }
409 408
410 // Tests that scroll events are dispatched correctly. 409 // Tests that scroll events are dispatched correctly.
411 TEST_F(WindowEventDispatcherTest, ScrollEventDispatch) { 410 TEST_F(WindowEventDispatcherTest, ScrollEventDispatch) {
412 base::TimeDelta now = ui::EventTimeForNow(); 411 base::TimeDelta now = ui::EventTimeForNow();
413 ui::test::TestEventHandler handler; 412 ui::test::TestEventHandler handler;
414 root_window()->AddPreTargetHandler(&handler); 413 root_window()->AddPreTargetHandler(&handler);
415 414
416 test::TestWindowDelegate delegate; 415 test::TestWindowDelegate delegate;
417 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); 416 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate));
418 w1->SetBounds(gfx::Rect(20, 20, 40, 40)); 417 w1->SetBounds(gfx::Rect(20, 20, 40, 40));
419 418
420 // A scroll event on the root-window itself is dispatched. 419 // A scroll event on the root-window itself is dispatched.
421 ui::ScrollEvent scroll1(ui::ET_SCROLL, 420 ui::ScrollEvent scroll1(ui::ET_SCROLL,
422 gfx::Point(10, 10), 421 gfx::Point(10, 10),
423 now, 422 now,
424 0, 423 0,
425 0, -10, 424 0, -10,
426 0, -10, 425 0, -10,
427 2); 426 2);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 509
511 bool HasReceivedEvent(ui::EventType type) { 510 bool HasReceivedEvent(ui::EventType type) {
512 return std::find(events_.begin(), events_.end(), type) != events_.end(); 511 return std::find(events_.begin(), events_.end(), type) != events_.end();
513 } 512 }
514 513
515 bool LastTouchMayCauseScrolling() const { 514 bool LastTouchMayCauseScrolling() const {
516 return last_touch_may_cause_scrolling_; 515 return last_touch_may_cause_scrolling_;
517 } 516 }
518 517
519 private: 518 private:
520 scoped_ptr<base::RunLoop> run_loop_; 519 std::unique_ptr<base::RunLoop> run_loop_;
521 ui::EventType wait_until_event_; 520 ui::EventType wait_until_event_;
522 521
523 Events events_; 522 Events events_;
524 EventLocations mouse_locations_; 523 EventLocations mouse_locations_;
525 EventLocations touch_locations_; 524 EventLocations touch_locations_;
526 EventLocations gesture_locations_; 525 EventLocations gesture_locations_;
527 EventFlags mouse_event_flags_; 526 EventFlags mouse_event_flags_;
528 bool last_touch_may_cause_scrolling_; 527 bool last_touch_may_cause_scrolling_;
529 528
530 DISALLOW_COPY_AND_ASSIGN(EventFilterRecorder); 529 DISALLOW_COPY_AND_ASSIGN(EventFilterRecorder);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 626
628 // Verifies a repost mouse event targets the window with capture (if there is 627 // Verifies a repost mouse event targets the window with capture (if there is
629 // one). 628 // one).
630 // Flaky on 32-bit Windows bots. http://crbug.com/388290 629 // Flaky on 32-bit Windows bots. http://crbug.com/388290
631 TEST_F(WindowEventDispatcherTest, MAYBE(RepostTargetsCaptureWindow)) { 630 TEST_F(WindowEventDispatcherTest, MAYBE(RepostTargetsCaptureWindow)) {
632 // Set capture on |window| generate a mouse event (that is reposted) and not 631 // Set capture on |window| generate a mouse event (that is reposted) and not
633 // over |window| and verify |window| gets it (|window| gets it because it has 632 // over |window| and verify |window| gets it (|window| gets it because it has
634 // capture). 633 // capture).
635 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown()); 634 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown());
636 EventFilterRecorder recorder; 635 EventFilterRecorder recorder;
637 scoped_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL)); 636 std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL));
638 window->SetBounds(gfx::Rect(20, 20, 40, 30)); 637 window->SetBounds(gfx::Rect(20, 20, 40, 30));
639 window->AddPreTargetHandler(&recorder); 638 window->AddPreTargetHandler(&recorder);
640 window->SetCapture(); 639 window->SetCapture();
641 const ui::MouseEvent press_event( 640 const ui::MouseEvent press_event(
642 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), 641 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(),
643 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 642 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
644 host()->dispatcher()->RepostEvent(&press_event); 643 host()->dispatcher()->RepostEvent(&press_event);
645 RunAllPendingInMessageLoop(); // Necessitated by RepostEvent(). 644 RunAllPendingInMessageLoop(); // Necessitated by RepostEvent().
646 // Mouse moves/enters may be generated. We only care about a pressed. 645 // Mouse moves/enters may be generated. We only care about a pressed.
647 EXPECT_TRUE(EventTypesToString(recorder.events()).find("MOUSE_PRESSED") != 646 EXPECT_TRUE(EventTypesToString(recorder.events()).find("MOUSE_PRESSED") !=
648 std::string::npos) << EventTypesToString(recorder.events()); 647 std::string::npos) << EventTypesToString(recorder.events());
649 } 648 }
650 649
651 TEST_F(WindowEventDispatcherTest, MouseMovesHeld) { 650 TEST_F(WindowEventDispatcherTest, MouseMovesHeld) {
652 EventFilterRecorder recorder; 651 EventFilterRecorder recorder;
653 root_window()->AddPreTargetHandler(&recorder); 652 root_window()->AddPreTargetHandler(&recorder);
654 653
655 test::TestWindowDelegate delegate; 654 test::TestWindowDelegate delegate;
656 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 655 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
657 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); 656 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window()));
658 657
659 ui::MouseEvent mouse_move_event(ui::ET_MOUSE_MOVED, gfx::Point(0, 0), 658 ui::MouseEvent mouse_move_event(ui::ET_MOUSE_MOVED, gfx::Point(0, 0),
660 gfx::Point(0, 0), ui::EventTimeForNow(), 0, 659 gfx::Point(0, 0), ui::EventTimeForNow(), 0,
661 0); 660 0);
662 DispatchEventUsingWindowDispatcher(&mouse_move_event); 661 DispatchEventUsingWindowDispatcher(&mouse_move_event);
663 // Discard MOUSE_ENTER. 662 // Discard MOUSE_ENTER.
664 recorder.Reset(); 663 recorder.Reset();
665 664
666 host()->dispatcher()->HoldPointerMoves(); 665 host()->dispatcher()->HoldPointerMoves();
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 EXPECT_EQ(gfx::Point(13, 13), recorder.mouse_location(0)); 772 EXPECT_EQ(gfx::Point(13, 13), recorder.mouse_location(0));
774 recorder.Reset(); 773 recorder.Reset();
775 root_window()->RemovePreTargetHandler(&recorder); 774 root_window()->RemovePreTargetHandler(&recorder);
776 } 775 }
777 776
778 TEST_F(WindowEventDispatcherTest, TouchMovesHeld) { 777 TEST_F(WindowEventDispatcherTest, TouchMovesHeld) {
779 EventFilterRecorder recorder; 778 EventFilterRecorder recorder;
780 root_window()->AddPreTargetHandler(&recorder); 779 root_window()->AddPreTargetHandler(&recorder);
781 780
782 test::TestWindowDelegate delegate; 781 test::TestWindowDelegate delegate;
783 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 782 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
784 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); 783 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
785 784
786 // Starting the touch and throwing out the first few events, since the system 785 // Starting the touch and throwing out the first few events, since the system
787 // is going to generate synthetic mouse events that are not relevant to the 786 // is going to generate synthetic mouse events that are not relevant to the
788 // test. 787 // test.
789 ui::TouchEvent touch_pressed_event( 788 ui::TouchEvent touch_pressed_event(
790 ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 0, ui::EventTimeForNow()); 789 ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 0, ui::EventTimeForNow());
791 DispatchEventUsingWindowDispatcher(&touch_pressed_event); 790 DispatchEventUsingWindowDispatcher(&touch_pressed_event);
792 recorder.WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS); 791 recorder.WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS);
793 recorder.Reset(); 792 recorder.Reset();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 root_window()->RemovePreTargetHandler(&recorder); 831 root_window()->RemovePreTargetHandler(&recorder);
833 } 832 }
834 833
835 // Tests that mouse move event has a right location 834 // Tests that mouse move event has a right location
836 // when there isn't the target window 835 // when there isn't the target window
837 TEST_F(WindowEventDispatcherTest, MouseEventWithoutTargetWindow) { 836 TEST_F(WindowEventDispatcherTest, MouseEventWithoutTargetWindow) {
838 EventFilterRecorder recorder_first; 837 EventFilterRecorder recorder_first;
839 EventFilterRecorder recorder_second; 838 EventFilterRecorder recorder_second;
840 839
841 test::TestWindowDelegate delegate; 840 test::TestWindowDelegate delegate;
842 scoped_ptr<aura::Window> window_first(CreateTestWindowWithDelegate( 841 std::unique_ptr<aura::Window> window_first(CreateTestWindowWithDelegate(
843 &delegate, 1, gfx::Rect(20, 10, 10, 20), root_window())); 842 &delegate, 1, gfx::Rect(20, 10, 10, 20), root_window()));
844 window_first->Show(); 843 window_first->Show();
845 window_first->AddPreTargetHandler(&recorder_first); 844 window_first->AddPreTargetHandler(&recorder_first);
846 845
847 scoped_ptr<aura::Window> window_second(CreateTestWindowWithDelegate( 846 std::unique_ptr<aura::Window> window_second(CreateTestWindowWithDelegate(
848 &delegate, 2, gfx::Rect(20, 30, 10, 20), root_window())); 847 &delegate, 2, gfx::Rect(20, 30, 10, 20), root_window()));
849 window_second->Show(); 848 window_second->Show();
850 window_second->AddPreTargetHandler(&recorder_second); 849 window_second->AddPreTargetHandler(&recorder_second);
851 850
852 const gfx::Point event_location(22, 33); 851 const gfx::Point event_location(22, 33);
853 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, 852 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location,
854 ui::EventTimeForNow(), 0, 0); 853 ui::EventTimeForNow(), 0, 0);
855 DispatchEventUsingWindowDispatcher(&mouse); 854 DispatchEventUsingWindowDispatcher(&mouse);
856 855
857 EXPECT_TRUE(recorder_first.events().empty()); 856 EXPECT_TRUE(recorder_first.events().empty());
858 EXPECT_EQ("MOUSE_ENTERED MOUSE_MOVED", 857 EXPECT_EQ("MOUSE_ENTERED MOUSE_MOVED",
859 EventTypesToString(recorder_second.events())); 858 EventTypesToString(recorder_second.events()));
860 ASSERT_EQ(2u, recorder_second.mouse_locations().size()); 859 ASSERT_EQ(2u, recorder_second.mouse_locations().size());
861 EXPECT_EQ(gfx::Point(2, 3).ToString(), 860 EXPECT_EQ(gfx::Point(2, 3).ToString(),
862 recorder_second.mouse_locations()[0].ToString()); 861 recorder_second.mouse_locations()[0].ToString());
863 } 862 }
864 863
865 // Tests that a mouse exit is dispatched to the last mouse location when 864 // Tests that a mouse exit is dispatched to the last mouse location when
866 // the window is hiddden. 865 // the window is hiddden.
867 TEST_F(WindowEventDispatcherTest, DispatchMouseExitWhenHidingWindow) { 866 TEST_F(WindowEventDispatcherTest, DispatchMouseExitWhenHidingWindow) {
868 EventFilterRecorder recorder; 867 EventFilterRecorder recorder;
869 868
870 test::TestWindowDelegate delegate; 869 test::TestWindowDelegate delegate;
871 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 870 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
872 &delegate, 1, gfx::Rect(10, 10, 50, 50), root_window())); 871 &delegate, 1, gfx::Rect(10, 10, 50, 50), root_window()));
873 window->Show(); 872 window->Show();
874 window->AddPreTargetHandler(&recorder); 873 window->AddPreTargetHandler(&recorder);
875 874
876 // Dispatch a mouse move event into the window. 875 // Dispatch a mouse move event into the window.
877 const gfx::Point event_location(22, 33); 876 const gfx::Point event_location(22, 33);
878 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, 877 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location,
879 ui::EventTimeForNow(), 0, 0); 878 ui::EventTimeForNow(), 0, 0);
880 DispatchEventUsingWindowDispatcher(&mouse); 879 DispatchEventUsingWindowDispatcher(&mouse);
881 EXPECT_FALSE(recorder.events().empty()); 880 EXPECT_FALSE(recorder.events().empty());
882 recorder.Reset(); 881 recorder.Reset();
883 882
884 // Hide the window and verify a mouse exit event's location. 883 // Hide the window and verify a mouse exit event's location.
885 window->Hide(); 884 window->Hide();
886 EXPECT_FALSE(recorder.events().empty()); 885 EXPECT_FALSE(recorder.events().empty());
887 EXPECT_EQ("MOUSE_EXITED", EventTypesToString(recorder.events())); 886 EXPECT_EQ("MOUSE_EXITED", EventTypesToString(recorder.events()));
888 ASSERT_EQ(1u, recorder.mouse_locations().size()); 887 ASSERT_EQ(1u, recorder.mouse_locations().size());
889 EXPECT_EQ(gfx::Point(12, 23).ToString(), 888 EXPECT_EQ(gfx::Point(12, 23).ToString(),
890 recorder.mouse_locations()[0].ToString()); 889 recorder.mouse_locations()[0].ToString());
891 } 890 }
892 891
893 // Verifies that a direct call to ProcessedTouchEvent() does not cause a crash. 892 // Verifies that a direct call to ProcessedTouchEvent() does not cause a crash.
894 TEST_F(WindowEventDispatcherTest, CallToProcessedTouchEvent) { 893 TEST_F(WindowEventDispatcherTest, CallToProcessedTouchEvent) {
895 test::TestWindowDelegate delegate; 894 test::TestWindowDelegate delegate;
896 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 895 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
897 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); 896 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
898 897
899 host()->dispatcher()->ProcessedTouchEvent(0, window.get(), ui::ER_UNHANDLED); 898 host()->dispatcher()->ProcessedTouchEvent(0, window.get(), ui::ER_UNHANDLED);
900 } 899 }
901 900
902 // This event handler requests the dispatcher to start holding pointer-move 901 // This event handler requests the dispatcher to start holding pointer-move
903 // events when it receives the first scroll-update gesture. 902 // events when it receives the first scroll-update gesture.
904 class HoldPointerOnScrollHandler : public ui::test::TestEventHandler { 903 class HoldPointerOnScrollHandler : public ui::test::TestEventHandler {
905 public: 904 public:
906 HoldPointerOnScrollHandler(WindowEventDispatcher* dispatcher, 905 HoldPointerOnScrollHandler(WindowEventDispatcher* dispatcher,
(...skipping 23 matching lines...) Expand all
930 DISALLOW_COPY_AND_ASSIGN(HoldPointerOnScrollHandler); 929 DISALLOW_COPY_AND_ASSIGN(HoldPointerOnScrollHandler);
931 }; 930 };
932 931
933 // Tests that touch-move events don't contribute to an in-progress scroll 932 // Tests that touch-move events don't contribute to an in-progress scroll
934 // gesture if touch-move events are being held by the dispatcher. 933 // gesture if touch-move events are being held by the dispatcher.
935 TEST_F(WindowEventDispatcherTest, TouchMovesHeldOnScroll) { 934 TEST_F(WindowEventDispatcherTest, TouchMovesHeldOnScroll) {
936 EventFilterRecorder recorder; 935 EventFilterRecorder recorder;
937 root_window()->AddPreTargetHandler(&recorder); 936 root_window()->AddPreTargetHandler(&recorder);
938 test::TestWindowDelegate delegate; 937 test::TestWindowDelegate delegate;
939 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder); 938 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder);
940 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 939 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
941 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); 940 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
942 window->AddPreTargetHandler(&handler); 941 window->AddPreTargetHandler(&handler);
943 942
944 ui::test::EventGenerator generator(root_window()); 943 ui::test::EventGenerator generator(root_window());
945 generator.GestureScrollSequence( 944 generator.GestureScrollSequence(
946 gfx::Point(60, 60), gfx::Point(10, 60), 945 gfx::Point(60, 60), gfx::Point(10, 60),
947 base::TimeDelta::FromMilliseconds(100), 25); 946 base::TimeDelta::FromMilliseconds(100), 25);
948 947
949 // |handler| will have reset |filter| and started holding the touch-move 948 // |handler| will have reset |filter| and started holding the touch-move
950 // events when scrolling started. At the end of the scroll (i.e. upon 949 // events when scrolling started. At the end of the scroll (i.e. upon
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 root_window()->RemovePreTargetHandler(&recorder); 997 root_window()->RemovePreTargetHandler(&recorder);
999 } 998 }
1000 999
1001 // Tests that synthetic mouse events are ignored when mouse 1000 // Tests that synthetic mouse events are ignored when mouse
1002 // events are disabled. 1001 // events are disabled.
1003 TEST_F(WindowEventDispatcherTest, DispatchSyntheticMouseEvents) { 1002 TEST_F(WindowEventDispatcherTest, DispatchSyntheticMouseEvents) {
1004 EventFilterRecorder recorder; 1003 EventFilterRecorder recorder;
1005 root_window()->AddPreTargetHandler(&recorder); 1004 root_window()->AddPreTargetHandler(&recorder);
1006 1005
1007 test::TestWindowDelegate delegate; 1006 test::TestWindowDelegate delegate;
1008 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1007 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1009 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window())); 1008 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window()));
1010 window->Show(); 1009 window->Show();
1011 window->SetCapture(); 1010 window->SetCapture();
1012 1011
1013 test::TestCursorClient cursor_client(root_window()); 1012 test::TestCursorClient cursor_client(root_window());
1014 1013
1015 // Dispatch a non-synthetic mouse event when mouse events are enabled. 1014 // Dispatch a non-synthetic mouse event when mouse events are enabled.
1016 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), 1015 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, gfx::Point(10, 10),
1017 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0); 1016 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0);
1018 DispatchEventUsingWindowDispatcher(&mouse1); 1017 DispatchEventUsingWindowDispatcher(&mouse1);
(...skipping 12 matching lines...) Expand all
1031 cursor_client.DisableMouseEvents(); 1030 cursor_client.DisableMouseEvents();
1032 DispatchEventUsingWindowDispatcher(&mouse2); 1031 DispatchEventUsingWindowDispatcher(&mouse2);
1033 EXPECT_TRUE(recorder.events().empty()); 1032 EXPECT_TRUE(recorder.events().empty());
1034 root_window()->RemovePreTargetHandler(&recorder); 1033 root_window()->RemovePreTargetHandler(&recorder);
1035 } 1034 }
1036 1035
1037 // Tests that a mouse-move event is not synthesized when a mouse-button is down. 1036 // Tests that a mouse-move event is not synthesized when a mouse-button is down.
1038 TEST_F(WindowEventDispatcherTest, DoNotSynthesizeWhileButtonDown) { 1037 TEST_F(WindowEventDispatcherTest, DoNotSynthesizeWhileButtonDown) {
1039 EventFilterRecorder recorder; 1038 EventFilterRecorder recorder;
1040 test::TestWindowDelegate delegate; 1039 test::TestWindowDelegate delegate;
1041 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1040 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1042 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window())); 1041 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window()));
1043 window->Show(); 1042 window->Show();
1044 1043
1045 window->AddPreTargetHandler(&recorder); 1044 window->AddPreTargetHandler(&recorder);
1046 // Dispatch a non-synthetic mouse event when mouse events are enabled. 1045 // Dispatch a non-synthetic mouse event when mouse events are enabled.
1047 ui::MouseEvent mouse1(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), 1046 ui::MouseEvent mouse1(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10),
1048 gfx::Point(10, 10), ui::EventTimeForNow(), 1047 gfx::Point(10, 10), ui::EventTimeForNow(),
1049 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 1048 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
1050 DispatchEventUsingWindowDispatcher(&mouse1); 1049 DispatchEventUsingWindowDispatcher(&mouse1);
1051 ASSERT_EQ(1u, recorder.events().size()); 1050 ASSERT_EQ(1u, recorder.events().size());
(...skipping 16 matching lines...) Expand all
1068 #define MAYBE(x) x 1067 #define MAYBE(x) x
1069 #endif 1068 #endif
1070 1069
1071 // Tests synthetic mouse events generated when window bounds changes such that 1070 // Tests synthetic mouse events generated when window bounds changes such that
1072 // the cursor previously outside the window becomes inside, or vice versa. 1071 // the cursor previously outside the window becomes inside, or vice versa.
1073 // Do not synthesize events if the window ignores events or is invisible. 1072 // Do not synthesize events if the window ignores events or is invisible.
1074 // Flaky on 32-bit Windows bots. http://crbug.com/388272 1073 // Flaky on 32-bit Windows bots. http://crbug.com/388272
1075 TEST_F(WindowEventDispatcherTest, 1074 TEST_F(WindowEventDispatcherTest,
1076 MAYBE(SynthesizeMouseEventsOnWindowBoundsChanged)) { 1075 MAYBE(SynthesizeMouseEventsOnWindowBoundsChanged)) {
1077 test::TestWindowDelegate delegate; 1076 test::TestWindowDelegate delegate;
1078 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1077 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1079 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window())); 1078 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window()));
1080 window->Show(); 1079 window->Show();
1081 window->SetCapture(); 1080 window->SetCapture();
1082 1081
1083 EventFilterRecorder recorder; 1082 EventFilterRecorder recorder;
1084 window->AddPreTargetHandler(&recorder); 1083 window->AddPreTargetHandler(&recorder);
1085 1084
1086 // Dispatch a non-synthetic mouse event to place cursor inside window bounds. 1085 // Dispatch a non-synthetic mouse event to place cursor inside window bounds.
1087 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), 1086 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(10, 10),
1088 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0); 1087 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1125 } 1124 }
1126 1125
1127 // Tests that a mouse exit is dispatched to the last known cursor location 1126 // Tests that a mouse exit is dispatched to the last known cursor location
1128 // when the cursor becomes invisible. 1127 // when the cursor becomes invisible.
1129 TEST_F(WindowEventDispatcherTest, DispatchMouseExitWhenCursorHidden) { 1128 TEST_F(WindowEventDispatcherTest, DispatchMouseExitWhenCursorHidden) {
1130 EventFilterRecorder recorder; 1129 EventFilterRecorder recorder;
1131 root_window()->AddPreTargetHandler(&recorder); 1130 root_window()->AddPreTargetHandler(&recorder);
1132 1131
1133 test::TestWindowDelegate delegate; 1132 test::TestWindowDelegate delegate;
1134 gfx::Point window_origin(7, 18); 1133 gfx::Point window_origin(7, 18);
1135 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1134 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1136 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)), 1135 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)),
1137 root_window())); 1136 root_window()));
1138 window->Show(); 1137 window->Show();
1139 1138
1140 // Dispatch a mouse move event into the window. 1139 // Dispatch a mouse move event into the window.
1141 gfx::Point mouse_location(gfx::Point(15, 25)); 1140 gfx::Point mouse_location(gfx::Point(15, 25));
1142 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, mouse_location, 1141 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, mouse_location,
1143 ui::EventTimeForNow(), 0, 0); 1142 ui::EventTimeForNow(), 0, 0);
1144 EXPECT_TRUE(recorder.events().empty()); 1143 EXPECT_TRUE(recorder.events().empty());
1145 DispatchEventUsingWindowDispatcher(&mouse1); 1144 DispatchEventUsingWindowDispatcher(&mouse1);
(...skipping 16 matching lines...) Expand all
1162 1161
1163 // Tests that a synthetic mouse exit is dispatched to the last known cursor 1162 // Tests that a synthetic mouse exit is dispatched to the last known cursor
1164 // location after mouse events are disabled on the cursor client. 1163 // location after mouse events are disabled on the cursor client.
1165 TEST_F(WindowEventDispatcherTest, 1164 TEST_F(WindowEventDispatcherTest,
1166 DispatchSyntheticMouseExitAfterMouseEventsDisabled) { 1165 DispatchSyntheticMouseExitAfterMouseEventsDisabled) {
1167 EventFilterRecorder recorder; 1166 EventFilterRecorder recorder;
1168 root_window()->AddPreTargetHandler(&recorder); 1167 root_window()->AddPreTargetHandler(&recorder);
1169 1168
1170 test::TestWindowDelegate delegate; 1169 test::TestWindowDelegate delegate;
1171 gfx::Point window_origin(7, 18); 1170 gfx::Point window_origin(7, 18);
1172 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1171 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1173 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)), 1172 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)),
1174 root_window())); 1173 root_window()));
1175 window->Show(); 1174 window->Show();
1176 1175
1177 // Dispatch a mouse move event into the window. 1176 // Dispatch a mouse move event into the window.
1178 gfx::Point mouse_location(gfx::Point(15, 25)); 1177 gfx::Point mouse_location(gfx::Point(15, 25));
1179 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, mouse_location, 1178 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, mouse_location,
1180 ui::EventTimeForNow(), 0, 0); 1179 ui::EventTimeForNow(), 0, 0);
1181 EXPECT_TRUE(recorder.events().empty()); 1180 EXPECT_TRUE(recorder.events().empty());
1182 DispatchEventUsingWindowDispatcher(&mouse1); 1181 DispatchEventUsingWindowDispatcher(&mouse1);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 bool delete_during_handle_; 1265 bool delete_during_handle_;
1267 bool got_event_; 1266 bool got_event_;
1268 1267
1269 DISALLOW_COPY_AND_ASSIGN(DeletingWindowDelegate); 1268 DISALLOW_COPY_AND_ASSIGN(DeletingWindowDelegate);
1270 }; 1269 };
1271 1270
1272 TEST_F(WindowEventDispatcherTest, DeleteWindowDuringDispatch) { 1271 TEST_F(WindowEventDispatcherTest, DeleteWindowDuringDispatch) {
1273 // Verifies that we can delete a window during each phase of event handling. 1272 // Verifies that we can delete a window during each phase of event handling.
1274 // Deleting the window should not cause a crash, only prevent further 1273 // Deleting the window should not cause a crash, only prevent further
1275 // processing from occurring. 1274 // processing from occurring.
1276 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); 1275 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
1277 DeletingWindowDelegate d11; 1276 DeletingWindowDelegate d11;
1278 Window* w11 = CreateNormalWindow(11, w1.get(), &d11); 1277 Window* w11 = CreateNormalWindow(11, w1.get(), &d11);
1279 WindowTracker tracker; 1278 WindowTracker tracker;
1280 DeletingEventFilter w1_filter; 1279 DeletingEventFilter w1_filter;
1281 w1->AddPreTargetHandler(&w1_filter); 1280 w1->AddPreTargetHandler(&w1_filter);
1282 client::GetFocusClient(w1.get())->FocusWindow(w11); 1281 client::GetFocusClient(w1.get())->FocusWindow(w11);
1283 1282
1284 ui::test::EventGenerator generator(root_window(), w11); 1283 ui::test::EventGenerator generator(root_window(), w11);
1285 1284
1286 // First up, no one deletes anything. 1285 // First up, no one deletes anything.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 1333
1335 DISALLOW_COPY_AND_ASSIGN(DetachesParentOnTapDelegate); 1334 DISALLOW_COPY_AND_ASSIGN(DetachesParentOnTapDelegate);
1336 }; 1335 };
1337 1336
1338 } // namespace 1337 } // namespace
1339 1338
1340 // Tests that the gesture recognizer is reset for all child windows when a 1339 // Tests that the gesture recognizer is reset for all child windows when a
1341 // window hides. No expectations, just checks that the test does not crash. 1340 // window hides. No expectations, just checks that the test does not crash.
1342 TEST_F(WindowEventDispatcherTest, 1341 TEST_F(WindowEventDispatcherTest,
1343 GestureRecognizerResetsTargetWhenParentHides) { 1342 GestureRecognizerResetsTargetWhenParentHides) {
1344 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); 1343 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
1345 DetachesParentOnTapDelegate delegate; 1344 DetachesParentOnTapDelegate delegate;
1346 scoped_ptr<Window> parent(CreateNormalWindow(22, w1.get(), NULL)); 1345 std::unique_ptr<Window> parent(CreateNormalWindow(22, w1.get(), NULL));
1347 Window* child = CreateNormalWindow(11, parent.get(), &delegate); 1346 Window* child = CreateNormalWindow(11, parent.get(), &delegate);
1348 ui::test::EventGenerator generator(root_window(), child); 1347 ui::test::EventGenerator generator(root_window(), child);
1349 generator.GestureTapAt(gfx::Point(40, 40)); 1348 generator.GestureTapAt(gfx::Point(40, 40));
1350 } 1349 }
1351 1350
1352 namespace { 1351 namespace {
1353 1352
1354 // A window delegate that processes nested gestures on tap. 1353 // A window delegate that processes nested gestures on tap.
1355 class NestedGestureDelegate : public test::TestWindowDelegate { 1354 class NestedGestureDelegate : public test::TestWindowDelegate {
1356 public: 1355 public:
(...skipping 29 matching lines...) Expand all
1386 const gfx::Point tap_location_; 1385 const gfx::Point tap_location_;
1387 int gesture_end_count_; 1386 int gesture_end_count_;
1388 DISALLOW_COPY_AND_ASSIGN(NestedGestureDelegate); 1387 DISALLOW_COPY_AND_ASSIGN(NestedGestureDelegate);
1389 }; 1388 };
1390 1389
1391 } // namespace 1390 } // namespace
1392 1391
1393 // Tests that gesture end is delivered after nested gesture processing. 1392 // Tests that gesture end is delivered after nested gesture processing.
1394 TEST_F(WindowEventDispatcherTest, GestureEndDeliveredAfterNestedGestures) { 1393 TEST_F(WindowEventDispatcherTest, GestureEndDeliveredAfterNestedGestures) {
1395 NestedGestureDelegate d1(NULL, gfx::Point()); 1394 NestedGestureDelegate d1(NULL, gfx::Point());
1396 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &d1)); 1395 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), &d1));
1397 w1->SetBounds(gfx::Rect(0, 0, 100, 100)); 1396 w1->SetBounds(gfx::Rect(0, 0, 100, 100));
1398 1397
1399 ui::test::EventGenerator nested_generator(root_window(), w1.get()); 1398 ui::test::EventGenerator nested_generator(root_window(), w1.get());
1400 NestedGestureDelegate d2(&nested_generator, w1->bounds().CenterPoint()); 1399 NestedGestureDelegate d2(&nested_generator, w1->bounds().CenterPoint());
1401 scoped_ptr<Window> w2(CreateNormalWindow(1, root_window(), &d2)); 1400 std::unique_ptr<Window> w2(CreateNormalWindow(1, root_window(), &d2));
1402 w2->SetBounds(gfx::Rect(100, 0, 100, 100)); 1401 w2->SetBounds(gfx::Rect(100, 0, 100, 100));
1403 1402
1404 // Tap on w2 which triggers nested gestures for w1. 1403 // Tap on w2 which triggers nested gestures for w1.
1405 ui::test::EventGenerator generator(root_window(), w2.get()); 1404 ui::test::EventGenerator generator(root_window(), w2.get());
1406 generator.GestureTapAt(w2->bounds().CenterPoint()); 1405 generator.GestureTapAt(w2->bounds().CenterPoint());
1407 1406
1408 // Both windows should get their gesture end events. 1407 // Both windows should get their gesture end events.
1409 EXPECT_EQ(1, d1.gesture_end_count()); 1408 EXPECT_EQ(1, d1.gesture_end_count());
1410 EXPECT_EQ(1, d2.gesture_end_count()); 1409 EXPECT_EQ(1, d2.gesture_end_count());
1411 } 1410 }
1412 1411
1413 // Tests whether we can repost the Tap down gesture event. 1412 // Tests whether we can repost the Tap down gesture event.
1414 TEST_F(WindowEventDispatcherTest, RepostTapdownGestureTest) { 1413 TEST_F(WindowEventDispatcherTest, RepostTapdownGestureTest) {
1415 EventFilterRecorder recorder; 1414 EventFilterRecorder recorder;
1416 root_window()->AddPreTargetHandler(&recorder); 1415 root_window()->AddPreTargetHandler(&recorder);
1417 1416
1418 test::TestWindowDelegate delegate; 1417 test::TestWindowDelegate delegate;
1419 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1418 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1420 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); 1419 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window()));
1421 1420
1422 ui::GestureEventDetails details(ui::ET_GESTURE_TAP_DOWN); 1421 ui::GestureEventDetails details(ui::ET_GESTURE_TAP_DOWN);
1423 gfx::Point point(10, 10); 1422 gfx::Point point(10, 10);
1424 ui::GestureEvent event(point.x(), 1423 ui::GestureEvent event(point.x(),
1425 point.y(), 1424 point.y(),
1426 0, 1425 0,
1427 ui::EventTimeForNow(), 1426 ui::EventTimeForNow(),
1428 details); 1427 details);
1429 host()->dispatcher()->RepostEvent(&event); 1428 host()->dispatcher()->RepostEvent(&event);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE TOUCH_MOVED " 1499 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE TOUCH_MOVED "
1501 "GESTURE_SCROLL_UPDATE TOUCH_MOVED GESTURE_SCROLL_UPDATE TOUCH_RELEASED " 1500 "GESTURE_SCROLL_UPDATE TOUCH_MOVED GESTURE_SCROLL_UPDATE TOUCH_RELEASED "
1502 "GESTURE_SCROLL_END GESTURE_END"; 1501 "GESTURE_SCROLL_END GESTURE_END";
1503 // We create two windows. 1502 // We create two windows.
1504 // The first window (repost_source) is the one to which the initial tap 1503 // The first window (repost_source) is the one to which the initial tap
1505 // gesture is sent. It reposts this event to the second window 1504 // gesture is sent. It reposts this event to the second window
1506 // (repost_target). 1505 // (repost_target).
1507 // We then generate the scroll sequence for repost_target and look for two 1506 // We then generate the scroll sequence for repost_target and look for two
1508 // ET_GESTURE_TAP_DOWN events in the event list at the end. 1507 // ET_GESTURE_TAP_DOWN events in the event list at the end.
1509 test::TestWindowDelegate delegate; 1508 test::TestWindowDelegate delegate;
1510 scoped_ptr<aura::Window> repost_target(CreateTestWindowWithDelegate( 1509 std::unique_ptr<aura::Window> repost_target(CreateTestWindowWithDelegate(
1511 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); 1510 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window()));
1512 1511
1513 scoped_ptr<aura::Window> repost_source(CreateTestWindowWithDelegate( 1512 std::unique_ptr<aura::Window> repost_source(CreateTestWindowWithDelegate(
1514 &delegate, 1, gfx::Rect(0, 0, 50, 50), root_window())); 1513 &delegate, 1, gfx::Rect(0, 0, 50, 50), root_window()));
1515 1514
1516 RepostGestureEventRecorder repost_event_recorder(repost_source.get(), 1515 RepostGestureEventRecorder repost_event_recorder(repost_source.get(),
1517 repost_target.get()); 1516 repost_target.get());
1518 root_window()->AddPreTargetHandler(&repost_event_recorder); 1517 root_window()->AddPreTargetHandler(&repost_event_recorder);
1519 1518
1520 // Generate a tap down gesture for the repost_source. This will be reposted 1519 // Generate a tap down gesture for the repost_source. This will be reposted
1521 // to repost_target. 1520 // to repost_target.
1522 ui::test::EventGenerator repost_generator(root_window(), repost_source.get()); 1521 ui::test::EventGenerator repost_generator(root_window(), repost_source.get());
1523 repost_generator.GestureTapAt(gfx::Point(40, 40)); 1522 repost_generator.GestureTapAt(gfx::Point(40, 40));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 1574
1576 DISALLOW_COPY_AND_ASSIGN(OnMouseExitDeletingEventFilter); 1575 DISALLOW_COPY_AND_ASSIGN(OnMouseExitDeletingEventFilter);
1577 }; 1576 };
1578 1577
1579 // Tests that RootWindow drops mouse-moved event that is supposed to be sent to 1578 // Tests that RootWindow drops mouse-moved event that is supposed to be sent to
1580 // a child, but the child is destroyed because of the synthesized mouse-exit 1579 // a child, but the child is destroyed because of the synthesized mouse-exit
1581 // event generated on the previous mouse_moved_handler_. 1580 // event generated on the previous mouse_moved_handler_.
1582 TEST_F(WindowEventDispatcherTest, DeleteWindowDuringMouseMovedDispatch) { 1581 TEST_F(WindowEventDispatcherTest, DeleteWindowDuringMouseMovedDispatch) {
1583 // Create window 1 and set its event filter. Window 1 will take ownership of 1582 // Create window 1 and set its event filter. Window 1 will take ownership of
1584 // the event filter. 1583 // the event filter.
1585 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); 1584 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
1586 OnMouseExitDeletingEventFilter<Window> w1_filter; 1585 OnMouseExitDeletingEventFilter<Window> w1_filter;
1587 w1->AddPreTargetHandler(&w1_filter); 1586 w1->AddPreTargetHandler(&w1_filter);
1588 w1->SetBounds(gfx::Rect(20, 20, 60, 60)); 1587 w1->SetBounds(gfx::Rect(20, 20, 60, 60));
1589 EXPECT_EQ(NULL, host()->dispatcher()->mouse_moved_handler()); 1588 EXPECT_EQ(NULL, host()->dispatcher()->mouse_moved_handler());
1590 1589
1591 ui::test::EventGenerator generator(root_window(), w1.get()); 1590 ui::test::EventGenerator generator(root_window(), w1.get());
1592 1591
1593 // Move mouse over window 1 to set it as the |mouse_moved_handler_| for the 1592 // Move mouse over window 1 to set it as the |mouse_moved_handler_| for the
1594 // root window. 1593 // root window.
1595 generator.MoveMouseTo(51, 51); 1594 generator.MoveMouseTo(51, 51);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1690 1689
1691 } // namespace 1690 } // namespace
1692 1691
1693 // Verifies GetRootWindow() from ~Window returns a valid root. 1692 // Verifies GetRootWindow() from ~Window returns a valid root.
1694 TEST_F(WindowEventDispatcherTest, ValidRootDuringDestruction) { 1693 TEST_F(WindowEventDispatcherTest, ValidRootDuringDestruction) {
1695 bool got_destroying = false; 1694 bool got_destroying = false;
1696 bool has_valid_root = false; 1695 bool has_valid_root = false;
1697 ValidRootDuringDestructionWindowObserver observer(&got_destroying, 1696 ValidRootDuringDestructionWindowObserver observer(&got_destroying,
1698 &has_valid_root); 1697 &has_valid_root);
1699 { 1698 {
1700 scoped_ptr<WindowTreeHost> host( 1699 std::unique_ptr<WindowTreeHost> host(
1701 WindowTreeHost::Create(gfx::Rect(0, 0, 100, 100))); 1700 WindowTreeHost::Create(gfx::Rect(0, 0, 100, 100)));
1702 host->InitHost(); 1701 host->InitHost();
1703 // Owned by WindowEventDispatcher. 1702 // Owned by WindowEventDispatcher.
1704 Window* w1 = CreateNormalWindow(1, host->window(), NULL); 1703 Window* w1 = CreateNormalWindow(1, host->window(), NULL);
1705 w1->AddObserver(&observer); 1704 w1->AddObserver(&observer);
1706 } 1705 }
1707 EXPECT_TRUE(got_destroying); 1706 EXPECT_TRUE(got_destroying);
1708 EXPECT_TRUE(has_valid_root); 1707 EXPECT_TRUE(has_valid_root);
1709 } 1708 }
1710 1709
(...skipping 29 matching lines...) Expand all
1740 1739
1741 } // namespace 1740 } // namespace
1742 1741
1743 // Verifies RootWindow doesn't reset |RootWindow::held_repostable_event_| after 1742 // Verifies RootWindow doesn't reset |RootWindow::held_repostable_event_| after
1744 // dispatching. This is done by using DontResetHeldEventWindowDelegate, which 1743 // dispatching. This is done by using DontResetHeldEventWindowDelegate, which
1745 // tracks the number of events with ui::EF_SHIFT_DOWN set (all reposted events 1744 // tracks the number of events with ui::EF_SHIFT_DOWN set (all reposted events
1746 // have EF_SHIFT_DOWN). When the first event is seen RepostEvent() is used to 1745 // have EF_SHIFT_DOWN). When the first event is seen RepostEvent() is used to
1747 // schedule another reposted event. 1746 // schedule another reposted event.
1748 TEST_F(WindowEventDispatcherTest, DontResetHeldEvent) { 1747 TEST_F(WindowEventDispatcherTest, DontResetHeldEvent) {
1749 DontResetHeldEventWindowDelegate delegate(root_window()); 1748 DontResetHeldEventWindowDelegate delegate(root_window());
1750 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); 1749 std::unique_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate));
1751 w1->SetBounds(gfx::Rect(0, 0, 40, 40)); 1750 w1->SetBounds(gfx::Rect(0, 0, 40, 40));
1752 ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), 1751 ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10),
1753 gfx::Point(10, 10), ui::EventTimeForNow(), 1752 gfx::Point(10, 10), ui::EventTimeForNow(),
1754 ui::EF_SHIFT_DOWN, 0); 1753 ui::EF_SHIFT_DOWN, 0);
1755 root_window()->GetHost()->dispatcher()->RepostEvent(&pressed); 1754 root_window()->GetHost()->dispatcher()->RepostEvent(&pressed);
1756 ui::MouseEvent pressed2(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), 1755 ui::MouseEvent pressed2(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10),
1757 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0); 1756 gfx::Point(10, 10), ui::EventTimeForNow(), 0, 0);
1758 // Dispatch an event to flush event scheduled by way of RepostEvent(). 1757 // Dispatch an event to flush event scheduled by way of RepostEvent().
1759 DispatchEventUsingWindowDispatcher(&pressed2); 1758 DispatchEventUsingWindowDispatcher(&pressed2);
1760 // Delegate should have seen reposted event (identified by way of 1759 // Delegate should have seen reposted event (identified by way of
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 RunAllPendingInMessageLoop(); 1817 RunAllPendingInMessageLoop();
1819 EXPECT_TRUE(delegate.got_mouse_event()); 1818 EXPECT_TRUE(delegate.got_mouse_event());
1820 EXPECT_TRUE(delegate.got_destroy()); 1819 EXPECT_TRUE(delegate.got_destroy());
1821 } 1820 }
1822 1821
1823 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveTouches) { 1822 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveTouches) {
1824 EventFilterRecorder recorder; 1823 EventFilterRecorder recorder;
1825 root_window()->AddPreTargetHandler(&recorder); 1824 root_window()->AddPreTargetHandler(&recorder);
1826 1825
1827 test::TestWindowDelegate delegate; 1826 test::TestWindowDelegate delegate;
1828 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1827 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1829 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); 1828 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window()));
1830 1829
1831 gfx::Point position1 = root_window()->bounds().origin(); 1830 gfx::Point position1 = root_window()->bounds().origin();
1832 ui::TouchEvent press( 1831 ui::TouchEvent press(
1833 ui::ET_TOUCH_PRESSED, position1, 0, ui::EventTimeForNow()); 1832 ui::ET_TOUCH_PRESSED, position1, 0, ui::EventTimeForNow());
1834 DispatchEventUsingWindowDispatcher(&press); 1833 DispatchEventUsingWindowDispatcher(&press);
1835 1834
1836 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN", 1835 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN",
1837 EventTypesToString(recorder.GetAndResetEvents())); 1836 EventTypesToString(recorder.GetAndResetEvents()));
1838 1837
1839 window->Hide(); 1838 window->Hide();
1840 1839
1841 EXPECT_EQ(ui::ET_TOUCH_CANCELLED, recorder.events()[0]); 1840 EXPECT_EQ(ui::ET_TOUCH_CANCELLED, recorder.events()[0]);
1842 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_TAP_CANCEL)); 1841 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_TAP_CANCEL));
1843 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_END)); 1842 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_END));
1844 EXPECT_EQ(3U, recorder.events().size()); 1843 EXPECT_EQ(3U, recorder.events().size());
1845 root_window()->RemovePreTargetHandler(&recorder); 1844 root_window()->RemovePreTargetHandler(&recorder);
1846 } 1845 }
1847 1846
1848 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveGestures) { 1847 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveGestures) {
1849 EventFilterRecorder recorder; 1848 EventFilterRecorder recorder;
1850 root_window()->AddPreTargetHandler(&recorder); 1849 root_window()->AddPreTargetHandler(&recorder);
1851 1850
1852 test::TestWindowDelegate delegate; 1851 test::TestWindowDelegate delegate;
1853 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1852 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
1854 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); 1853 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window()));
1855 1854
1856 gfx::Point position1 = root_window()->bounds().origin(); 1855 gfx::Point position1 = root_window()->bounds().origin();
1857 gfx::Point position2 = root_window()->bounds().CenterPoint(); 1856 gfx::Point position2 = root_window()->bounds().CenterPoint();
1858 ui::TouchEvent press( 1857 ui::TouchEvent press(
1859 ui::ET_TOUCH_PRESSED, position1, 0, ui::EventTimeForNow()); 1858 ui::ET_TOUCH_PRESSED, position1, 0, ui::EventTimeForNow());
1860 DispatchEventUsingWindowDispatcher(&press); 1859 DispatchEventUsingWindowDispatcher(&press);
1861 1860
1862 ui::TouchEvent move( 1861 ui::TouchEvent move(
1863 ui::ET_TOUCH_MOVED, position2, 0, ui::EventTimeForNow()); 1862 ui::ET_TOUCH_MOVED, position2, 0, ui::EventTimeForNow());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 1895
1897 root_window()->RemovePreTargetHandler(&recorder); 1896 root_window()->RemovePreTargetHandler(&recorder);
1898 } 1897 }
1899 1898
1900 // Places two windows side by side. Presses down on one window, and starts a 1899 // Places two windows side by side. Presses down on one window, and starts a
1901 // scroll. Sets capture on the other window and ensures that the "ending" events 1900 // scroll. Sets capture on the other window and ensures that the "ending" events
1902 // aren't sent to the window which gained capture. 1901 // aren't sent to the window which gained capture.
1903 TEST_F(WindowEventDispatcherTest, EndingEventDoesntRetarget) { 1902 TEST_F(WindowEventDispatcherTest, EndingEventDoesntRetarget) {
1904 EventFilterRecorder recorder1; 1903 EventFilterRecorder recorder1;
1905 EventFilterRecorder recorder2; 1904 EventFilterRecorder recorder2;
1906 scoped_ptr<Window> window1(CreateNormalWindow(1, root_window(), NULL)); 1905 std::unique_ptr<Window> window1(CreateNormalWindow(1, root_window(), NULL));
1907 window1->SetBounds(gfx::Rect(0, 0, 40, 40)); 1906 window1->SetBounds(gfx::Rect(0, 0, 40, 40));
1908 1907
1909 scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL)); 1908 std::unique_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL));
1910 window2->SetBounds(gfx::Rect(40, 0, 40, 40)); 1909 window2->SetBounds(gfx::Rect(40, 0, 40, 40));
1911 1910
1912 window1->AddPreTargetHandler(&recorder1); 1911 window1->AddPreTargetHandler(&recorder1);
1913 window2->AddPreTargetHandler(&recorder2); 1912 window2->AddPreTargetHandler(&recorder2);
1914 1913
1915 gfx::Point position = window1->bounds().origin(); 1914 gfx::Point position = window1->bounds().origin();
1916 ui::TouchEvent press( 1915 ui::TouchEvent press(
1917 ui::ET_TOUCH_PRESSED, position, 0, ui::EventTimeForNow()); 1916 ui::ET_TOUCH_PRESSED, position, 0, ui::EventTimeForNow());
1918 DispatchEventUsingWindowDispatcher(&press); 1917 DispatchEventUsingWindowDispatcher(&press);
1919 1918
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 void OnCaptureLost() override { capture_window_.reset(); } 1953 void OnCaptureLost() override { capture_window_.reset(); }
1955 1954
1956 void OnWindowDestroyed(Window* window) override { 1955 void OnWindowDestroyed(Window* window) override {
1957 TestWindowDelegate::OnWindowDestroyed(window); 1956 TestWindowDelegate::OnWindowDestroyed(window);
1958 capture_window_.reset(); 1957 capture_window_.reset();
1959 } 1958 }
1960 1959
1961 aura::Window* capture_window() { return capture_window_.get(); } 1960 aura::Window* capture_window() { return capture_window_.get(); }
1962 1961
1963 private: 1962 private:
1964 scoped_ptr<aura::Window> capture_window_; 1963 std::unique_ptr<aura::Window> capture_window_;
1965 1964
1966 DISALLOW_COPY_AND_ASSIGN(CaptureWindowTracker); 1965 DISALLOW_COPY_AND_ASSIGN(CaptureWindowTracker);
1967 }; 1966 };
1968 1967
1969 } 1968 }
1970 1969
1971 // Verifies handling loss of capture by the capture window being hidden. 1970 // Verifies handling loss of capture by the capture window being hidden.
1972 TEST_F(WindowEventDispatcherTest, CaptureWindowHidden) { 1971 TEST_F(WindowEventDispatcherTest, CaptureWindowHidden) {
1973 CaptureWindowTracker capture_window_tracker; 1972 CaptureWindowTracker capture_window_tracker;
1974 capture_window_tracker.CreateCaptureWindow(root_window()); 1973 capture_window_tracker.CreateCaptureWindow(root_window());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2007 ~WindowEventDispatcherTestWithMessageLoop() override {} 2006 ~WindowEventDispatcherTestWithMessageLoop() override {}
2008 2007
2009 void RunTest() { 2008 void RunTest() {
2010 // Reset any event the window may have received when bringing up the window 2009 // Reset any event the window may have received when bringing up the window
2011 // (e.g. mouse-move events if the mouse cursor is over the window). 2010 // (e.g. mouse-move events if the mouse cursor is over the window).
2012 handler_.Reset(); 2011 handler_.Reset();
2013 2012
2014 // Start a nested message-loop, post an event to be dispatched, and then 2013 // Start a nested message-loop, post an event to be dispatched, and then
2015 // terminate the message-loop. When the message-loop unwinds and gets back, 2014 // terminate the message-loop. When the message-loop unwinds and gets back,
2016 // the reposted event should not have fired. 2015 // the reposted event should not have fired.
2017 scoped_ptr<ui::MouseEvent> mouse(new ui::MouseEvent( 2016 std::unique_ptr<ui::MouseEvent> mouse(new ui::MouseEvent(
2018 ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), gfx::Point(10, 10), 2017 ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), gfx::Point(10, 10),
2019 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE)); 2018 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
2020 message_loop()->PostTask( 2019 message_loop()->PostTask(
2021 FROM_HERE, 2020 FROM_HERE,
2022 base::Bind(&WindowEventDispatcherTestWithMessageLoop::RepostEventHelper, 2021 base::Bind(&WindowEventDispatcherTestWithMessageLoop::RepostEventHelper,
2023 host()->dispatcher(), 2022 host()->dispatcher(),
2024 base::Passed(&mouse))); 2023 base::Passed(&mouse)));
2025 message_loop()->PostTask(FROM_HERE, message_loop()->QuitWhenIdleClosure()); 2024 message_loop()->PostTask(FROM_HERE, message_loop()->QuitWhenIdleClosure());
2026 2025
2027 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop()); 2026 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop());
(...skipping 17 matching lines...) Expand all
2045 } 2044 }
2046 2045
2047 void TearDown() override { 2046 void TearDown() override {
2048 window_.reset(); 2047 window_.reset();
2049 WindowEventDispatcherTest::TearDown(); 2048 WindowEventDispatcherTest::TearDown();
2050 } 2049 }
2051 2050
2052 private: 2051 private:
2053 // Used to avoid a copying |event| when binding to a closure. 2052 // Used to avoid a copying |event| when binding to a closure.
2054 static void RepostEventHelper(WindowEventDispatcher* dispatcher, 2053 static void RepostEventHelper(WindowEventDispatcher* dispatcher,
2055 scoped_ptr<ui::MouseEvent> event) { 2054 std::unique_ptr<ui::MouseEvent> event) {
2056 dispatcher->RepostEvent(event.get()); 2055 dispatcher->RepostEvent(event.get());
2057 } 2056 }
2058 2057
2059 scoped_ptr<Window> window_; 2058 std::unique_ptr<Window> window_;
2060 ExitMessageLoopOnMousePress handler_; 2059 ExitMessageLoopOnMousePress handler_;
2061 2060
2062 DISALLOW_COPY_AND_ASSIGN(WindowEventDispatcherTestWithMessageLoop); 2061 DISALLOW_COPY_AND_ASSIGN(WindowEventDispatcherTestWithMessageLoop);
2063 }; 2062 };
2064 2063
2065 TEST_F(WindowEventDispatcherTestWithMessageLoop, EventRepostedInNonNestedLoop) { 2064 TEST_F(WindowEventDispatcherTestWithMessageLoop, EventRepostedInNonNestedLoop) {
2066 CHECK(!message_loop()->is_running()); 2065 CHECK(!message_loop()->is_running());
2067 // Perform the test in a callback, so that it runs after the message-loop 2066 // Perform the test in a callback, so that it runs after the message-loop
2068 // starts. 2067 // starts.
2069 message_loop()->PostTask( 2068 message_loop()->PostTask(
(...skipping 14 matching lines...) Expand all
2084 2083
2085 protected: 2084 protected:
2086 void SetUp() override { 2085 void SetUp() override {
2087 WindowEventDispatcherTest::SetUp(); 2086 WindowEventDispatcherTest::SetUp();
2088 test_screen()->SetDeviceScaleFactor(2.f); 2087 test_screen()->SetDeviceScaleFactor(2.f);
2089 } 2088 }
2090 }; 2089 };
2091 2090
2092 TEST_F(WindowEventDispatcherTestInHighDPI, EventLocationTransform) { 2091 TEST_F(WindowEventDispatcherTestInHighDPI, EventLocationTransform) {
2093 test::TestWindowDelegate delegate; 2092 test::TestWindowDelegate delegate;
2094 scoped_ptr<aura::Window> child(test::CreateTestWindowWithDelegate(&delegate, 2093 std::unique_ptr<aura::Window> child(test::CreateTestWindowWithDelegate(
2095 1234, gfx::Rect(20, 20, 100, 100), root_window())); 2094 &delegate, 1234, gfx::Rect(20, 20, 100, 100), root_window()));
2096 child->Show(); 2095 child->Show();
2097 2096
2098 ui::test::TestEventHandler handler_child; 2097 ui::test::TestEventHandler handler_child;
2099 ui::test::TestEventHandler handler_root; 2098 ui::test::TestEventHandler handler_root;
2100 root_window()->AddPreTargetHandler(&handler_root); 2099 root_window()->AddPreTargetHandler(&handler_root);
2101 child->AddPreTargetHandler(&handler_child); 2100 child->AddPreTargetHandler(&handler_child);
2102 2101
2103 { 2102 {
2104 ui::MouseEvent move(ui::ET_MOUSE_MOVED, gfx::Point(30, 30), 2103 ui::MouseEvent move(ui::ET_MOUSE_MOVED, gfx::Point(30, 30),
2105 gfx::Point(30, 30), ui::EventTimeForNow(), ui::EF_NONE, 2104 gfx::Point(30, 30), ui::EventTimeForNow(), ui::EF_NONE,
(...skipping 17 matching lines...) Expand all
2123 2122
2124 child->RemovePreTargetHandler(&handler_child); 2123 child->RemovePreTargetHandler(&handler_child);
2125 root_window()->RemovePreTargetHandler(&handler_root); 2124 root_window()->RemovePreTargetHandler(&handler_root);
2126 } 2125 }
2127 2126
2128 TEST_F(WindowEventDispatcherTestInHighDPI, TouchMovesHeldOnScroll) { 2127 TEST_F(WindowEventDispatcherTestInHighDPI, TouchMovesHeldOnScroll) {
2129 EventFilterRecorder recorder; 2128 EventFilterRecorder recorder;
2130 root_window()->AddPreTargetHandler(&recorder); 2129 root_window()->AddPreTargetHandler(&recorder);
2131 test::TestWindowDelegate delegate; 2130 test::TestWindowDelegate delegate;
2132 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder); 2131 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder);
2133 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 2132 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
2134 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); 2133 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
2135 window->AddPreTargetHandler(&handler); 2134 window->AddPreTargetHandler(&handler);
2136 2135
2137 ui::test::EventGenerator generator(root_window()); 2136 ui::test::EventGenerator generator(root_window());
2138 generator.GestureScrollSequence( 2137 generator.GestureScrollSequence(
2139 gfx::Point(120, 120), gfx::Point(20, 120), 2138 gfx::Point(120, 120), gfx::Point(20, 120),
2140 base::TimeDelta::FromMilliseconds(100), 25); 2139 base::TimeDelta::FromMilliseconds(100), 25);
2141 2140
2142 // |handler| will have reset |filter| and started holding the touch-move 2141 // |handler| will have reset |filter| and started holding the touch-move
2143 // events when scrolling started. At the end of the scroll (i.e. upon 2142 // events when scrolling started. At the end of the scroll (i.e. upon
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2190 gfx::Point mouse_move_location_; 2189 gfx::Point mouse_move_location_;
2191 2190
2192 DISALLOW_COPY_AND_ASSIGN(TriggerNestedLoopOnRightMousePress); 2191 DISALLOW_COPY_AND_ASSIGN(TriggerNestedLoopOnRightMousePress);
2193 }; 2192 };
2194 2193
2195 // Tests that if dispatching a 'held' event triggers a nested message loop, then 2194 // Tests that if dispatching a 'held' event triggers a nested message loop, then
2196 // the events that are dispatched from the nested message loop are transformed 2195 // the events that are dispatched from the nested message loop are transformed
2197 // correctly. 2196 // correctly.
2198 TEST_F(WindowEventDispatcherTestInHighDPI, 2197 TEST_F(WindowEventDispatcherTestInHighDPI,
2199 EventsTransformedInRepostedEventTriggeredNestedLoop) { 2198 EventsTransformedInRepostedEventTriggeredNestedLoop) {
2200 scoped_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL)); 2199 std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL));
2201 // Make sure the window is visible. 2200 // Make sure the window is visible.
2202 RunAllPendingInMessageLoop(); 2201 RunAllPendingInMessageLoop();
2203 2202
2204 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED, gfx::Point(80, 80), 2203 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED, gfx::Point(80, 80),
2205 gfx::Point(80, 80), ui::EventTimeForNow(), 2204 gfx::Point(80, 80), ui::EventTimeForNow(),
2206 ui::EF_NONE, ui::EF_NONE); 2205 ui::EF_NONE, ui::EF_NONE);
2207 const base::Closure callback_on_right_click = base::Bind( 2206 const base::Closure callback_on_right_click = base::Bind(
2208 base::IgnoreResult(&WindowEventDispatcherTestInHighDPI::DispatchEvent), 2207 base::IgnoreResult(&WindowEventDispatcherTestInHighDPI::DispatchEvent),
2209 base::Unretained(this), base::Unretained(&mouse_move)); 2208 base::Unretained(this), base::Unretained(&mouse_move));
2210 TriggerNestedLoopOnRightMousePress handler(callback_on_right_click); 2209 TriggerNestedLoopOnRightMousePress handler(callback_on_right_click);
2211 window->AddPreTargetHandler(&handler); 2210 window->AddPreTargetHandler(&handler);
2212 2211
2213 scoped_ptr<ui::MouseEvent> mouse( 2212 std::unique_ptr<ui::MouseEvent> mouse(
2214 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10), 2213 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(10, 10),
2215 gfx::Point(10, 10), ui::EventTimeForNow(), 2214 gfx::Point(10, 10), ui::EventTimeForNow(),
2216 ui::EF_RIGHT_MOUSE_BUTTON, ui::EF_RIGHT_MOUSE_BUTTON)); 2215 ui::EF_RIGHT_MOUSE_BUTTON, ui::EF_RIGHT_MOUSE_BUTTON));
2217 host()->dispatcher()->RepostEvent(mouse.get()); 2216 host()->dispatcher()->RepostEvent(mouse.get());
2218 EXPECT_EQ(0, handler.num_mouse_events()); 2217 EXPECT_EQ(0, handler.num_mouse_events());
2219 2218
2220 base::RunLoop run_loop; 2219 base::RunLoop run_loop;
2221 run_loop.RunUntilIdle(); 2220 run_loop.RunUntilIdle();
2222 // The window should receive the mouse-press and the mouse-move events. 2221 // The window should receive the mouse-press and the mouse-move events.
2223 EXPECT_EQ(2, handler.num_mouse_events()); 2222 EXPECT_EQ(2, handler.num_mouse_events());
2224 // The mouse-move event location should be transformed because of the DSF 2223 // The mouse-move event location should be transformed because of the DSF
2225 // before it reaches the window. 2224 // before it reaches the window.
2226 EXPECT_EQ(gfx::Point(40, 40).ToString(), 2225 EXPECT_EQ(gfx::Point(40, 40).ToString(),
2227 handler.mouse_move_location().ToString()); 2226 handler.mouse_move_location().ToString());
2228 EXPECT_EQ(gfx::Point(40, 40).ToString(), 2227 EXPECT_EQ(gfx::Point(40, 40).ToString(),
2229 Env::GetInstance()->last_mouse_location().ToString()); 2228 Env::GetInstance()->last_mouse_location().ToString());
2230 window->RemovePreTargetHandler(&handler); 2229 window->RemovePreTargetHandler(&handler);
2231 } 2230 }
2232 2231
2233 class SelfDestructDelegate : public test::TestWindowDelegate { 2232 class SelfDestructDelegate : public test::TestWindowDelegate {
2234 public: 2233 public:
2235 SelfDestructDelegate() {} 2234 SelfDestructDelegate() {}
2236 ~SelfDestructDelegate() override {} 2235 ~SelfDestructDelegate() override {}
2237 2236
2238 void OnMouseEvent(ui::MouseEvent* event) override { window_.reset(); } 2237 void OnMouseEvent(ui::MouseEvent* event) override { window_.reset(); }
2239 2238
2240 void set_window(scoped_ptr<aura::Window> window) { 2239 void set_window(std::unique_ptr<aura::Window> window) {
2241 window_ = std::move(window); 2240 window_ = std::move(window);
2242 } 2241 }
2243 bool has_window() const { return !!window_.get(); } 2242 bool has_window() const { return !!window_.get(); }
2244 2243
2245 private: 2244 private:
2246 scoped_ptr<aura::Window> window_; 2245 std::unique_ptr<aura::Window> window_;
2247 DISALLOW_COPY_AND_ASSIGN(SelfDestructDelegate); 2246 DISALLOW_COPY_AND_ASSIGN(SelfDestructDelegate);
2248 }; 2247 };
2249 2248
2250 TEST_F(WindowEventDispatcherTest, SynthesizedLocatedEvent) { 2249 TEST_F(WindowEventDispatcherTest, SynthesizedLocatedEvent) {
2251 ui::test::EventGenerator generator(root_window()); 2250 ui::test::EventGenerator generator(root_window());
2252 generator.MoveMouseTo(10, 10); 2251 generator.MoveMouseTo(10, 10);
2253 EXPECT_EQ("10,10", 2252 EXPECT_EQ("10,10",
2254 Env::GetInstance()->last_mouse_location().ToString()); 2253 Env::GetInstance()->last_mouse_location().ToString());
2255 2254
2256 // Synthesized event should not update the mouse location. 2255 // Synthesized event should not update the mouse location.
2257 ui::MouseEvent mouseev(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(), 2256 ui::MouseEvent mouseev(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(),
2258 ui::EventTimeForNow(), ui::EF_IS_SYNTHESIZED, 0); 2257 ui::EventTimeForNow(), ui::EF_IS_SYNTHESIZED, 0);
2259 generator.Dispatch(&mouseev); 2258 generator.Dispatch(&mouseev);
2260 EXPECT_EQ("10,10", 2259 EXPECT_EQ("10,10",
2261 Env::GetInstance()->last_mouse_location().ToString()); 2260 Env::GetInstance()->last_mouse_location().ToString());
2262 2261
2263 generator.MoveMouseTo(0, 0); 2262 generator.MoveMouseTo(0, 0);
2264 EXPECT_EQ("0,0", 2263 EXPECT_EQ("0,0",
2265 Env::GetInstance()->last_mouse_location().ToString()); 2264 Env::GetInstance()->last_mouse_location().ToString());
2266 2265
2267 // Make sure the location gets updated when a syntheiszed enter 2266 // Make sure the location gets updated when a syntheiszed enter
2268 // event destroyed the window. 2267 // event destroyed the window.
2269 SelfDestructDelegate delegate; 2268 SelfDestructDelegate delegate;
2270 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 2269 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
2271 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); 2270 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
2272 delegate.set_window(std::move(window)); 2271 delegate.set_window(std::move(window));
2273 EXPECT_TRUE(delegate.has_window()); 2272 EXPECT_TRUE(delegate.has_window());
2274 2273
2275 generator.MoveMouseTo(100, 100); 2274 generator.MoveMouseTo(100, 100);
2276 EXPECT_FALSE(delegate.has_window()); 2275 EXPECT_FALSE(delegate.has_window());
2277 EXPECT_EQ("100,100", 2276 EXPECT_EQ("100,100",
2278 Env::GetInstance()->last_mouse_location().ToString()); 2277 Env::GetInstance()->last_mouse_location().ToString());
2279 } 2278 }
2280 2279
2281 // Tests that the window which has capture can get destroyed as a result of 2280 // Tests that the window which has capture can get destroyed as a result of
2282 // ui::ET_MOUSE_CAPTURE_CHANGED event dispatched in 2281 // ui::ET_MOUSE_CAPTURE_CHANGED event dispatched in
2283 // WindowEventDispatcher::UpdateCapture without causing a "use after free". 2282 // WindowEventDispatcher::UpdateCapture without causing a "use after free".
2284 TEST_F(WindowEventDispatcherTest, DestroyWindowOnCaptureChanged) { 2283 TEST_F(WindowEventDispatcherTest, DestroyWindowOnCaptureChanged) {
2285 SelfDestructDelegate delegate; 2284 SelfDestructDelegate delegate;
2286 scoped_ptr<aura::Window> window_first(CreateTestWindowWithDelegate( 2285 std::unique_ptr<aura::Window> window_first(CreateTestWindowWithDelegate(
2287 &delegate, 1, gfx::Rect(20, 10, 10, 20), root_window())); 2286 &delegate, 1, gfx::Rect(20, 10, 10, 20), root_window()));
2288 Window* window_first_raw = window_first.get(); 2287 Window* window_first_raw = window_first.get();
2289 window_first->Show(); 2288 window_first->Show();
2290 window_first->SetCapture(); 2289 window_first->SetCapture();
2291 delegate.set_window(std::move(window_first)); 2290 delegate.set_window(std::move(window_first));
2292 EXPECT_TRUE(delegate.has_window()); 2291 EXPECT_TRUE(delegate.has_window());
2293 2292
2294 scoped_ptr<aura::Window> window_second( 2293 std::unique_ptr<aura::Window> window_second(
2295 test::CreateTestWindowWithId(2, root_window())); 2294 test::CreateTestWindowWithId(2, root_window()));
2296 window_second->Show(); 2295 window_second->Show();
2297 2296
2298 client::CaptureDelegate* capture_delegate = host()->dispatcher(); 2297 client::CaptureDelegate* capture_delegate = host()->dispatcher();
2299 capture_delegate->UpdateCapture(window_first_raw, window_second.get()); 2298 capture_delegate->UpdateCapture(window_first_raw, window_second.get());
2300 EXPECT_FALSE(delegate.has_window()); 2299 EXPECT_FALSE(delegate.has_window());
2301 } 2300 }
2302 2301
2303 class StaticFocusClient : public client::FocusClient { 2302 class StaticFocusClient : public client::FocusClient {
2304 public: 2303 public:
(...skipping 11 matching lines...) Expand all
2316 2315
2317 Window* focused_; 2316 Window* focused_;
2318 2317
2319 DISALLOW_COPY_AND_ASSIGN(StaticFocusClient); 2318 DISALLOW_COPY_AND_ASSIGN(StaticFocusClient);
2320 }; 2319 };
2321 2320
2322 // Tests that host-cancel-mode event can be dispatched to a dispatcher safely 2321 // Tests that host-cancel-mode event can be dispatched to a dispatcher safely
2323 // when the focused window does not live in the dispatcher's tree. 2322 // when the focused window does not live in the dispatcher's tree.
2324 TEST_F(WindowEventDispatcherTest, HostCancelModeWithFocusedWindowOutside) { 2323 TEST_F(WindowEventDispatcherTest, HostCancelModeWithFocusedWindowOutside) {
2325 test::TestWindowDelegate delegate; 2324 test::TestWindowDelegate delegate;
2326 scoped_ptr<Window> focused(CreateTestWindowWithDelegate(&delegate, 123, 2325 std::unique_ptr<Window> focused(CreateTestWindowWithDelegate(
2327 gfx::Rect(20, 30, 100, 50), NULL)); 2326 &delegate, 123, gfx::Rect(20, 30, 100, 50), NULL));
2328 StaticFocusClient focus_client(focused.get()); 2327 StaticFocusClient focus_client(focused.get());
2329 client::SetFocusClient(root_window(), &focus_client); 2328 client::SetFocusClient(root_window(), &focus_client);
2330 EXPECT_FALSE(root_window()->Contains(focused.get())); 2329 EXPECT_FALSE(root_window()->Contains(focused.get()));
2331 EXPECT_EQ(focused.get(), 2330 EXPECT_EQ(focused.get(),
2332 client::GetFocusClient(root_window())->GetFocusedWindow()); 2331 client::GetFocusClient(root_window())->GetFocusedWindow());
2333 host()->dispatcher()->DispatchCancelModeEvent(); 2332 host()->dispatcher()->DispatchCancelModeEvent();
2334 EXPECT_EQ(focused.get(), 2333 EXPECT_EQ(focused.get(),
2335 client::GetFocusClient(root_window())->GetFocusedWindow()); 2334 client::GetFocusClient(root_window())->GetFocusedWindow());
2336 } 2335 }
2337 2336
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2388 Window* window_to_move_; 2387 Window* window_to_move_;
2389 Window* root_window_to_move_to_; 2388 Window* root_window_to_move_to_;
2390 2389
2391 DISALLOW_COPY_AND_ASSIGN(MoveWindowHandler); 2390 DISALLOW_COPY_AND_ASSIGN(MoveWindowHandler);
2392 }; 2391 };
2393 2392
2394 // Tests that nested event dispatch works correctly if the target of the older 2393 // Tests that nested event dispatch works correctly if the target of the older
2395 // event being dispatched is moved to a different dispatcher in response to an 2394 // event being dispatched is moved to a different dispatcher in response to an
2396 // event in the inner loop. 2395 // event in the inner loop.
2397 TEST_F(WindowEventDispatcherTest, NestedEventDispatchTargetMoved) { 2396 TEST_F(WindowEventDispatcherTest, NestedEventDispatchTargetMoved) {
2398 scoped_ptr<WindowTreeHost> second_host( 2397 std::unique_ptr<WindowTreeHost> second_host(
2399 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50))); 2398 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50)));
2400 second_host->InitHost(); 2399 second_host->InitHost();
2401 Window* second_root = second_host->window(); 2400 Window* second_root = second_host->window();
2402 2401
2403 // Create two windows parented to |root_window()|. 2402 // Create two windows parented to |root_window()|.
2404 test::TestWindowDelegate delegate; 2403 test::TestWindowDelegate delegate;
2405 scoped_ptr<Window> first(CreateTestWindowWithDelegate(&delegate, 123, 2404 std::unique_ptr<Window> first(CreateTestWindowWithDelegate(
2406 gfx::Rect(20, 10, 10, 20), root_window())); 2405 &delegate, 123, gfx::Rect(20, 10, 10, 20), root_window()));
2407 scoped_ptr<Window> second(CreateTestWindowWithDelegate(&delegate, 234, 2406 std::unique_ptr<Window> second(CreateTestWindowWithDelegate(
2408 gfx::Rect(40, 10, 50, 20), root_window())); 2407 &delegate, 234, gfx::Rect(40, 10, 50, 20), root_window()));
2409 2408
2410 // Setup a handler on |first| so that it dispatches an event to |second| when 2409 // Setup a handler on |first| so that it dispatches an event to |second| when
2411 // |first| receives an event. 2410 // |first| receives an event.
2412 DispatchEventHandler dispatch_event(second.get()); 2411 DispatchEventHandler dispatch_event(second.get());
2413 first->AddPreTargetHandler(&dispatch_event); 2412 first->AddPreTargetHandler(&dispatch_event);
2414 2413
2415 // Setup a handler on |second| so that it moves |first| into |second_root| 2414 // Setup a handler on |second| so that it moves |first| into |second_root|
2416 // when |second| receives an event. 2415 // when |second| receives an event.
2417 MoveWindowHandler move_window(first.get(), second_root); 2416 MoveWindowHandler move_window(first.get(), second_root);
2418 second->AddPreTargetHandler(&move_window); 2417 second->AddPreTargetHandler(&move_window);
(...skipping 27 matching lines...) Expand all
2446 private: 2445 private:
2447 // InputStateLookup: 2446 // InputStateLookup:
2448 bool IsMouseButtonDown() const override { return true; } 2447 bool IsMouseButtonDown() const override { return true; }
2449 2448
2450 DISALLOW_COPY_AND_ASSIGN(AlwaysMouseDownInputStateLookup); 2449 DISALLOW_COPY_AND_ASSIGN(AlwaysMouseDownInputStateLookup);
2451 }; 2450 };
2452 2451
2453 TEST_F(WindowEventDispatcherTest, 2452 TEST_F(WindowEventDispatcherTest,
2454 CursorVisibilityChangedWhileCaptureWindowInAnotherDispatcher) { 2453 CursorVisibilityChangedWhileCaptureWindowInAnotherDispatcher) {
2455 test::EventCountDelegate delegate; 2454 test::EventCountDelegate delegate;
2456 scoped_ptr<Window> window(CreateTestWindowWithDelegate(&delegate, 123, 2455 std::unique_ptr<Window> window(CreateTestWindowWithDelegate(
2457 gfx::Rect(20, 10, 10, 20), root_window())); 2456 &delegate, 123, gfx::Rect(20, 10, 10, 20), root_window()));
2458 window->Show(); 2457 window->Show();
2459 2458
2460 scoped_ptr<WindowTreeHost> second_host( 2459 std::unique_ptr<WindowTreeHost> second_host(
2461 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50))); 2460 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50)));
2462 second_host->InitHost(); 2461 second_host->InitHost();
2463 WindowEventDispatcher* second_dispatcher = second_host->dispatcher(); 2462 WindowEventDispatcher* second_dispatcher = second_host->dispatcher();
2464 2463
2465 // Install an InputStateLookup on the Env that always claims that a 2464 // Install an InputStateLookup on the Env that always claims that a
2466 // mouse-button is down. 2465 // mouse-button is down.
2467 test::EnvTestHelper(Env::GetInstance()).SetInputStateLookup( 2466 test::EnvTestHelper(Env::GetInstance())
2468 scoped_ptr<InputStateLookup>(new AlwaysMouseDownInputStateLookup())); 2467 .SetInputStateLookup(std::unique_ptr<InputStateLookup>(
2468 new AlwaysMouseDownInputStateLookup()));
2469 2469
2470 window->SetCapture(); 2470 window->SetCapture();
2471 2471
2472 // Because the mouse button is down, setting the capture on |window| will set 2472 // Because the mouse button is down, setting the capture on |window| will set
2473 // it as the mouse-move handler for |root_window()|. 2473 // it as the mouse-move handler for |root_window()|.
2474 EXPECT_EQ(window.get(), host()->dispatcher()->mouse_moved_handler()); 2474 EXPECT_EQ(window.get(), host()->dispatcher()->mouse_moved_handler());
2475 2475
2476 // This does not set |window| as the mouse-move handler for the second 2476 // This does not set |window| as the mouse-move handler for the second
2477 // dispatcher. 2477 // dispatcher.
2478 EXPECT_EQ(NULL, second_dispatcher->mouse_moved_handler()); 2478 EXPECT_EQ(NULL, second_dispatcher->mouse_moved_handler());
(...skipping 10 matching lines...) Expand all
2489 2489
2490 // Notify both hosts that the cursor is now hidden. This should send a single 2490 // Notify both hosts that the cursor is now hidden. This should send a single
2491 // mouse-exit event to |window|. 2491 // mouse-exit event to |window|.
2492 host()->OnCursorVisibilityChanged(false); 2492 host()->OnCursorVisibilityChanged(false);
2493 second_host->OnCursorVisibilityChanged(false); 2493 second_host->OnCursorVisibilityChanged(false);
2494 EXPECT_EQ("0 0 1", delegate.GetMouseMotionCountsAndReset()); 2494 EXPECT_EQ("0 0 1", delegate.GetMouseMotionCountsAndReset());
2495 } 2495 }
2496 2496
2497 TEST_F(WindowEventDispatcherTest, 2497 TEST_F(WindowEventDispatcherTest,
2498 RedirectedEventToDifferentDispatcherLocation) { 2498 RedirectedEventToDifferentDispatcherLocation) {
2499 scoped_ptr<WindowTreeHost> second_host( 2499 std::unique_ptr<WindowTreeHost> second_host(
2500 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50))); 2500 WindowTreeHost::Create(gfx::Rect(20, 30, 100, 50)));
2501 second_host->InitHost(); 2501 second_host->InitHost();
2502 client::SetCaptureClient(second_host->window(), 2502 client::SetCaptureClient(second_host->window(),
2503 client::GetCaptureClient(root_window())); 2503 client::GetCaptureClient(root_window()));
2504 2504
2505 test::EventCountDelegate delegate; 2505 test::EventCountDelegate delegate;
2506 scoped_ptr<Window> window_first(CreateTestWindowWithDelegate(&delegate, 123, 2506 std::unique_ptr<Window> window_first(CreateTestWindowWithDelegate(
2507 gfx::Rect(20, 10, 10, 20), root_window())); 2507 &delegate, 123, gfx::Rect(20, 10, 10, 20), root_window()));
2508 window_first->Show(); 2508 window_first->Show();
2509 2509
2510 scoped_ptr<Window> window_second(CreateTestWindowWithDelegate(&delegate, 12, 2510 std::unique_ptr<Window> window_second(CreateTestWindowWithDelegate(
2511 gfx::Rect(10, 10, 20, 30), second_host->window())); 2511 &delegate, 12, gfx::Rect(10, 10, 20, 30), second_host->window()));
2512 window_second->Show(); 2512 window_second->Show();
2513 2513
2514 window_second->SetCapture(); 2514 window_second->SetCapture();
2515 EXPECT_EQ(window_second.get(), 2515 EXPECT_EQ(window_second.get(),
2516 client::GetCaptureWindow(root_window())); 2516 client::GetCaptureWindow(root_window()));
2517 2517
2518 // Send an event to the first host. Make sure it goes to |window_second| in 2518 // Send an event to the first host. Make sure it goes to |window_second| in
2519 // |second_host| instead (since it has capture). 2519 // |second_host| instead (since it has capture).
2520 EventFilterRecorder recorder_first; 2520 EventFilterRecorder recorder_first;
2521 window_first->AddPreTargetHandler(&recorder_first); 2521 window_first->AddPreTargetHandler(&recorder_first);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2561 // co-ordinates in the right co-ordinate space. 2561 // co-ordinates in the right co-ordinate space.
2562 TEST_F(WindowEventDispatcherTest, GestureEventCoordinates) { 2562 TEST_F(WindowEventDispatcherTest, GestureEventCoordinates) {
2563 const float kX = 67.3f; 2563 const float kX = 67.3f;
2564 const float kY = 97.8f; 2564 const float kY = 97.8f;
2565 2565
2566 const int kWindowOffset = 50; 2566 const int kWindowOffset = 50;
2567 EventFilterRecorder recorder; 2567 EventFilterRecorder recorder;
2568 root_window()->AddPreTargetHandler(&recorder); 2568 root_window()->AddPreTargetHandler(&recorder);
2569 AsyncWindowDelegate delegate(host()->dispatcher()); 2569 AsyncWindowDelegate delegate(host()->dispatcher());
2570 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder); 2570 HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder);
2571 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 2571 std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate(
2572 &delegate, 2572 &delegate, 1, gfx::Rect(kWindowOffset, kWindowOffset, 100, 100),
2573 1,
2574 gfx::Rect(kWindowOffset, kWindowOffset, 100, 100),
2575 root_window())); 2573 root_window()));
2576 window->AddPreTargetHandler(&handler); 2574 window->AddPreTargetHandler(&handler);
2577 2575
2578 delegate.set_window(window.get()); 2576 delegate.set_window(window.get());
2579 2577
2580 ui::TouchEvent touch_pressed_event(ui::ET_TOUCH_PRESSED, gfx::Point(), 0, 2578 ui::TouchEvent touch_pressed_event(ui::ET_TOUCH_PRESSED, gfx::Point(), 0,
2581 ui::EventTimeForNow()); 2579 ui::EventTimeForNow());
2582 touch_pressed_event.set_location_f(gfx::PointF(kX, kY)); 2580 touch_pressed_event.set_location_f(gfx::PointF(kX, kY));
2583 touch_pressed_event.set_root_location_f(gfx::PointF(kX, kY)); 2581 touch_pressed_event.set_root_location_f(gfx::PointF(kX, kY));
2584 2582
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2640 root_window()->RemovePreTargetHandler(&recorder); 2638 root_window()->RemovePreTargetHandler(&recorder);
2641 } 2639 }
2642 2640
2643 // OnCursorMovedToRootLocation() is sometimes called instead of 2641 // OnCursorMovedToRootLocation() is sometimes called instead of
2644 // WindowTreeHost::MoveCursorTo() when the cursor did not move but the 2642 // WindowTreeHost::MoveCursorTo() when the cursor did not move but the
2645 // cursor's position in root coordinates has changed (e.g. when the displays's 2643 // cursor's position in root coordinates has changed (e.g. when the displays's
2646 // scale factor changed). Test that hover effects are properly updated. 2644 // scale factor changed). Test that hover effects are properly updated.
2647 TEST_F(WindowEventDispatcherTest, OnCursorMovedToRootLocationUpdatesHover) { 2645 TEST_F(WindowEventDispatcherTest, OnCursorMovedToRootLocationUpdatesHover) {
2648 WindowEventDispatcher* dispatcher = host()->dispatcher(); 2646 WindowEventDispatcher* dispatcher = host()->dispatcher();
2649 2647
2650 scoped_ptr<Window> w(CreateNormalWindow(1, root_window(), nullptr)); 2648 std::unique_ptr<Window> w(CreateNormalWindow(1, root_window(), nullptr));
2651 w->SetBounds(gfx::Rect(20, 20, 20, 20)); 2649 w->SetBounds(gfx::Rect(20, 20, 20, 20));
2652 w->Show(); 2650 w->Show();
2653 2651
2654 // Move the cursor off of |w|. 2652 // Move the cursor off of |w|.
2655 dispatcher->OnCursorMovedToRootLocation(gfx::Point(100, 100)); 2653 dispatcher->OnCursorMovedToRootLocation(gfx::Point(100, 100));
2656 2654
2657 EventFilterRecorder recorder; 2655 EventFilterRecorder recorder;
2658 w->AddPreTargetHandler(&recorder); 2656 w->AddPreTargetHandler(&recorder);
2659 dispatcher->OnCursorMovedToRootLocation(gfx::Point(22, 22)); 2657 dispatcher->OnCursorMovedToRootLocation(gfx::Point(22, 22));
2660 RunAllPendingInMessageLoop(); 2658 RunAllPendingInMessageLoop();
2661 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_MOUSE_ENTERED)); 2659 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_MOUSE_ENTERED));
2662 recorder.Reset(); 2660 recorder.Reset();
2663 2661
2664 // The cursor should not be over |w| after changing the device scale factor to 2662 // The cursor should not be over |w| after changing the device scale factor to
2665 // 2x. A ET_MOUSE_EXITED event should have been sent to |w|. 2663 // 2x. A ET_MOUSE_EXITED event should have been sent to |w|.
2666 test_screen()->SetDeviceScaleFactor(2.f); 2664 test_screen()->SetDeviceScaleFactor(2.f);
2667 dispatcher->OnCursorMovedToRootLocation(gfx::Point(11, 11)); 2665 dispatcher->OnCursorMovedToRootLocation(gfx::Point(11, 11));
2668 RunAllPendingInMessageLoop(); 2666 RunAllPendingInMessageLoop();
2669 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_MOUSE_EXITED)); 2667 EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_MOUSE_EXITED));
2670 2668
2671 w->RemovePreTargetHandler(&recorder); 2669 w->RemovePreTargetHandler(&recorder);
2672 } 2670 }
2673 2671
2674 } // namespace aura 2672 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/window_event_dispatcher.cc ('k') | ui/aura/window_targeter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698