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 |