| 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 |