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/events/event_dispatcher.h" | 5 #include "ui/events/event_dispatcher.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "ui/events/event.h" | 8 #include "ui/events/event.h" |
9 #include "ui/events/event_dispatcher.h" | 9 #include "ui/events/event_dispatcher.h" |
10 #include "ui/events/event_target.h" | 10 #include "ui/events/event_target.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 | 31 |
32 const std::vector<int>& handler_list() const { return handler_list_; } | 32 const std::vector<int>& handler_list() const { return handler_list_; } |
33 | 33 |
34 void Reset() { | 34 void Reset() { |
35 handler_list_.clear(); | 35 handler_list_.clear(); |
36 valid_ = true; | 36 valid_ = true; |
37 } | 37 } |
38 | 38 |
39 private: | 39 private: |
40 // Overridden from EventTarget: | 40 // Overridden from EventTarget: |
41 bool CanAcceptEvent(const ui::Event& event) override { | 41 bool CanAcceptEvent(const ui::Event& event) override { return true; } |
42 return true; | 42 |
| 43 EventTarget* GetParentTarget() override { return parent_; } |
| 44 |
| 45 scoped_ptr<EventTargetIterator> GetChildIterator() const override { |
| 46 return nullptr; |
43 } | 47 } |
44 | 48 |
45 EventTarget* GetParentTarget() override { | 49 EventTargeter* GetEventTargeter() override { return NULL; } |
46 return parent_; | |
47 } | |
48 | |
49 scoped_ptr<EventTargetIterator> GetChildIterator() override { | |
50 return scoped_ptr<EventTargetIterator>(); | |
51 } | |
52 | |
53 EventTargeter* GetEventTargeter() override { | |
54 return NULL; | |
55 } | |
56 | 50 |
57 TestTarget* parent_; | 51 TestTarget* parent_; |
58 std::vector<int> handler_list_; | 52 std::vector<int> handler_list_; |
59 bool valid_; | 53 bool valid_; |
60 | 54 |
61 DISALLOW_COPY_AND_ASSIGN(TestTarget); | 55 DISALLOW_COPY_AND_ASSIGN(TestTarget); |
62 }; | 56 }; |
63 | 57 |
64 class TestEventHandler : public EventHandler { | 58 class TestEventHandler : public EventHandler { |
65 public: | 59 public: |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 // Destroys a second event handler when this handler gets an event. | 164 // Destroys a second event handler when this handler gets an event. |
171 // Optionally also destroys the dispatcher. | 165 // Optionally also destroys the dispatcher. |
172 class EventHandlerDestroyer : public TestEventHandler { | 166 class EventHandlerDestroyer : public TestEventHandler { |
173 public: | 167 public: |
174 EventHandlerDestroyer(int id, EventHandler* destroy) | 168 EventHandlerDestroyer(int id, EventHandler* destroy) |
175 : TestEventHandler(id), | 169 : TestEventHandler(id), |
176 to_destroy_(destroy), | 170 to_destroy_(destroy), |
177 dispatcher_delegate_(NULL) { | 171 dispatcher_delegate_(NULL) { |
178 } | 172 } |
179 | 173 |
180 ~EventHandlerDestroyer() override { | 174 ~EventHandlerDestroyer() override { CHECK(!to_destroy_); } |
181 CHECK(!to_destroy_); | |
182 } | |
183 | 175 |
184 void set_dispatcher_delegate(EventDispatcherDelegate* dispatcher_delegate) { | 176 void set_dispatcher_delegate(EventDispatcherDelegate* dispatcher_delegate) { |
185 dispatcher_delegate_ = dispatcher_delegate; | 177 dispatcher_delegate_ = dispatcher_delegate; |
186 } | 178 } |
187 | 179 |
188 private: | 180 private: |
189 void ReceivedEvent(Event* event) override { | 181 void ReceivedEvent(Event* event) override { |
190 TestEventHandler::ReceivedEvent(event); | 182 TestEventHandler::ReceivedEvent(event); |
191 delete to_destroy_; | 183 delete to_destroy_; |
192 to_destroy_ = NULL; | 184 to_destroy_ = NULL; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 child.AddPostTargetHandler(&h6); | 240 child.AddPostTargetHandler(&h6); |
249 | 241 |
250 parent.AddPostTargetHandler(&h7); | 242 parent.AddPostTargetHandler(&h7); |
251 parent.AddPostTargetHandler(&h8); | 243 parent.AddPostTargetHandler(&h8); |
252 | 244 |
253 h5.set_expect_post_target(true); | 245 h5.set_expect_post_target(true); |
254 h6.set_expect_post_target(true); | 246 h6.set_expect_post_target(true); |
255 h7.set_expect_post_target(true); | 247 h7.set_expect_post_target(true); |
256 h8.set_expect_post_target(true); | 248 h8.set_expect_post_target(true); |
257 | 249 |
258 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), | 250 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
259 gfx::Point(3, 4), 0, 0); | 251 ui::EventTimeForNow(), 0, 0); |
260 Event::DispatcherApi event_mod(&mouse); | 252 Event::DispatcherApi event_mod(&mouse); |
261 dispatcher.ProcessEvent(&child, &mouse); | 253 dispatcher.ProcessEvent(&child, &mouse); |
262 EXPECT_FALSE(mouse.stopped_propagation()); | 254 EXPECT_FALSE(mouse.stopped_propagation()); |
263 EXPECT_FALSE(mouse.handled()); | 255 EXPECT_FALSE(mouse.handled()); |
264 | 256 |
265 { | 257 { |
266 int expected[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; | 258 int expected[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; |
267 EXPECT_EQ( | 259 EXPECT_EQ( |
268 std::vector<int>(expected, expected + sizeof(expected) / sizeof(int)), | 260 std::vector<int>(expected, expected + sizeof(expected) / sizeof(int)), |
269 child.handler_list()); | 261 child.handler_list()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 TestEventDispatcher dispatcher; | 314 TestEventDispatcher dispatcher; |
323 TestTarget target; | 315 TestTarget target; |
324 | 316 |
325 TestEventHandler handler(11); | 317 TestEventHandler handler(11); |
326 | 318 |
327 target.AddPreTargetHandler(&handler); | 319 target.AddPreTargetHandler(&handler); |
328 target.AddPostTargetHandler(&handler); | 320 target.AddPostTargetHandler(&handler); |
329 handler.set_expect_pre_target(true); | 321 handler.set_expect_pre_target(true); |
330 handler.set_expect_post_target(true); | 322 handler.set_expect_post_target(true); |
331 | 323 |
332 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), | 324 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
333 gfx::Point(3, 4), 0, 0); | 325 ui::EventTimeForNow(), 0, 0); |
334 Event::DispatcherApi event_mod(&mouse); | 326 Event::DispatcherApi event_mod(&mouse); |
335 dispatcher.ProcessEvent(&target, &mouse); | 327 dispatcher.ProcessEvent(&target, &mouse); |
336 EXPECT_EQ(ER_UNHANDLED, mouse.result()); | 328 EXPECT_EQ(ER_UNHANDLED, mouse.result()); |
337 | 329 |
338 int handlers[] = { 11, 11 }; | 330 int handlers[] = { 11, 11 }; |
339 EXPECT_EQ( | 331 EXPECT_EQ( |
340 std::vector<int>(handlers, handlers + sizeof(handlers) / sizeof(int)), | 332 std::vector<int>(handlers, handlers + sizeof(handlers) / sizeof(int)), |
341 target.handler_list()); | 333 target.handler_list()); |
342 } | 334 } |
343 | 335 |
(...skipping 10 matching lines...) Expand all Loading... |
354 target.AddPreTargetHandler(&h1); | 346 target.AddPreTargetHandler(&h1); |
355 target.AddPreTargetHandler(&handler); | 347 target.AddPreTargetHandler(&handler); |
356 target.AddPreTargetHandler(&h2); | 348 target.AddPreTargetHandler(&h2); |
357 | 349 |
358 h1.set_expect_pre_target(true); | 350 h1.set_expect_pre_target(true); |
359 handler.set_expect_pre_target(true); | 351 handler.set_expect_pre_target(true); |
360 // |h2| should not receive any events at all since |handler| will have | 352 // |h2| should not receive any events at all since |handler| will have |
361 // destroyed the dispatcher. | 353 // destroyed the dispatcher. |
362 h2.set_expect_pre_target(false); | 354 h2.set_expect_pre_target(false); |
363 | 355 |
364 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), | 356 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
365 gfx::Point(3, 4), 0, 0); | 357 ui::EventTimeForNow(), 0, 0); |
366 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); | 358 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); |
367 EXPECT_TRUE(details.dispatcher_destroyed); | 359 EXPECT_TRUE(details.dispatcher_destroyed); |
368 EXPECT_EQ(ER_CONSUMED, mouse.result()); | 360 EXPECT_EQ(ER_CONSUMED, mouse.result()); |
369 EXPECT_EQ(2U, target.handler_list().size()); | 361 EXPECT_EQ(2U, target.handler_list().size()); |
370 EXPECT_EQ(1, target.handler_list()[0]); | 362 EXPECT_EQ(1, target.handler_list()[0]); |
371 EXPECT_EQ(5, target.handler_list()[1]); | 363 EXPECT_EQ(5, target.handler_list()[1]); |
372 } | 364 } |
373 | 365 |
374 // Test for non-cancelable event. | 366 // Test for non-cancelable event. |
375 { | 367 { |
(...skipping 30 matching lines...) Expand all Loading... |
406 target.AddPostTargetHandler(&h1); | 398 target.AddPostTargetHandler(&h1); |
407 target.AddPostTargetHandler(&handler); | 399 target.AddPostTargetHandler(&handler); |
408 target.AddPostTargetHandler(&h2); | 400 target.AddPostTargetHandler(&h2); |
409 | 401 |
410 h1.set_expect_post_target(true); | 402 h1.set_expect_post_target(true); |
411 handler.set_expect_post_target(true); | 403 handler.set_expect_post_target(true); |
412 // |h2| should not receive any events at all since |handler| will have | 404 // |h2| should not receive any events at all since |handler| will have |
413 // destroyed the dispatcher. | 405 // destroyed the dispatcher. |
414 h2.set_expect_post_target(false); | 406 h2.set_expect_post_target(false); |
415 | 407 |
416 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), | 408 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
417 gfx::Point(3, 4), 0, 0); | 409 ui::EventTimeForNow(), 0, 0); |
418 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); | 410 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); |
419 EXPECT_TRUE(details.dispatcher_destroyed); | 411 EXPECT_TRUE(details.dispatcher_destroyed); |
420 EXPECT_EQ(ER_CONSUMED, mouse.result()); | 412 EXPECT_EQ(ER_CONSUMED, mouse.result()); |
421 EXPECT_EQ(2U, target.handler_list().size()); | 413 EXPECT_EQ(2U, target.handler_list().size()); |
422 EXPECT_EQ(1, target.handler_list()[0]); | 414 EXPECT_EQ(1, target.handler_list()[0]); |
423 EXPECT_EQ(5, target.handler_list()[1]); | 415 EXPECT_EQ(5, target.handler_list()[1]); |
424 } | 416 } |
425 | 417 |
426 // Test for non-cancelable event. | 418 // Test for non-cancelable event. |
427 { | 419 { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 | 452 |
461 target.AddPreTargetHandler(&h1); | 453 target.AddPreTargetHandler(&h1); |
462 target.AddPreTargetHandler(&invalidate_handler); | 454 target.AddPreTargetHandler(&invalidate_handler); |
463 target.AddPreTargetHandler(&h3); | 455 target.AddPreTargetHandler(&h3); |
464 | 456 |
465 h1.set_expect_pre_target(true); | 457 h1.set_expect_pre_target(true); |
466 invalidate_handler.set_expect_pre_target(true); | 458 invalidate_handler.set_expect_pre_target(true); |
467 // |h3| should not receive events as the target will be invalidated. | 459 // |h3| should not receive events as the target will be invalidated. |
468 h3.set_expect_pre_target(false); | 460 h3.set_expect_pre_target(false); |
469 | 461 |
470 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), 0, | 462 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
471 0); | 463 ui::EventTimeForNow(), 0, 0); |
472 EventDispatchDetails details = dispatcher.ProcessEvent(&target, &mouse); | 464 EventDispatchDetails details = dispatcher.ProcessEvent(&target, &mouse); |
473 EXPECT_FALSE(details.dispatcher_destroyed); | 465 EXPECT_FALSE(details.dispatcher_destroyed); |
474 EXPECT_TRUE(details.target_destroyed); | 466 EXPECT_TRUE(details.target_destroyed); |
475 EXPECT_FALSE(target.valid()); | 467 EXPECT_FALSE(target.valid()); |
476 EXPECT_TRUE(mouse.stopped_propagation()); | 468 EXPECT_TRUE(mouse.stopped_propagation()); |
477 EXPECT_EQ(2U, target.handler_list().size()); | 469 EXPECT_EQ(2U, target.handler_list().size()); |
478 EXPECT_EQ(1, target.handler_list()[0]); | 470 EXPECT_EQ(1, target.handler_list()[0]); |
479 EXPECT_EQ(2, target.handler_list()[1]); | 471 EXPECT_EQ(2, target.handler_list()[1]); |
480 | 472 |
481 // Test for non-cancelable event. | 473 // Test for non-cancelable event. |
(...skipping 21 matching lines...) Expand all Loading... |
503 target.AddPreTargetHandler(&h1); | 495 target.AddPreTargetHandler(&h1); |
504 target.AddPreTargetHandler(&handle_destroyer); | 496 target.AddPreTargetHandler(&handle_destroyer); |
505 target.AddPreTargetHandler(h3); | 497 target.AddPreTargetHandler(h3); |
506 | 498 |
507 h1.set_expect_pre_target(true); | 499 h1.set_expect_pre_target(true); |
508 handle_destroyer.set_expect_pre_target(true); | 500 handle_destroyer.set_expect_pre_target(true); |
509 // |h3| should not receive events since |handle_destroyer| will have | 501 // |h3| should not receive events since |handle_destroyer| will have |
510 // destroyed it. | 502 // destroyed it. |
511 h3->set_expect_pre_target(false); | 503 h3->set_expect_pre_target(false); |
512 | 504 |
513 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), 0, | 505 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
514 0); | 506 ui::EventTimeForNow(), 0, 0); |
515 EventDispatchDetails details = dispatcher.ProcessEvent(&target, &mouse); | 507 EventDispatchDetails details = dispatcher.ProcessEvent(&target, &mouse); |
516 EXPECT_FALSE(details.dispatcher_destroyed); | 508 EXPECT_FALSE(details.dispatcher_destroyed); |
517 EXPECT_FALSE(details.target_destroyed); | 509 EXPECT_FALSE(details.target_destroyed); |
518 EXPECT_FALSE(mouse.stopped_propagation()); | 510 EXPECT_FALSE(mouse.stopped_propagation()); |
519 EXPECT_EQ(2U, target.handler_list().size()); | 511 EXPECT_EQ(2U, target.handler_list().size()); |
520 EXPECT_EQ(1, target.handler_list()[0]); | 512 EXPECT_EQ(1, target.handler_list()[0]); |
521 EXPECT_EQ(2, target.handler_list()[1]); | 513 EXPECT_EQ(2, target.handler_list()[1]); |
522 } | 514 } |
523 | 515 |
524 // Test for non-cancelable events. | 516 // Test for non-cancelable events. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 target.AddPreTargetHandler(&destroyer); | 553 target.AddPreTargetHandler(&destroyer); |
562 target.AddPreTargetHandler(h3); | 554 target.AddPreTargetHandler(h3); |
563 | 555 |
564 h1.set_expect_pre_target(true); | 556 h1.set_expect_pre_target(true); |
565 destroyer.set_expect_pre_target(true); | 557 destroyer.set_expect_pre_target(true); |
566 destroyer.set_dispatcher_delegate(dispatcher); | 558 destroyer.set_dispatcher_delegate(dispatcher); |
567 // |h3| should not receive events since |destroyer| will have destroyed | 559 // |h3| should not receive events since |destroyer| will have destroyed |
568 // it. | 560 // it. |
569 h3->set_expect_pre_target(false); | 561 h3->set_expect_pre_target(false); |
570 | 562 |
571 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), 0, | 563 MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4), gfx::Point(3, 4), |
572 0); | 564 ui::EventTimeForNow(), 0, 0); |
573 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); | 565 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &mouse); |
574 EXPECT_TRUE(details.dispatcher_destroyed); | 566 EXPECT_TRUE(details.dispatcher_destroyed); |
575 EXPECT_TRUE(mouse.stopped_propagation()); | 567 EXPECT_TRUE(mouse.stopped_propagation()); |
576 EXPECT_EQ(2U, target.handler_list().size()); | 568 EXPECT_EQ(2U, target.handler_list().size()); |
577 EXPECT_EQ(1, target.handler_list()[0]); | 569 EXPECT_EQ(1, target.handler_list()[0]); |
578 EXPECT_EQ(2, target.handler_list()[1]); | 570 EXPECT_EQ(2, target.handler_list()[1]); |
579 } | 571 } |
580 | 572 |
581 // Test for non-cancelable events. | 573 // Test for non-cancelable events. |
582 { | 574 { |
(...skipping 17 matching lines...) Expand all Loading... |
600 NonCancelableEvent event; | 592 NonCancelableEvent event; |
601 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &event); | 593 EventDispatchDetails details = dispatcher->ProcessEvent(&target, &event); |
602 EXPECT_TRUE(details.dispatcher_destroyed); | 594 EXPECT_TRUE(details.dispatcher_destroyed); |
603 EXPECT_EQ(2U, target.handler_list().size()); | 595 EXPECT_EQ(2U, target.handler_list().size()); |
604 EXPECT_EQ(1, target.handler_list()[0]); | 596 EXPECT_EQ(1, target.handler_list()[0]); |
605 EXPECT_EQ(2, target.handler_list()[1]); | 597 EXPECT_EQ(2, target.handler_list()[1]); |
606 } | 598 } |
607 } | 599 } |
608 | 600 |
609 } // namespace ui | 601 } // namespace ui |
OLD | NEW |