OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/platform/platform_event_source.h" | 5 #include "ui/events/platform/platform_event_source.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
9 #include "base/memory/scoped_vector.h" | 11 #include "base/memory/scoped_vector.h" |
10 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
11 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "ui/events/platform/platform_event_dispatcher.h" | 15 #include "ui/events/platform/platform_event_dispatcher.h" |
14 #include "ui/events/platform/platform_event_observer.h" | 16 #include "ui/events/platform/platform_event_observer.h" |
15 #include "ui/events/platform/scoped_event_dispatcher.h" | 17 #include "ui/events/platform/scoped_event_dispatcher.h" |
16 | 18 |
17 namespace ui { | 19 namespace ui { |
18 | 20 |
19 namespace { | 21 namespace { |
20 | 22 |
21 scoped_ptr<PlatformEvent> CreatePlatformEvent() { | 23 scoped_ptr<PlatformEvent> CreatePlatformEvent() { |
22 scoped_ptr<PlatformEvent> event(new PlatformEvent()); | 24 scoped_ptr<PlatformEvent> event(new PlatformEvent()); |
23 memset(event.get(), 0, sizeof(PlatformEvent)); | 25 memset(event.get(), 0, sizeof(PlatformEvent)); |
24 return event.Pass(); | 26 return event; |
25 } | 27 } |
26 | 28 |
27 template <typename T> | 29 template <typename T> |
28 void DestroyScopedPtr(scoped_ptr<T> object) {} | 30 void DestroyScopedPtr(scoped_ptr<T> object) {} |
29 | 31 |
30 void RemoveDispatcher(PlatformEventDispatcher* dispatcher) { | 32 void RemoveDispatcher(PlatformEventDispatcher* dispatcher) { |
31 PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(dispatcher); | 33 PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(dispatcher); |
32 } | 34 } |
33 | 35 |
34 void RemoveDispatchers(PlatformEventDispatcher* first, | 36 void RemoveDispatchers(PlatformEventDispatcher* first, |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 | 559 |
558 // This dispatcher destroys the handle to the ScopedEventDispatcher when | 560 // This dispatcher destroys the handle to the ScopedEventDispatcher when |
559 // dispatching an event. | 561 // dispatching an event. |
560 class DestroyScopedHandleDispatcher : public TestPlatformEventDispatcher { | 562 class DestroyScopedHandleDispatcher : public TestPlatformEventDispatcher { |
561 public: | 563 public: |
562 DestroyScopedHandleDispatcher(int id, std::vector<int>* list) | 564 DestroyScopedHandleDispatcher(int id, std::vector<int>* list) |
563 : TestPlatformEventDispatcher(id, list) {} | 565 : TestPlatformEventDispatcher(id, list) {} |
564 ~DestroyScopedHandleDispatcher() override {} | 566 ~DestroyScopedHandleDispatcher() override {} |
565 | 567 |
566 void SetScopedHandle(scoped_ptr<ScopedEventDispatcher> handler) { | 568 void SetScopedHandle(scoped_ptr<ScopedEventDispatcher> handler) { |
567 handler_ = handler.Pass(); | 569 handler_ = std::move(handler); |
568 } | 570 } |
569 | 571 |
570 void set_callback(const base::Closure& callback) { | 572 void set_callback(const base::Closure& callback) { |
571 callback_ = callback; | 573 callback_ = callback; |
572 } | 574 } |
573 | 575 |
574 private: | 576 private: |
575 // PlatformEventDispatcher: | 577 // PlatformEventDispatcher: |
576 bool CanDispatchEvent(const PlatformEvent& event) override { return true; } | 578 bool CanDispatchEvent(const PlatformEvent& event) override { return true; } |
577 | 579 |
(...skipping 16 matching lines...) Expand all Loading... |
594 // Tests that resetting an overridden dispatcher causes the nested message-loop | 596 // Tests that resetting an overridden dispatcher causes the nested message-loop |
595 // iteration to stop and the rest of the events are dispatched in the next | 597 // iteration to stop and the rest of the events are dispatched in the next |
596 // iteration. | 598 // iteration. |
597 class DestroyedNestedOverriddenDispatcherQuitsNestedLoopIteration | 599 class DestroyedNestedOverriddenDispatcherQuitsNestedLoopIteration |
598 : public PlatformEventTestWithMessageLoop { | 600 : public PlatformEventTestWithMessageLoop { |
599 public: | 601 public: |
600 void NestedTask(std::vector<int>* list, | 602 void NestedTask(std::vector<int>* list, |
601 TestPlatformEventDispatcher* dispatcher) { | 603 TestPlatformEventDispatcher* dispatcher) { |
602 ScopedVector<PlatformEvent> events; | 604 ScopedVector<PlatformEvent> events; |
603 scoped_ptr<PlatformEvent> event(CreatePlatformEvent()); | 605 scoped_ptr<PlatformEvent> event(CreatePlatformEvent()); |
604 events.push_back(event.Pass()); | 606 events.push_back(std::move(event)); |
605 event = CreatePlatformEvent(); | 607 event = CreatePlatformEvent(); |
606 events.push_back(event.Pass()); | 608 events.push_back(std::move(event)); |
607 | 609 |
608 // Attempt to dispatch a couple of events. Dispatching the first event will | 610 // Attempt to dispatch a couple of events. Dispatching the first event will |
609 // have terminated the ScopedEventDispatcher object, which will terminate | 611 // have terminated the ScopedEventDispatcher object, which will terminate |
610 // the current iteration of the message-loop. | 612 // the current iteration of the message-loop. |
611 size_t count = source()->DispatchEventStream(events); | 613 size_t count = source()->DispatchEventStream(events); |
612 EXPECT_EQ(1u, count); | 614 EXPECT_EQ(1u, count); |
613 ASSERT_EQ(2u, list->size()); | 615 ASSERT_EQ(2u, list->size()); |
614 EXPECT_EQ(15, (*list)[0]); | 616 EXPECT_EQ(15, (*list)[0]); |
615 EXPECT_EQ(20, (*list)[1]); | 617 EXPECT_EQ(20, (*list)[1]); |
616 list->clear(); | 618 list->clear(); |
(...skipping 23 matching lines...) Expand all Loading... |
640 scoped_ptr<ScopedEventDispatcher> override_handle = | 642 scoped_ptr<ScopedEventDispatcher> override_handle = |
641 source()->OverrideDispatcher(&overriding); | 643 source()->OverrideDispatcher(&overriding); |
642 | 644 |
643 scoped_ptr<PlatformEvent> event(CreatePlatformEvent()); | 645 scoped_ptr<PlatformEvent> event(CreatePlatformEvent()); |
644 source()->Dispatch(*event); | 646 source()->Dispatch(*event); |
645 ASSERT_EQ(2u, list.size()); | 647 ASSERT_EQ(2u, list.size()); |
646 EXPECT_EQ(15, list[0]); | 648 EXPECT_EQ(15, list[0]); |
647 EXPECT_EQ(20, list[1]); | 649 EXPECT_EQ(20, list[1]); |
648 list.clear(); | 650 list.clear(); |
649 | 651 |
650 overriding.SetScopedHandle(override_handle.Pass()); | 652 overriding.SetScopedHandle(std::move(override_handle)); |
651 base::RunLoop run_loop; | 653 base::RunLoop run_loop; |
652 base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); | 654 base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); |
653 base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); | 655 base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); |
654 loop->PostTask( | 656 loop->PostTask( |
655 FROM_HERE, | 657 FROM_HERE, |
656 base::Bind( | 658 base::Bind( |
657 &DestroyedNestedOverriddenDispatcherQuitsNestedLoopIteration:: | 659 &DestroyedNestedOverriddenDispatcherQuitsNestedLoopIteration:: |
658 NestedTask, | 660 NestedTask, |
659 base::Unretained(this), | 661 base::Unretained(this), |
660 base::Unretained(&list), | 662 base::Unretained(&list), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 source()->RemovePlatformEventDispatcher(&second_overriding); | 703 source()->RemovePlatformEventDispatcher(&second_overriding); |
702 scoped_ptr<ScopedEventDispatcher> second_override_handle = | 704 scoped_ptr<ScopedEventDispatcher> second_override_handle = |
703 source()->OverrideDispatcher(&second_overriding); | 705 source()->OverrideDispatcher(&second_overriding); |
704 | 706 |
705 source()->Dispatch(*event); | 707 source()->Dispatch(*event); |
706 ASSERT_EQ(2u, list->size()); | 708 ASSERT_EQ(2u, list->size()); |
707 EXPECT_EQ(15, (*list)[0]); | 709 EXPECT_EQ(15, (*list)[0]); |
708 EXPECT_EQ(70, (*list)[1]); | 710 EXPECT_EQ(70, (*list)[1]); |
709 list->clear(); | 711 list->clear(); |
710 | 712 |
711 second_overriding.SetScopedHandle(second_override_handle.Pass()); | 713 second_overriding.SetScopedHandle(std::move(second_override_handle)); |
712 second_overriding.set_post_dispatch_action(POST_DISPATCH_NONE); | 714 second_overriding.set_post_dispatch_action(POST_DISPATCH_NONE); |
713 base::RunLoop run_loop; | 715 base::RunLoop run_loop; |
714 second_overriding.set_callback(run_loop.QuitClosure()); | 716 second_overriding.set_callback(run_loop.QuitClosure()); |
715 base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); | 717 base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); |
716 base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); | 718 base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); |
717 loop->PostTask( | 719 loop->PostTask( |
718 FROM_HERE, | 720 FROM_HERE, |
719 base::Bind(base::IgnoreResult(&TestPlatformEventSource::Dispatch), | 721 base::Bind(base::IgnoreResult(&TestPlatformEventSource::Dispatch), |
720 base::Unretained(source()), | 722 base::Unretained(source()), |
721 *event)); | 723 *event)); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 ASSERT_EQ(2u, list.size()); | 770 ASSERT_EQ(2u, list.size()); |
769 EXPECT_EQ(15, list[0]); | 771 EXPECT_EQ(15, list[0]); |
770 EXPECT_EQ(10, list[1]); | 772 EXPECT_EQ(10, list[1]); |
771 } | 773 } |
772 }; | 774 }; |
773 | 775 |
774 RUN_TEST_IN_MESSAGE_LOOP( | 776 RUN_TEST_IN_MESSAGE_LOOP( |
775 ConsecutiveOverriddenDispatcherInTheSameMessageLoopIteration) | 777 ConsecutiveOverriddenDispatcherInTheSameMessageLoopIteration) |
776 | 778 |
777 } // namespace ui | 779 } // namespace ui |
OLD | NEW |