OLD | NEW |
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/root_window.h" | 5 #include "ui/aura/root_window.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 scoped_ptr<aura::Window> window1(CreateTestWindowWithDelegate( | 110 scoped_ptr<aura::Window> window1(CreateTestWindowWithDelegate( |
111 delegate1.get(), -1234, bounds1, root_window())); | 111 delegate1.get(), -1234, bounds1, root_window())); |
112 scoped_ptr<aura::Window> window2(CreateTestWindowWithDelegate( | 112 scoped_ptr<aura::Window> window2(CreateTestWindowWithDelegate( |
113 delegate2.get(), -5678, bounds2, root_window())); | 113 delegate2.get(), -5678, bounds2, root_window())); |
114 | 114 |
115 // Send a mouse event to window1. | 115 // Send a mouse event to window1. |
116 gfx::Point point(101, 201); | 116 gfx::Point point(101, 201); |
117 ui::MouseEvent event1( | 117 ui::MouseEvent event1( |
118 ui::ET_MOUSE_PRESSED, point, point, ui::EF_LEFT_MOUSE_BUTTON, | 118 ui::ET_MOUSE_PRESSED, point, point, ui::EF_LEFT_MOUSE_BUTTON, |
119 ui::EF_LEFT_MOUSE_BUTTON); | 119 ui::EF_LEFT_MOUSE_BUTTON); |
120 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(&event1); | 120 DispatchEventUsingWindowDispatcher(&event1); |
121 | 121 |
122 // Event was tested for non-client area for the target window. | 122 // Event was tested for non-client area for the target window. |
123 EXPECT_EQ(1, delegate1->non_client_count()); | 123 EXPECT_EQ(1, delegate1->non_client_count()); |
124 EXPECT_EQ(0, delegate2->non_client_count()); | 124 EXPECT_EQ(0, delegate2->non_client_count()); |
125 // The non-client component test was in local coordinates. | 125 // The non-client component test was in local coordinates. |
126 EXPECT_EQ(gfx::Point(1, 1), delegate1->non_client_location()); | 126 EXPECT_EQ(gfx::Point(1, 1), delegate1->non_client_location()); |
127 // Mouse event was received by target window. | 127 // Mouse event was received by target window. |
128 EXPECT_EQ(1, delegate1->mouse_event_count()); | 128 EXPECT_EQ(1, delegate1->mouse_event_count()); |
129 EXPECT_EQ(0, delegate2->mouse_event_count()); | 129 EXPECT_EQ(0, delegate2->mouse_event_count()); |
130 // Event was in local coordinates. | 130 // Event was in local coordinates. |
(...skipping 22 matching lines...) Expand all Loading... |
153 gfx::Point location; | 153 gfx::Point location; |
154 scoped_ptr<ui::MouseEvent> event; | 154 scoped_ptr<ui::MouseEvent> event; |
155 | 155 |
156 // Press the left button. | 156 // Press the left button. |
157 event.reset(new ui::MouseEvent( | 157 event.reset(new ui::MouseEvent( |
158 ui::ET_MOUSE_PRESSED, | 158 ui::ET_MOUSE_PRESSED, |
159 location, | 159 location, |
160 location, | 160 location, |
161 ui::EF_LEFT_MOUSE_BUTTON, | 161 ui::EF_LEFT_MOUSE_BUTTON, |
162 ui::EF_LEFT_MOUSE_BUTTON)); | 162 ui::EF_LEFT_MOUSE_BUTTON)); |
163 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(event.get()); | 163 DispatchEventUsingWindowDispatcher(event.get()); |
164 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); | 164 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); |
165 | 165 |
166 // Additionally press the right. | 166 // Additionally press the right. |
167 event.reset(new ui::MouseEvent( | 167 event.reset(new ui::MouseEvent( |
168 ui::ET_MOUSE_PRESSED, | 168 ui::ET_MOUSE_PRESSED, |
169 location, | 169 location, |
170 location, | 170 location, |
171 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON, | 171 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON, |
172 ui::EF_RIGHT_MOUSE_BUTTON)); | 172 ui::EF_RIGHT_MOUSE_BUTTON)); |
173 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(event.get()); | 173 DispatchEventUsingWindowDispatcher(event.get()); |
174 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); | 174 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); |
175 | 175 |
176 // Release the left button. | 176 // Release the left button. |
177 event.reset(new ui::MouseEvent( | 177 event.reset(new ui::MouseEvent( |
178 ui::ET_MOUSE_RELEASED, | 178 ui::ET_MOUSE_RELEASED, |
179 location, | 179 location, |
180 location, | 180 location, |
181 ui::EF_RIGHT_MOUSE_BUTTON, | 181 ui::EF_RIGHT_MOUSE_BUTTON, |
182 ui::EF_LEFT_MOUSE_BUTTON)); | 182 ui::EF_LEFT_MOUSE_BUTTON)); |
183 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(event.get()); | 183 DispatchEventUsingWindowDispatcher(event.get()); |
184 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); | 184 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); |
185 | 185 |
186 // Release the right button. We should ignore the Shift-is-down flag. | 186 // Release the right button. We should ignore the Shift-is-down flag. |
187 event.reset(new ui::MouseEvent( | 187 event.reset(new ui::MouseEvent( |
188 ui::ET_MOUSE_RELEASED, | 188 ui::ET_MOUSE_RELEASED, |
189 location, | 189 location, |
190 location, | 190 location, |
191 ui::EF_SHIFT_DOWN, | 191 ui::EF_SHIFT_DOWN, |
192 ui::EF_RIGHT_MOUSE_BUTTON)); | 192 ui::EF_RIGHT_MOUSE_BUTTON)); |
193 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(event.get()); | 193 DispatchEventUsingWindowDispatcher(event.get()); |
194 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown()); | 194 EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown()); |
195 | 195 |
196 // Press the middle button. | 196 // Press the middle button. |
197 event.reset(new ui::MouseEvent( | 197 event.reset(new ui::MouseEvent( |
198 ui::ET_MOUSE_PRESSED, | 198 ui::ET_MOUSE_PRESSED, |
199 location, | 199 location, |
200 location, | 200 location, |
201 ui::EF_MIDDLE_MOUSE_BUTTON, | 201 ui::EF_MIDDLE_MOUSE_BUTTON, |
202 ui::EF_MIDDLE_MOUSE_BUTTON)); | 202 ui::EF_MIDDLE_MOUSE_BUTTON)); |
203 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(event.get()); | 203 DispatchEventUsingWindowDispatcher(event.get()); |
204 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); | 204 EXPECT_TRUE(Env::GetInstance()->IsMouseButtonDown()); |
205 } | 205 } |
206 | 206 |
207 TEST_F(RootWindowTest, TranslatedEvent) { | 207 TEST_F(RootWindowTest, TranslatedEvent) { |
208 scoped_ptr<Window> w1(test::CreateTestWindowWithDelegate(NULL, 1, | 208 scoped_ptr<Window> w1(test::CreateTestWindowWithDelegate(NULL, 1, |
209 gfx::Rect(50, 50, 100, 100), root_window())); | 209 gfx::Rect(50, 50, 100, 100), root_window())); |
210 | 210 |
211 gfx::Point origin(100, 100); | 211 gfx::Point origin(100, 100); |
212 ui::MouseEvent root(ui::ET_MOUSE_PRESSED, origin, origin, 0, 0); | 212 ui::MouseEvent root(ui::ET_MOUSE_PRESSED, origin, origin, 0, 0); |
213 | 213 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 // Prevent w3 from being deleted by the hierarchy since its delegate is owned | 338 // Prevent w3 from being deleted by the hierarchy since its delegate is owned |
339 // by this scope. | 339 // by this scope. |
340 w3->parent()->RemoveChild(w3.get()); | 340 w3->parent()->RemoveChild(w3.get()); |
341 } | 341 } |
342 | 342 |
343 TEST_F(RootWindowTest, IgnoreUnknownKeys) { | 343 TEST_F(RootWindowTest, IgnoreUnknownKeys) { |
344 test::TestEventHandler* filter = new ConsumeKeyHandler; | 344 test::TestEventHandler* filter = new ConsumeKeyHandler; |
345 root_window()->SetEventFilter(filter); // passes ownership | 345 root_window()->SetEventFilter(filter); // passes ownership |
346 | 346 |
347 ui::KeyEvent unknown_event(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, 0, false); | 347 ui::KeyEvent unknown_event(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, 0, false); |
348 EXPECT_FALSE(dispatcher()->AsWindowTreeHostDelegate()->OnHostKeyEvent( | 348 DispatchEventUsingWindowDispatcher(&unknown_event); |
349 &unknown_event)); | 349 EXPECT_FALSE(unknown_event.handled()); |
350 EXPECT_EQ(0, filter->num_key_events()); | 350 EXPECT_EQ(0, filter->num_key_events()); |
351 | 351 |
352 ui::KeyEvent known_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0, false); | 352 ui::KeyEvent known_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0, false); |
353 EXPECT_TRUE(dispatcher()->AsWindowTreeHostDelegate()->OnHostKeyEvent( | 353 DispatchEventUsingWindowDispatcher(&known_event); |
354 &known_event)); | 354 EXPECT_TRUE(known_event.handled()); |
355 EXPECT_EQ(1, filter->num_key_events()); | 355 EXPECT_EQ(1, filter->num_key_events()); |
356 } | 356 } |
357 | 357 |
358 TEST_F(RootWindowTest, NoDelegateWindowReceivesKeyEvents) { | 358 TEST_F(RootWindowTest, NoDelegateWindowReceivesKeyEvents) { |
359 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); | 359 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL)); |
360 w1->Show(); | 360 w1->Show(); |
361 w1->Focus(); | 361 w1->Focus(); |
362 | 362 |
363 test::TestEventHandler handler; | 363 test::TestEventHandler handler; |
364 w1->AddPreTargetHandler(&handler); | 364 w1->AddPreTargetHandler(&handler); |
365 ui::KeyEvent key_press(ui::ET_KEY_PRESSED, ui::VKEY_A, 0, false); | 365 ui::KeyEvent key_press(ui::ET_KEY_PRESSED, ui::VKEY_A, 0, false); |
366 EXPECT_TRUE(dispatcher()->AsWindowTreeHostDelegate()->OnHostKeyEvent( | 366 DispatchEventUsingWindowDispatcher(&key_press); |
367 &key_press)); | 367 EXPECT_TRUE(key_press.handled()); |
368 EXPECT_EQ(1, handler.num_key_events()); | 368 EXPECT_EQ(1, handler.num_key_events()); |
369 | 369 |
370 w1->RemovePreTargetHandler(&handler); | 370 w1->RemovePreTargetHandler(&handler); |
371 } | 371 } |
372 | 372 |
373 // Tests that touch-events that are beyond the bounds of the root-window do get | 373 // Tests that touch-events that are beyond the bounds of the root-window do get |
374 // propagated to the event filters correctly with the root as the target. | 374 // propagated to the event filters correctly with the root as the target. |
375 TEST_F(RootWindowTest, TouchEventsOutsideBounds) { | 375 TEST_F(RootWindowTest, TouchEventsOutsideBounds) { |
376 test::TestEventHandler* filter = new test::TestEventHandler; | 376 test::TestEventHandler* filter = new test::TestEventHandler; |
377 root_window()->SetEventFilter(filter); // passes ownership | 377 root_window()->SetEventFilter(filter); // passes ownership |
378 | 378 |
379 gfx::Point position = root_window()->bounds().origin(); | 379 gfx::Point position = root_window()->bounds().origin(); |
380 position.Offset(-10, -10); | 380 position.Offset(-10, -10); |
381 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta()); | 381 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta()); |
382 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 382 DispatchEventUsingWindowDispatcher(&press); |
383 EXPECT_EQ(1, filter->num_touch_events()); | 383 EXPECT_EQ(1, filter->num_touch_events()); |
384 | 384 |
385 position = root_window()->bounds().origin(); | 385 position = root_window()->bounds().origin(); |
386 position.Offset(root_window()->bounds().width() + 10, | 386 position.Offset(root_window()->bounds().width() + 10, |
387 root_window()->bounds().height() + 10); | 387 root_window()->bounds().height() + 10); |
388 ui::TouchEvent release(ui::ET_TOUCH_RELEASED, position, 0, base::TimeDelta()); | 388 ui::TouchEvent release(ui::ET_TOUCH_RELEASED, position, 0, base::TimeDelta()); |
389 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&release); | 389 DispatchEventUsingWindowDispatcher(&release); |
390 EXPECT_EQ(2, filter->num_touch_events()); | 390 EXPECT_EQ(2, filter->num_touch_events()); |
391 } | 391 } |
392 | 392 |
393 // Tests that scroll events are dispatched correctly. | 393 // Tests that scroll events are dispatched correctly. |
394 TEST_F(RootWindowTest, ScrollEventDispatch) { | 394 TEST_F(RootWindowTest, ScrollEventDispatch) { |
395 base::TimeDelta now = ui::EventTimeForNow(); | 395 base::TimeDelta now = ui::EventTimeForNow(); |
396 test::TestEventHandler* filter = new test::TestEventHandler; | 396 test::TestEventHandler* filter = new test::TestEventHandler; |
397 root_window()->SetEventFilter(filter); | 397 root_window()->SetEventFilter(filter); |
398 | 398 |
399 test::TestWindowDelegate delegate; | 399 test::TestWindowDelegate delegate; |
400 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); | 400 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); |
401 w1->SetBounds(gfx::Rect(20, 20, 40, 40)); | 401 w1->SetBounds(gfx::Rect(20, 20, 40, 40)); |
402 | 402 |
403 // A scroll event on the root-window itself is dispatched. | 403 // A scroll event on the root-window itself is dispatched. |
404 ui::ScrollEvent scroll1(ui::ET_SCROLL, | 404 ui::ScrollEvent scroll1(ui::ET_SCROLL, |
405 gfx::Point(10, 10), | 405 gfx::Point(10, 10), |
406 now, | 406 now, |
407 0, | 407 0, |
408 0, -10, | 408 0, -10, |
409 0, -10, | 409 0, -10, |
410 2); | 410 2); |
411 dispatcher()->AsWindowTreeHostDelegate()->OnHostScrollEvent(&scroll1); | 411 DispatchEventUsingWindowDispatcher(&scroll1); |
412 EXPECT_EQ(1, filter->num_scroll_events()); | 412 EXPECT_EQ(1, filter->num_scroll_events()); |
413 | 413 |
414 // Scroll event on a window should be dispatched properly. | 414 // Scroll event on a window should be dispatched properly. |
415 ui::ScrollEvent scroll2(ui::ET_SCROLL, | 415 ui::ScrollEvent scroll2(ui::ET_SCROLL, |
416 gfx::Point(25, 30), | 416 gfx::Point(25, 30), |
417 now, | 417 now, |
418 0, | 418 0, |
419 -10, 0, | 419 -10, 0, |
420 -10, 0, | 420 -10, 0, |
421 2); | 421 2); |
422 dispatcher()->AsWindowTreeHostDelegate()->OnHostScrollEvent(&scroll2); | 422 DispatchEventUsingWindowDispatcher(&scroll2); |
423 EXPECT_EQ(2, filter->num_scroll_events()); | 423 EXPECT_EQ(2, filter->num_scroll_events()); |
424 } | 424 } |
425 | 425 |
426 namespace { | 426 namespace { |
427 | 427 |
428 // FilterFilter that tracks the types of events it's seen. | 428 // FilterFilter that tracks the types of events it's seen. |
429 class EventFilterRecorder : public ui::EventHandler { | 429 class EventFilterRecorder : public ui::EventHandler { |
430 public: | 430 public: |
431 typedef std::vector<ui::EventType> Events; | 431 typedef std::vector<ui::EventType> Events; |
432 typedef std::vector<gfx::Point> EventLocations; | 432 typedef std::vector<gfx::Point> EventLocations; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 TEST_F(RootWindowTest, MouseMovesHeld) { | 603 TEST_F(RootWindowTest, MouseMovesHeld) { |
604 EventFilterRecorder* filter = new EventFilterRecorder; | 604 EventFilterRecorder* filter = new EventFilterRecorder; |
605 root_window()->SetEventFilter(filter); // passes ownership | 605 root_window()->SetEventFilter(filter); // passes ownership |
606 | 606 |
607 test::TestWindowDelegate delegate; | 607 test::TestWindowDelegate delegate; |
608 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 608 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
609 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); | 609 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); |
610 | 610 |
611 ui::MouseEvent mouse_move_event(ui::ET_MOUSE_MOVED, gfx::Point(0, 0), | 611 ui::MouseEvent mouse_move_event(ui::ET_MOUSE_MOVED, gfx::Point(0, 0), |
612 gfx::Point(0, 0), 0, 0); | 612 gfx::Point(0, 0), 0, 0); |
613 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 613 DispatchEventUsingWindowDispatcher(&mouse_move_event); |
614 &mouse_move_event); | |
615 // Discard MOUSE_ENTER. | 614 // Discard MOUSE_ENTER. |
616 filter->Reset(); | 615 filter->Reset(); |
617 | 616 |
618 dispatcher()->HoldPointerMoves(); | 617 dispatcher()->HoldPointerMoves(); |
619 | 618 |
620 // Check that we don't immediately dispatch the MOUSE_DRAGGED event. | 619 // Check that we don't immediately dispatch the MOUSE_DRAGGED event. |
621 ui::MouseEvent mouse_dragged_event(ui::ET_MOUSE_DRAGGED, gfx::Point(0, 0), | 620 ui::MouseEvent mouse_dragged_event(ui::ET_MOUSE_DRAGGED, gfx::Point(0, 0), |
622 gfx::Point(0, 0), 0, 0); | 621 gfx::Point(0, 0), 0, 0); |
623 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 622 DispatchEventUsingWindowDispatcher(&mouse_dragged_event); |
624 &mouse_dragged_event); | |
625 EXPECT_TRUE(filter->events().empty()); | 623 EXPECT_TRUE(filter->events().empty()); |
626 | 624 |
627 // Check that we do dispatch the held MOUSE_DRAGGED event before another type | 625 // Check that we do dispatch the held MOUSE_DRAGGED event before another type |
628 // of event. | 626 // of event. |
629 ui::MouseEvent mouse_pressed_event(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), | 627 ui::MouseEvent mouse_pressed_event(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), |
630 gfx::Point(0, 0), 0, 0); | 628 gfx::Point(0, 0), 0, 0); |
631 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 629 DispatchEventUsingWindowDispatcher(&mouse_pressed_event); |
632 &mouse_pressed_event); | |
633 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", | 630 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", |
634 EventTypesToString(filter->events())); | 631 EventTypesToString(filter->events())); |
635 filter->Reset(); | 632 filter->Reset(); |
636 | 633 |
637 // Check that we coalesce held MOUSE_DRAGGED events. | 634 // Check that we coalesce held MOUSE_DRAGGED events. |
638 ui::MouseEvent mouse_dragged_event2(ui::ET_MOUSE_DRAGGED, gfx::Point(1, 1), | 635 ui::MouseEvent mouse_dragged_event2(ui::ET_MOUSE_DRAGGED, gfx::Point(1, 1), |
639 gfx::Point(1, 1), 0, 0); | 636 gfx::Point(1, 1), 0, 0); |
640 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 637 DispatchEventUsingWindowDispatcher(&mouse_dragged_event); |
641 &mouse_dragged_event); | 638 DispatchEventUsingWindowDispatcher(&mouse_dragged_event2); |
642 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | |
643 &mouse_dragged_event2); | |
644 EXPECT_TRUE(filter->events().empty()); | 639 EXPECT_TRUE(filter->events().empty()); |
645 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 640 DispatchEventUsingWindowDispatcher(&mouse_pressed_event); |
646 &mouse_pressed_event); | |
647 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", | 641 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", |
648 EventTypesToString(filter->events())); | 642 EventTypesToString(filter->events())); |
649 filter->Reset(); | 643 filter->Reset(); |
650 | 644 |
651 // Check that on ReleasePointerMoves, held events are not dispatched | 645 // Check that on ReleasePointerMoves, held events are not dispatched |
652 // immediately, but posted instead. | 646 // immediately, but posted instead. |
653 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 647 DispatchEventUsingWindowDispatcher(&mouse_dragged_event); |
654 &mouse_dragged_event); | |
655 dispatcher()->ReleasePointerMoves(); | 648 dispatcher()->ReleasePointerMoves(); |
656 EXPECT_TRUE(filter->events().empty()); | 649 EXPECT_TRUE(filter->events().empty()); |
657 RunAllPendingInMessageLoop(); | 650 RunAllPendingInMessageLoop(); |
658 EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events())); | 651 EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events())); |
659 filter->Reset(); | 652 filter->Reset(); |
660 | 653 |
661 // However if another message comes in before the dispatch of the posted | 654 // However if another message comes in before the dispatch of the posted |
662 // event, check that the posted event is dispatched before this new event. | 655 // event, check that the posted event is dispatched before this new event. |
663 dispatcher()->HoldPointerMoves(); | 656 dispatcher()->HoldPointerMoves(); |
664 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 657 DispatchEventUsingWindowDispatcher(&mouse_dragged_event); |
665 &mouse_dragged_event); | |
666 dispatcher()->ReleasePointerMoves(); | 658 dispatcher()->ReleasePointerMoves(); |
667 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 659 DispatchEventUsingWindowDispatcher(&mouse_pressed_event); |
668 &mouse_pressed_event); | |
669 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", | 660 EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED", |
670 EventTypesToString(filter->events())); | 661 EventTypesToString(filter->events())); |
671 filter->Reset(); | 662 filter->Reset(); |
672 RunAllPendingInMessageLoop(); | 663 RunAllPendingInMessageLoop(); |
673 EXPECT_TRUE(filter->events().empty()); | 664 EXPECT_TRUE(filter->events().empty()); |
674 | 665 |
675 // Check that if the other message is another MOUSE_DRAGGED, we still coalesce | 666 // Check that if the other message is another MOUSE_DRAGGED, we still coalesce |
676 // them. | 667 // them. |
677 dispatcher()->HoldPointerMoves(); | 668 dispatcher()->HoldPointerMoves(); |
678 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 669 DispatchEventUsingWindowDispatcher(&mouse_dragged_event); |
679 &mouse_dragged_event); | |
680 dispatcher()->ReleasePointerMoves(); | 670 dispatcher()->ReleasePointerMoves(); |
681 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent( | 671 DispatchEventUsingWindowDispatcher(&mouse_dragged_event2); |
682 &mouse_dragged_event2); | |
683 EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events())); | 672 EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events())); |
684 filter->Reset(); | 673 filter->Reset(); |
685 RunAllPendingInMessageLoop(); | 674 RunAllPendingInMessageLoop(); |
686 EXPECT_TRUE(filter->events().empty()); | 675 EXPECT_TRUE(filter->events().empty()); |
687 } | 676 } |
688 | 677 |
689 TEST_F(RootWindowTest, TouchMovesHeld) { | 678 TEST_F(RootWindowTest, TouchMovesHeld) { |
690 EventFilterRecorder* filter = new EventFilterRecorder; | 679 EventFilterRecorder* filter = new EventFilterRecorder; |
691 root_window()->SetEventFilter(filter); // passes ownership | 680 root_window()->SetEventFilter(filter); // passes ownership |
692 | 681 |
693 test::TestWindowDelegate delegate; | 682 test::TestWindowDelegate delegate; |
694 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 683 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
695 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); | 684 &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window())); |
696 | 685 |
697 const gfx::Point touch_location(60, 60); | 686 const gfx::Point touch_location(60, 60); |
698 // Starting the touch and throwing out the first few events, since the system | 687 // Starting the touch and throwing out the first few events, since the system |
699 // is going to generate synthetic mouse events that are not relevant to the | 688 // is going to generate synthetic mouse events that are not relevant to the |
700 // test. | 689 // test. |
701 ui::TouchEvent touch_pressed_event(ui::ET_TOUCH_PRESSED, touch_location, | 690 ui::TouchEvent touch_pressed_event(ui::ET_TOUCH_PRESSED, touch_location, |
702 0, base::TimeDelta()); | 691 0, base::TimeDelta()); |
703 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent( | 692 DispatchEventUsingWindowDispatcher(&touch_pressed_event); |
704 &touch_pressed_event); | |
705 filter->WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS); | 693 filter->WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS); |
706 filter->Reset(); | 694 filter->Reset(); |
707 | 695 |
708 dispatcher()->HoldPointerMoves(); | 696 dispatcher()->HoldPointerMoves(); |
709 | 697 |
710 // Check that we don't immediately dispatch the TOUCH_MOVED event. | 698 // Check that we don't immediately dispatch the TOUCH_MOVED event. |
711 ui::TouchEvent touch_moved_event(ui::ET_TOUCH_MOVED, touch_location, | 699 ui::TouchEvent touch_moved_event(ui::ET_TOUCH_MOVED, touch_location, |
712 0, base::TimeDelta()); | 700 0, base::TimeDelta()); |
713 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent( | 701 DispatchEventUsingWindowDispatcher(&touch_moved_event); |
714 &touch_moved_event); | |
715 EXPECT_TRUE(filter->events().empty()); | 702 EXPECT_TRUE(filter->events().empty()); |
716 | 703 |
717 // Check that on ReleasePointerMoves, held events are not dispatched | 704 // Check that on ReleasePointerMoves, held events are not dispatched |
718 // immediately, but posted instead. | 705 // immediately, but posted instead. |
719 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent( | 706 DispatchEventUsingWindowDispatcher(&touch_moved_event); |
720 &touch_moved_event); | |
721 dispatcher()->ReleasePointerMoves(); | 707 dispatcher()->ReleasePointerMoves(); |
722 EXPECT_TRUE(filter->events().empty()); | 708 EXPECT_TRUE(filter->events().empty()); |
723 | 709 |
724 RunAllPendingInMessageLoop(); | 710 RunAllPendingInMessageLoop(); |
725 EXPECT_EQ("TOUCH_MOVED", EventTypesToString(filter->events())); | 711 EXPECT_EQ("TOUCH_MOVED", EventTypesToString(filter->events())); |
726 filter->Reset(); | 712 filter->Reset(); |
727 | 713 |
728 // If another touch event occurs then the held touch should be dispatched | 714 // If another touch event occurs then the held touch should be dispatched |
729 // immediately before it. | 715 // immediately before it. |
730 ui::TouchEvent touch_released_event(ui::ET_TOUCH_RELEASED, touch_location, | 716 ui::TouchEvent touch_released_event(ui::ET_TOUCH_RELEASED, touch_location, |
731 0, base::TimeDelta()); | 717 0, base::TimeDelta()); |
732 filter->Reset(); | 718 filter->Reset(); |
733 dispatcher()->HoldPointerMoves(); | 719 dispatcher()->HoldPointerMoves(); |
734 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent( | 720 DispatchEventUsingWindowDispatcher(&touch_moved_event); |
735 &touch_moved_event); | 721 DispatchEventUsingWindowDispatcher(&touch_released_event); |
736 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent( | |
737 &touch_released_event); | |
738 EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_TAP_CANCEL GESTURE_END", | 722 EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_TAP_CANCEL GESTURE_END", |
739 EventTypesToString(filter->events())); | 723 EventTypesToString(filter->events())); |
740 filter->Reset(); | 724 filter->Reset(); |
741 dispatcher()->ReleasePointerMoves(); | 725 dispatcher()->ReleasePointerMoves(); |
742 RunAllPendingInMessageLoop(); | 726 RunAllPendingInMessageLoop(); |
743 EXPECT_TRUE(filter->events().empty()); | 727 EXPECT_TRUE(filter->events().empty()); |
744 } | 728 } |
745 | 729 |
746 class HoldPointerOnScrollHandler : public test::TestEventHandler { | 730 class HoldPointerOnScrollHandler : public test::TestEventHandler { |
747 public: | 731 public: |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 798 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
815 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window())); | 799 &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window())); |
816 window->Show(); | 800 window->Show(); |
817 window->SetCapture(); | 801 window->SetCapture(); |
818 | 802 |
819 test::TestCursorClient cursor_client(root_window()); | 803 test::TestCursorClient cursor_client(root_window()); |
820 | 804 |
821 // Dispatch a non-synthetic mouse event when mouse events are enabled. | 805 // Dispatch a non-synthetic mouse event when mouse events are enabled. |
822 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), | 806 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), |
823 gfx::Point(10, 10), 0, 0); | 807 gfx::Point(10, 10), 0, 0); |
824 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse1); | 808 DispatchEventUsingWindowDispatcher(&mouse1); |
825 EXPECT_FALSE(filter->events().empty()); | 809 EXPECT_FALSE(filter->events().empty()); |
826 filter->Reset(); | 810 filter->Reset(); |
827 | 811 |
828 // Dispatch a synthetic mouse event when mouse events are enabled. | 812 // Dispatch a synthetic mouse event when mouse events are enabled. |
829 ui::MouseEvent mouse2(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), | 813 ui::MouseEvent mouse2(ui::ET_MOUSE_MOVED, gfx::Point(10, 10), |
830 gfx::Point(10, 10), ui::EF_IS_SYNTHESIZED, 0); | 814 gfx::Point(10, 10), ui::EF_IS_SYNTHESIZED, 0); |
831 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse2); | 815 DispatchEventUsingWindowDispatcher(&mouse2); |
832 EXPECT_FALSE(filter->events().empty()); | 816 EXPECT_FALSE(filter->events().empty()); |
833 filter->Reset(); | 817 filter->Reset(); |
834 | 818 |
835 // Dispatch a synthetic mouse event when mouse events are disabled. | 819 // Dispatch a synthetic mouse event when mouse events are disabled. |
836 cursor_client.DisableMouseEvents(); | 820 cursor_client.DisableMouseEvents(); |
837 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse2); | 821 DispatchEventUsingWindowDispatcher(&mouse2); |
838 EXPECT_TRUE(filter->events().empty()); | 822 EXPECT_TRUE(filter->events().empty()); |
839 } | 823 } |
840 | 824 |
841 // Tests that a mouse exit is dispatched to the last known cursor location | 825 // Tests that a mouse exit is dispatched to the last known cursor location |
842 // when the cursor becomes invisible. | 826 // when the cursor becomes invisible. |
843 TEST_F(RootWindowTest, DispatchMouseExitWhenCursorHidden) { | 827 TEST_F(RootWindowTest, DispatchMouseExitWhenCursorHidden) { |
844 EventFilterRecorder* filter = new EventFilterRecorder; | 828 EventFilterRecorder* filter = new EventFilterRecorder; |
845 root_window()->SetEventFilter(filter); // passes ownership | 829 root_window()->SetEventFilter(filter); // passes ownership |
846 | 830 |
847 test::TestWindowDelegate delegate; | 831 test::TestWindowDelegate delegate; |
848 gfx::Point window_origin(7, 18); | 832 gfx::Point window_origin(7, 18); |
849 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 833 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
850 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)), | 834 &delegate, 1234, gfx::Rect(window_origin, gfx::Size(100, 100)), |
851 root_window())); | 835 root_window())); |
852 window->Show(); | 836 window->Show(); |
853 | 837 |
854 // Dispatch a mouse move event into the window. | 838 // Dispatch a mouse move event into the window. |
855 gfx::Point mouse_location(gfx::Point(15, 25)); | 839 gfx::Point mouse_location(gfx::Point(15, 25)); |
856 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, | 840 ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location, |
857 mouse_location, 0, 0); | 841 mouse_location, 0, 0); |
858 EXPECT_TRUE(filter->events().empty()); | 842 EXPECT_TRUE(filter->events().empty()); |
859 dispatcher()->AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse1); | 843 DispatchEventUsingWindowDispatcher(&mouse1); |
860 EXPECT_FALSE(filter->events().empty()); | 844 EXPECT_FALSE(filter->events().empty()); |
861 filter->Reset(); | 845 filter->Reset(); |
862 | 846 |
863 // Hide the cursor and verify a mouse exit was dispatched. | 847 // Hide the cursor and verify a mouse exit was dispatched. |
864 dispatcher()->OnCursorVisibilityChanged(false); | 848 dispatcher()->OnCursorVisibilityChanged(false); |
865 EXPECT_FALSE(filter->events().empty()); | 849 EXPECT_FALSE(filter->events().empty()); |
866 EXPECT_EQ("MOUSE_EXITED", EventTypesToString(filter->events())); | 850 EXPECT_EQ("MOUSE_EXITED", EventTypesToString(filter->events())); |
867 | 851 |
868 // Verify the mouse exit was dispatched at the correct location | 852 // Verify the mouse exit was dispatched at the correct location |
869 // (in the correct coordinate space). | 853 // (in the correct coordinate space). |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1364 } // namespace | 1348 } // namespace |
1365 | 1349 |
1366 // Verifies RootWindow doesn't reset |RootWindow::held_repostable_event_| after | 1350 // Verifies RootWindow doesn't reset |RootWindow::held_repostable_event_| after |
1367 // dispatching. This is done by using DontResetHeldEventWindowDelegate, which | 1351 // dispatching. This is done by using DontResetHeldEventWindowDelegate, which |
1368 // tracks the number of events with ui::EF_SHIFT_DOWN set (all reposted events | 1352 // tracks the number of events with ui::EF_SHIFT_DOWN set (all reposted events |
1369 // have EF_SHIFT_DOWN). When the first event is seen RepostEvent() is used to | 1353 // have EF_SHIFT_DOWN). When the first event is seen RepostEvent() is used to |
1370 // schedule another reposted event. | 1354 // schedule another reposted event. |
1371 TEST_F(RootWindowTest, DontResetHeldEvent) { | 1355 TEST_F(RootWindowTest, DontResetHeldEvent) { |
1372 DontResetHeldEventWindowDelegate delegate(root_window()); | 1356 DontResetHeldEventWindowDelegate delegate(root_window()); |
1373 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); | 1357 scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate)); |
1374 WindowTreeHostDelegate* root_window_delegate = | |
1375 static_cast<WindowTreeHostDelegate*>(root_window()->GetDispatcher()); | |
1376 w1->SetBounds(gfx::Rect(0, 0, 40, 40)); | 1358 w1->SetBounds(gfx::Rect(0, 0, 40, 40)); |
1377 ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, | 1359 ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, |
1378 gfx::Point(10, 10), gfx::Point(10, 10), | 1360 gfx::Point(10, 10), gfx::Point(10, 10), |
1379 ui::EF_SHIFT_DOWN, 0); | 1361 ui::EF_SHIFT_DOWN, 0); |
1380 root_window()->GetDispatcher()->RepostEvent(pressed); | 1362 root_window()->GetDispatcher()->RepostEvent(pressed); |
1381 ui::MouseEvent pressed2(ui::ET_MOUSE_PRESSED, | 1363 ui::MouseEvent pressed2(ui::ET_MOUSE_PRESSED, |
1382 gfx::Point(10, 10), gfx::Point(10, 10), 0, 0); | 1364 gfx::Point(10, 10), gfx::Point(10, 10), 0, 0); |
1383 // Invoke OnHostMouseEvent() to flush event scheduled by way of RepostEvent(). | 1365 // Dispatch an event to flush event scheduled by way of RepostEvent(). |
1384 root_window_delegate->OnHostMouseEvent(&pressed2); | 1366 DispatchEventUsingWindowDispatcher(&pressed2); |
1385 // Delegate should have seen reposted event (identified by way of | 1367 // Delegate should have seen reposted event (identified by way of |
1386 // EF_SHIFT_DOWN). Invoke OnHostMouseEvent() to flush the second | 1368 // EF_SHIFT_DOWN). Dispatch another event to flush the second |
1387 // RepostedEvent(). | 1369 // RepostedEvent(). |
1388 EXPECT_EQ(1, delegate.mouse_event_count()); | 1370 EXPECT_EQ(1, delegate.mouse_event_count()); |
1389 root_window_delegate->OnHostMouseEvent(&pressed2); | 1371 DispatchEventUsingWindowDispatcher(&pressed2); |
1390 EXPECT_EQ(2, delegate.mouse_event_count()); | 1372 EXPECT_EQ(2, delegate.mouse_event_count()); |
1391 } | 1373 } |
1392 | 1374 |
1393 namespace { | 1375 namespace { |
1394 | 1376 |
1395 // See description above DeleteRootFromHeldMouseEvent for details. | 1377 // See description above DeleteRootFromHeldMouseEvent for details. |
1396 class DeleteRootFromHeldMouseEventDelegate : public test::TestWindowDelegate { | 1378 class DeleteRootFromHeldMouseEventDelegate : public test::TestWindowDelegate { |
1397 public: | 1379 public: |
1398 explicit DeleteRootFromHeldMouseEventDelegate(aura::RootWindow* root) | 1380 explicit DeleteRootFromHeldMouseEventDelegate(aura::RootWindow* root) |
1399 : root_(root), | 1381 : root_(root), |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1457 TEST_F(RootWindowTest, WindowHideCancelsActiveTouches) { | 1439 TEST_F(RootWindowTest, WindowHideCancelsActiveTouches) { |
1458 EventFilterRecorder* filter = new EventFilterRecorder; | 1440 EventFilterRecorder* filter = new EventFilterRecorder; |
1459 root_window()->SetEventFilter(filter); // passes ownership | 1441 root_window()->SetEventFilter(filter); // passes ownership |
1460 | 1442 |
1461 test::TestWindowDelegate delegate; | 1443 test::TestWindowDelegate delegate; |
1462 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 1444 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
1463 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); | 1445 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); |
1464 | 1446 |
1465 gfx::Point position1 = root_window()->bounds().origin(); | 1447 gfx::Point position1 = root_window()->bounds().origin(); |
1466 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position1, 0, base::TimeDelta()); | 1448 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position1, 0, base::TimeDelta()); |
1467 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 1449 DispatchEventUsingWindowDispatcher(&press); |
1468 | 1450 |
1469 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN", | 1451 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN", |
1470 EventTypesToString(filter->GetAndResetEvents())); | 1452 EventTypesToString(filter->GetAndResetEvents())); |
1471 | 1453 |
1472 window->Hide(); | 1454 window->Hide(); |
1473 | 1455 |
1474 EXPECT_EQ("TOUCH_CANCELLED GESTURE_TAP_CANCEL GESTURE_END", | 1456 EXPECT_EQ("TOUCH_CANCELLED GESTURE_TAP_CANCEL GESTURE_END", |
1475 EventTypesToString(filter->events())); | 1457 EventTypesToString(filter->events())); |
1476 } | 1458 } |
1477 | 1459 |
1478 TEST_F(RootWindowTest, WindowHideCancelsActiveGestures) { | 1460 TEST_F(RootWindowTest, WindowHideCancelsActiveGestures) { |
1479 EventFilterRecorder* filter = new EventFilterRecorder; | 1461 EventFilterRecorder* filter = new EventFilterRecorder; |
1480 root_window()->SetEventFilter(filter); // passes ownership | 1462 root_window()->SetEventFilter(filter); // passes ownership |
1481 | 1463 |
1482 test::TestWindowDelegate delegate; | 1464 test::TestWindowDelegate delegate; |
1483 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 1465 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
1484 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); | 1466 &delegate, 1, gfx::Rect(0, 0, 100, 100), root_window())); |
1485 | 1467 |
1486 gfx::Point position1 = root_window()->bounds().origin(); | 1468 gfx::Point position1 = root_window()->bounds().origin(); |
1487 gfx::Point position2 = root_window()->bounds().CenterPoint(); | 1469 gfx::Point position2 = root_window()->bounds().CenterPoint(); |
1488 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position1, 0, base::TimeDelta()); | 1470 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position1, 0, base::TimeDelta()); |
1489 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 1471 DispatchEventUsingWindowDispatcher(&press); |
1490 | 1472 |
1491 ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta()); | 1473 ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta()); |
1492 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move); | 1474 DispatchEventUsingWindowDispatcher(&move); |
1493 | 1475 |
1494 ui::TouchEvent press2(ui::ET_TOUCH_PRESSED, position1, 1, base::TimeDelta()); | 1476 ui::TouchEvent press2(ui::ET_TOUCH_PRESSED, position1, 1, base::TimeDelta()); |
1495 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press2); | 1477 DispatchEventUsingWindowDispatcher(&press2); |
1496 | 1478 |
1497 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED " | 1479 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED " |
1498 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE " | 1480 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE " |
1499 "TOUCH_PRESSED GESTURE_BEGIN GESTURE_PINCH_BEGIN", | 1481 "TOUCH_PRESSED GESTURE_BEGIN GESTURE_PINCH_BEGIN", |
1500 EventTypesToString(filter->GetAndResetEvents())); | 1482 EventTypesToString(filter->GetAndResetEvents())); |
1501 | 1483 |
1502 window->Hide(); | 1484 window->Hide(); |
1503 | 1485 |
1504 EXPECT_EQ("TOUCH_CANCELLED GESTURE_PINCH_END GESTURE_END TOUCH_CANCELLED " | 1486 EXPECT_EQ("TOUCH_CANCELLED GESTURE_PINCH_END GESTURE_END TOUCH_CANCELLED " |
1505 "GESTURE_SCROLL_END GESTURE_END", | 1487 "GESTURE_SCROLL_END GESTURE_END", |
(...skipping 10 matching lines...) Expand all Loading... |
1516 scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL)); | 1498 scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL)); |
1517 window2->SetBounds(gfx::Rect(40, 0, 40, 40)); | 1499 window2->SetBounds(gfx::Rect(40, 0, 40, 40)); |
1518 | 1500 |
1519 EventFilterRecorder* filter1 = new EventFilterRecorder(); | 1501 EventFilterRecorder* filter1 = new EventFilterRecorder(); |
1520 window1->SetEventFilter(filter1); // passes ownership | 1502 window1->SetEventFilter(filter1); // passes ownership |
1521 EventFilterRecorder* filter2 = new EventFilterRecorder(); | 1503 EventFilterRecorder* filter2 = new EventFilterRecorder(); |
1522 window2->SetEventFilter(filter2); // passes ownership | 1504 window2->SetEventFilter(filter2); // passes ownership |
1523 | 1505 |
1524 gfx::Point position = window1->bounds().origin(); | 1506 gfx::Point position = window1->bounds().origin(); |
1525 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta()); | 1507 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta()); |
1526 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 1508 DispatchEventUsingWindowDispatcher(&press); |
1527 | 1509 |
1528 gfx::Point position2 = window1->bounds().CenterPoint(); | 1510 gfx::Point position2 = window1->bounds().CenterPoint(); |
1529 ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta()); | 1511 ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta()); |
1530 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move); | 1512 DispatchEventUsingWindowDispatcher(&move); |
1531 | 1513 |
1532 window2->SetCapture(); | 1514 window2->SetCapture(); |
1533 | 1515 |
1534 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED " | 1516 EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED " |
1535 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE " | 1517 "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE " |
1536 "TOUCH_CANCELLED GESTURE_SCROLL_END GESTURE_END", | 1518 "TOUCH_CANCELLED GESTURE_SCROLL_END GESTURE_END", |
1537 EventTypesToString(filter1->events())); | 1519 EventTypesToString(filter1->events())); |
1538 | 1520 |
1539 EXPECT_TRUE(filter2->events().empty()); | 1521 EXPECT_TRUE(filter2->events().empty()); |
1540 } | 1522 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1639 | 1621 |
1640 test::TestEventHandler handler_child; | 1622 test::TestEventHandler handler_child; |
1641 test::TestEventHandler handler_root; | 1623 test::TestEventHandler handler_root; |
1642 root_window()->AddPreTargetHandler(&handler_root); | 1624 root_window()->AddPreTargetHandler(&handler_root); |
1643 child->AddPreTargetHandler(&handler_child); | 1625 child->AddPreTargetHandler(&handler_child); |
1644 | 1626 |
1645 { | 1627 { |
1646 ui::MouseEvent move(ui::ET_MOUSE_MOVED, | 1628 ui::MouseEvent move(ui::ET_MOUSE_MOVED, |
1647 gfx::Point(30, 30), gfx::Point(30, 30), | 1629 gfx::Point(30, 30), gfx::Point(30, 30), |
1648 ui::EF_NONE, ui::EF_NONE); | 1630 ui::EF_NONE, ui::EF_NONE); |
1649 ui::EventDispatchDetails details = dispatcher()->OnEventFromSource(&move); | 1631 DispatchEventUsingWindowDispatcher(&move); |
1650 ASSERT_FALSE(details.dispatcher_destroyed); | |
1651 EXPECT_EQ(0, handler_child.num_mouse_events()); | 1632 EXPECT_EQ(0, handler_child.num_mouse_events()); |
1652 EXPECT_EQ(1, handler_root.num_mouse_events()); | 1633 EXPECT_EQ(1, handler_root.num_mouse_events()); |
1653 } | 1634 } |
1654 | 1635 |
1655 { | 1636 { |
1656 ui::MouseEvent move(ui::ET_MOUSE_MOVED, | 1637 ui::MouseEvent move(ui::ET_MOUSE_MOVED, |
1657 gfx::Point(50, 50), gfx::Point(50, 50), | 1638 gfx::Point(50, 50), gfx::Point(50, 50), |
1658 ui::EF_NONE, ui::EF_NONE); | 1639 ui::EF_NONE, ui::EF_NONE); |
1659 ui::EventDispatchDetails details = dispatcher()->OnEventFromSource(&move); | 1640 DispatchEventUsingWindowDispatcher(&move); |
1660 ASSERT_FALSE(details.dispatcher_destroyed); | |
1661 // The child receives an ENTER, and a MOVED event. | 1641 // The child receives an ENTER, and a MOVED event. |
1662 EXPECT_EQ(2, handler_child.num_mouse_events()); | 1642 EXPECT_EQ(2, handler_child.num_mouse_events()); |
1663 // The root receives both the ENTER and the MOVED events dispatched to | 1643 // The root receives both the ENTER and the MOVED events dispatched to |
1664 // |child|, as well as an EXIT event. | 1644 // |child|, as well as an EXIT event. |
1665 EXPECT_EQ(3, handler_root.num_mouse_events()); | 1645 EXPECT_EQ(3, handler_root.num_mouse_events()); |
1666 } | 1646 } |
1667 | 1647 |
1668 child->RemovePreTargetHandler(&handler_child); | 1648 child->RemovePreTargetHandler(&handler_child); |
1669 root_window()->RemovePreTargetHandler(&handler_root); | 1649 root_window()->RemovePreTargetHandler(&handler_root); |
1670 } | 1650 } |
(...skipping 21 matching lines...) Expand all Loading... |
1692 EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END", | 1672 EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END", |
1693 EventTypesToString(events)); | 1673 EventTypesToString(events)); |
1694 ASSERT_EQ(2u, filter->touch_locations().size()); | 1674 ASSERT_EQ(2u, filter->touch_locations().size()); |
1695 EXPECT_EQ(gfx::Point(-40, 10).ToString(), | 1675 EXPECT_EQ(gfx::Point(-40, 10).ToString(), |
1696 filter->touch_locations()[0].ToString()); | 1676 filter->touch_locations()[0].ToString()); |
1697 EXPECT_EQ(gfx::Point(-40, 10).ToString(), | 1677 EXPECT_EQ(gfx::Point(-40, 10).ToString(), |
1698 filter->touch_locations()[1].ToString()); | 1678 filter->touch_locations()[1].ToString()); |
1699 } | 1679 } |
1700 | 1680 |
1701 } // namespace aura | 1681 } // namespace aura |
OLD | NEW |