| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/scoped_target_handler.h" | 5 #include "ui/events/scoped_target_handler.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/events/event_handler.h" | 11 #include "ui/events/event_handler.h" |
| 10 #include "ui/events/event_target.h" | 12 #include "ui/events/event_target.h" |
| 11 #include "ui/events/event_target_iterator.h" | 13 #include "ui/events/event_target_iterator.h" |
| 12 #include "ui/events/event_utils.h" | 14 #include "ui/events/event_utils.h" |
| 13 | 15 |
| 14 namespace ui { | 16 namespace ui { |
| 15 | 17 |
| 16 namespace { | 18 namespace { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 27 }; | 29 }; |
| 28 | 30 |
| 29 // An EventTarget that holds ownership of its target and delegate EventHandlers. | 31 // An EventTarget that holds ownership of its target and delegate EventHandlers. |
| 30 class TestEventTarget : public EventTarget { | 32 class TestEventTarget : public EventTarget { |
| 31 public: | 33 public: |
| 32 TestEventTarget() {} | 34 TestEventTarget() {} |
| 33 ~TestEventTarget() override {} | 35 ~TestEventTarget() override {} |
| 34 | 36 |
| 35 void SetHandler(scoped_ptr<EventHandler> target_handler, | 37 void SetHandler(scoped_ptr<EventHandler> target_handler, |
| 36 scoped_ptr<EventHandler> delegate) { | 38 scoped_ptr<EventHandler> delegate) { |
| 37 target_handler_ = target_handler.Pass(); | 39 target_handler_ = std::move(target_handler); |
| 38 delegate_ = delegate.Pass(); | 40 delegate_ = std::move(delegate); |
| 39 } | 41 } |
| 40 | 42 |
| 41 // EventTarget: | 43 // EventTarget: |
| 42 void DispatchEvent(Event* event) { target_handler()->OnEvent(event); } | 44 void DispatchEvent(Event* event) { target_handler()->OnEvent(event); } |
| 43 bool CanAcceptEvent(const Event& event) override { return true; } | 45 bool CanAcceptEvent(const Event& event) override { return true; } |
| 44 EventTarget* GetParentTarget() override { return nullptr; } | 46 EventTarget* GetParentTarget() override { return nullptr; } |
| 45 scoped_ptr<EventTargetIterator> GetChildIterator() const override { | 47 scoped_ptr<EventTargetIterator> GetChildIterator() const override { |
| 46 return make_scoped_ptr(new TestEventTargetIterator); | 48 return make_scoped_ptr(new TestEventTargetIterator); |
| 47 } | 49 } |
| 48 EventTargeter* GetEventTargeter() override { return nullptr; } | 50 EventTargeter* GetEventTargeter() override { return nullptr; } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 } // namespace | 137 } // namespace |
| 136 | 138 |
| 137 // Tests that a ScopedTargetHandler invokes both the target and a delegate. | 139 // Tests that a ScopedTargetHandler invokes both the target and a delegate. |
| 138 TEST(ScopedTargetHandlerTest, HandlerInvoked) { | 140 TEST(ScopedTargetHandlerTest, HandlerInvoked) { |
| 139 int count = 0; | 141 int count = 0; |
| 140 TestEventTarget* target = new TestEventTarget; | 142 TestEventTarget* target = new TestEventTarget; |
| 141 scoped_ptr<NestedEventHandler> target_handler( | 143 scoped_ptr<NestedEventHandler> target_handler( |
| 142 new NestedEventHandler(target, 1)); | 144 new NestedEventHandler(target, 1)); |
| 143 scoped_ptr<EventCountingEventHandler> delegate( | 145 scoped_ptr<EventCountingEventHandler> delegate( |
| 144 new EventCountingEventHandler(target, &count)); | 146 new EventCountingEventHandler(target, &count)); |
| 145 target->SetHandler(target_handler.Pass(), delegate.Pass()); | 147 target->SetHandler(std::move(target_handler), std::move(delegate)); |
| 146 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 148 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 147 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, | 149 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, |
| 148 EF_LEFT_MOUSE_BUTTON); | 150 EF_LEFT_MOUSE_BUTTON); |
| 149 target->DispatchEvent(&event); | 151 target->DispatchEvent(&event); |
| 150 EXPECT_EQ(1, count); | 152 EXPECT_EQ(1, count); |
| 151 delete target; | 153 delete target; |
| 152 } | 154 } |
| 153 | 155 |
| 154 // Tests that a ScopedTargetHandler invokes both the target and a delegate when | 156 // Tests that a ScopedTargetHandler invokes both the target and a delegate when |
| 155 // an Event is dispatched recursively such as with synthetic events. | 157 // an Event is dispatched recursively such as with synthetic events. |
| 156 TEST(ScopedTargetHandlerTest, HandlerInvokedNested) { | 158 TEST(ScopedTargetHandlerTest, HandlerInvokedNested) { |
| 157 int count = 0; | 159 int count = 0; |
| 158 TestEventTarget* target = new TestEventTarget; | 160 TestEventTarget* target = new TestEventTarget; |
| 159 scoped_ptr<NestedEventHandler> target_handler( | 161 scoped_ptr<NestedEventHandler> target_handler( |
| 160 new NestedEventHandler(target, 2)); | 162 new NestedEventHandler(target, 2)); |
| 161 scoped_ptr<EventCountingEventHandler> delegate( | 163 scoped_ptr<EventCountingEventHandler> delegate( |
| 162 new EventCountingEventHandler(target, &count)); | 164 new EventCountingEventHandler(target, &count)); |
| 163 target->SetHandler(target_handler.Pass(), delegate.Pass()); | 165 target->SetHandler(std::move(target_handler), std::move(delegate)); |
| 164 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 166 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 165 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, | 167 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, |
| 166 EF_LEFT_MOUSE_BUTTON); | 168 EF_LEFT_MOUSE_BUTTON); |
| 167 target->DispatchEvent(&event); | 169 target->DispatchEvent(&event); |
| 168 EXPECT_EQ(2, count); | 170 EXPECT_EQ(2, count); |
| 169 delete target; | 171 delete target; |
| 170 } | 172 } |
| 171 | 173 |
| 172 // Tests that a it is safe to delete a ScopedTargetHandler while handling an | 174 // Tests that a it is safe to delete a ScopedTargetHandler while handling an |
| 173 // event. | 175 // event. |
| 174 TEST(ScopedTargetHandlerTest, SafeToDestroy) { | 176 TEST(ScopedTargetHandlerTest, SafeToDestroy) { |
| 175 int count = 0; | 177 int count = 0; |
| 176 TestEventTarget* target = new TestEventTarget; | 178 TestEventTarget* target = new TestEventTarget; |
| 177 scoped_ptr<TargetDestroyingEventHandler> target_handler( | 179 scoped_ptr<TargetDestroyingEventHandler> target_handler( |
| 178 new TargetDestroyingEventHandler(target, 1)); | 180 new TargetDestroyingEventHandler(target, 1)); |
| 179 scoped_ptr<EventCountingEventHandler> delegate( | 181 scoped_ptr<EventCountingEventHandler> delegate( |
| 180 new EventCountingEventHandler(target, &count)); | 182 new EventCountingEventHandler(target, &count)); |
| 181 target->SetHandler(target_handler.Pass(), delegate.Pass()); | 183 target->SetHandler(std::move(target_handler), std::move(delegate)); |
| 182 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 184 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 183 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, | 185 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, |
| 184 EF_LEFT_MOUSE_BUTTON); | 186 EF_LEFT_MOUSE_BUTTON); |
| 185 target->DispatchEvent(&event); | 187 target->DispatchEvent(&event); |
| 186 EXPECT_EQ(0, count); | 188 EXPECT_EQ(0, count); |
| 187 } | 189 } |
| 188 | 190 |
| 189 // Tests that a it is safe to delete a ScopedTargetHandler while handling an | 191 // Tests that a it is safe to delete a ScopedTargetHandler while handling an |
| 190 // event recursively. | 192 // event recursively. |
| 191 TEST(ScopedTargetHandlerTest, SafeToDestroyNested) { | 193 TEST(ScopedTargetHandlerTest, SafeToDestroyNested) { |
| 192 int count = 0; | 194 int count = 0; |
| 193 TestEventTarget* target = new TestEventTarget; | 195 TestEventTarget* target = new TestEventTarget; |
| 194 scoped_ptr<TargetDestroyingEventHandler> target_handler( | 196 scoped_ptr<TargetDestroyingEventHandler> target_handler( |
| 195 new TargetDestroyingEventHandler(target, 2)); | 197 new TargetDestroyingEventHandler(target, 2)); |
| 196 scoped_ptr<EventCountingEventHandler> delegate( | 198 scoped_ptr<EventCountingEventHandler> delegate( |
| 197 new EventCountingEventHandler(target, &count)); | 199 new EventCountingEventHandler(target, &count)); |
| 198 target->SetHandler(target_handler.Pass(), delegate.Pass()); | 200 target->SetHandler(std::move(target_handler), std::move(delegate)); |
| 199 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 201 MouseEvent event(ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 200 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, | 202 EventTimeForNow(), EF_LEFT_MOUSE_BUTTON, |
| 201 EF_LEFT_MOUSE_BUTTON); | 203 EF_LEFT_MOUSE_BUTTON); |
| 202 target->DispatchEvent(&event); | 204 target->DispatchEvent(&event); |
| 203 EXPECT_EQ(0, count); | 205 EXPECT_EQ(0, count); |
| 204 } | 206 } |
| 205 | 207 |
| 206 } // namespace ui | 208 } // namespace ui |
| OLD | NEW |