OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <vector> | 5 #include <vector> |
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_target_iterator.h" | 9 #include "ui/events/event_target_iterator.h" |
10 #include "ui/events/event_targeter.h" | 10 #include "ui/events/event_targeter.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 DISALLOW_COPY_AND_ASSIGN(EventProcessorTest); | 57 DISALLOW_COPY_AND_ASSIGN(EventProcessorTest); |
58 }; | 58 }; |
59 | 59 |
60 TEST_F(EventProcessorTest, Basic) { | 60 TEST_F(EventProcessorTest, Basic) { |
61 scoped_ptr<TestEventTarget> child(new TestEventTarget()); | 61 scoped_ptr<TestEventTarget> child(new TestEventTarget()); |
62 child->SetEventTargeter( | 62 child->SetEventTargeter( |
63 make_scoped_ptr(new TestEventTargeter(child.get(), false))); | 63 make_scoped_ptr(new TestEventTargeter(child.get(), false))); |
64 SetTarget(child.get()); | 64 SetTarget(child.get()); |
65 root()->AddChild(child.Pass()); | 65 root()->AddChild(child.Pass()); |
66 | 66 |
67 MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 67 MouseEvent mouse( |
68 EventTimeForNow(), EF_NONE, EF_NONE); | 68 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 69 EF_NONE, EF_NONE, |
| 70 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
69 DispatchEvent(&mouse); | 71 DispatchEvent(&mouse); |
70 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 72 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
71 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); | 73 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); |
72 | 74 |
73 SetTarget(root()); | 75 SetTarget(root()); |
74 root()->RemoveChild(root()->child_at(0)); | 76 root()->RemoveChild(root()->child_at(0)); |
75 DispatchEvent(&mouse); | 77 DispatchEvent(&mouse); |
76 EXPECT_TRUE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); | 78 EXPECT_TRUE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); |
77 } | 79 } |
78 | 80 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 139 |
138 // Indicate that an event which is dispatched to the child target owned by the | 140 // Indicate that an event which is dispatched to the child target owned by the |
139 // first event processor should be handled by |target_handler| instead. | 141 // first event processor should be handled by |target_handler| instead. |
140 scoped_ptr<TestEventHandler> target_handler( | 142 scoped_ptr<TestEventHandler> target_handler( |
141 new ReDispatchEventHandler(second_processor.get(), root()->child_at(0))); | 143 new ReDispatchEventHandler(second_processor.get(), root()->child_at(0))); |
142 root()->child_at(0)->set_target_handler(target_handler.get()); | 144 root()->child_at(0)->set_target_handler(target_handler.get()); |
143 | 145 |
144 // Dispatch a mouse event to the tree of event targets owned by the first | 146 // Dispatch a mouse event to the tree of event targets owned by the first |
145 // event processor, checking in ReDispatchEventHandler that the phase and | 147 // event processor, checking in ReDispatchEventHandler that the phase and |
146 // target information of the event is correct. | 148 // target information of the event is correct. |
147 MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 149 MouseEvent mouse( |
148 EventTimeForNow(), EF_NONE, EF_NONE); | 150 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 151 EF_NONE, EF_NONE, |
| 152 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
149 DispatchEvent(&mouse); | 153 DispatchEvent(&mouse); |
150 | 154 |
151 // Verify also that |mouse| was seen by the child nodes contained in both | 155 // Verify also that |mouse| was seen by the child nodes contained in both |
152 // event processors and that the event was not handled. | 156 // event processors and that the event was not handled. |
153 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 157 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
154 EXPECT_TRUE(second_root->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 158 EXPECT_TRUE(second_root->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
155 EXPECT_FALSE(mouse.handled()); | 159 EXPECT_FALSE(mouse.handled()); |
156 second_root->child_at(0)->ResetReceivedEvents(); | 160 second_root->child_at(0)->ResetReceivedEvents(); |
157 root()->child_at(0)->ResetReceivedEvents(); | 161 root()->child_at(0)->ResetReceivedEvents(); |
158 | 162 |
159 // Indicate that the child of the second root should handle events, and | 163 // Indicate that the child of the second root should handle events, and |
160 // dispatch another mouse event to verify that it is marked as handled. | 164 // dispatch another mouse event to verify that it is marked as handled. |
161 second_root->child_at(0)->set_mark_events_as_handled(true); | 165 second_root->child_at(0)->set_mark_events_as_handled(true); |
162 MouseEvent mouse2(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 166 MouseEvent mouse2( |
163 EventTimeForNow(), EF_NONE, EF_NONE); | 167 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 168 EF_NONE, EF_NONE, |
| 169 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
164 DispatchEvent(&mouse2); | 170 DispatchEvent(&mouse2); |
165 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 171 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
166 EXPECT_TRUE(second_root->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 172 EXPECT_TRUE(second_root->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
167 EXPECT_TRUE(mouse2.handled()); | 173 EXPECT_TRUE(mouse2.handled()); |
168 } | 174 } |
169 | 175 |
170 // Verifies that OnEventProcessingFinished() is called when an event | 176 // Verifies that OnEventProcessingFinished() is called when an event |
171 // has been handled. | 177 // has been handled. |
172 TEST_F(EventProcessorTest, OnEventProcessingFinished) { | 178 TEST_F(EventProcessorTest, OnEventProcessingFinished) { |
173 scoped_ptr<TestEventTarget> child(new TestEventTarget()); | 179 scoped_ptr<TestEventTarget> child(new TestEventTarget()); |
174 child->set_mark_events_as_handled(true); | 180 child->set_mark_events_as_handled(true); |
175 SetTarget(child.get()); | 181 SetTarget(child.get()); |
176 root()->AddChild(child.Pass()); | 182 root()->AddChild(child.Pass()); |
177 | 183 |
178 // Dispatch a mouse event. We expect the event to be seen by the target, | 184 // Dispatch a mouse event. We expect the event to be seen by the target, |
179 // handled, and we expect OnEventProcessingFinished() to be invoked once. | 185 // handled, and we expect OnEventProcessingFinished() to be invoked once. |
180 MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 186 MouseEvent mouse( |
181 EventTimeForNow(), EF_NONE, EF_NONE); | 187 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 188 EF_NONE, EF_NONE, |
| 189 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
182 DispatchEvent(&mouse); | 190 DispatchEvent(&mouse); |
183 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 191 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
184 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); | 192 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); |
185 EXPECT_TRUE(mouse.handled()); | 193 EXPECT_TRUE(mouse.handled()); |
186 EXPECT_EQ(1, processor()->num_times_processing_finished()); | 194 EXPECT_EQ(1, processor()->num_times_processing_finished()); |
187 } | 195 } |
188 | 196 |
189 // Verifies that OnEventProcessingStarted() has been called when starting to | 197 // Verifies that OnEventProcessingStarted() has been called when starting to |
190 // process an event, and that processing does not take place if | 198 // process an event, and that processing does not take place if |
191 // OnEventProcessingStarted() marks the event as handled. Also verifies that | 199 // OnEventProcessingStarted() marks the event as handled. Also verifies that |
192 // OnEventProcessingFinished() is also called in either case. | 200 // OnEventProcessingFinished() is also called in either case. |
193 TEST_F(EventProcessorTest, OnEventProcessingStarted) { | 201 TEST_F(EventProcessorTest, OnEventProcessingStarted) { |
194 scoped_ptr<TestEventTarget> child(new TestEventTarget()); | 202 scoped_ptr<TestEventTarget> child(new TestEventTarget()); |
195 SetTarget(child.get()); | 203 SetTarget(child.get()); |
196 root()->AddChild(child.Pass()); | 204 root()->AddChild(child.Pass()); |
197 | 205 |
198 // Dispatch a mouse event. We expect the event to be seen by the target, | 206 // Dispatch a mouse event. We expect the event to be seen by the target, |
199 // OnEventProcessingStarted() should be called once, and | 207 // OnEventProcessingStarted() should be called once, and |
200 // OnEventProcessingFinished() should be called once. The event should | 208 // OnEventProcessingFinished() should be called once. The event should |
201 // remain unhandled. | 209 // remain unhandled. |
202 MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 210 MouseEvent mouse( |
203 EventTimeForNow(), EF_NONE, EF_NONE); | 211 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 212 EF_NONE, EF_NONE, |
| 213 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
204 DispatchEvent(&mouse); | 214 DispatchEvent(&mouse); |
205 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 215 EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
206 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); | 216 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); |
207 EXPECT_FALSE(mouse.handled()); | 217 EXPECT_FALSE(mouse.handled()); |
208 EXPECT_EQ(1, processor()->num_times_processing_started()); | 218 EXPECT_EQ(1, processor()->num_times_processing_started()); |
209 EXPECT_EQ(1, processor()->num_times_processing_finished()); | 219 EXPECT_EQ(1, processor()->num_times_processing_finished()); |
210 processor()->Reset(); | 220 processor()->Reset(); |
211 root()->ResetReceivedEvents(); | 221 root()->ResetReceivedEvents(); |
212 root()->child_at(0)->ResetReceivedEvents(); | 222 root()->child_at(0)->ResetReceivedEvents(); |
213 | 223 |
214 // Dispatch another mouse event, but with OnEventProcessingStarted() marking | 224 // Dispatch another mouse event, but with OnEventProcessingStarted() marking |
215 // the event as handled to prevent processing. We expect the event to not be | 225 // the event as handled to prevent processing. We expect the event to not be |
216 // seen by the target this time, but OnEventProcessingStarted() and | 226 // seen by the target this time, but OnEventProcessingStarted() and |
217 // OnEventProcessingFinished() should both still be called once. | 227 // OnEventProcessingFinished() should both still be called once. |
218 processor()->set_should_processing_occur(false); | 228 processor()->set_should_processing_occur(false); |
219 MouseEvent mouse2(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 229 MouseEvent mouse2( |
220 EventTimeForNow(), EF_NONE, EF_NONE); | 230 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 231 EF_NONE, EF_NONE, |
| 232 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
221 DispatchEvent(&mouse2); | 233 DispatchEvent(&mouse2); |
222 EXPECT_FALSE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); | 234 EXPECT_FALSE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED)); |
223 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); | 235 EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED)); |
224 EXPECT_TRUE(mouse2.handled()); | 236 EXPECT_TRUE(mouse2.handled()); |
225 EXPECT_EQ(1, processor()->num_times_processing_started()); | 237 EXPECT_EQ(1, processor()->num_times_processing_started()); |
226 EXPECT_EQ(1, processor()->num_times_processing_finished()); | 238 EXPECT_EQ(1, processor()->num_times_processing_finished()); |
227 } | 239 } |
228 | 240 |
229 // Tests that unhandled events are correctly dispatched to the next-best | 241 // Tests that unhandled events are correctly dispatched to the next-best |
230 // target as decided by the TestEventTargeter. | 242 // target as decided by the TestEventTargeter. |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 TestEventHandler post_child; | 362 TestEventHandler post_child; |
351 post_child.set_handler_name("PostC"); | 363 post_child.set_handler_name("PostC"); |
352 post_child.set_recorder(&recorder); | 364 post_child.set_recorder(&recorder); |
353 child_r->AddPostTargetHandler(&post_child); | 365 child_r->AddPostTargetHandler(&post_child); |
354 | 366 |
355 TestEventHandler post_grandchild; | 367 TestEventHandler post_grandchild; |
356 post_grandchild.set_handler_name("PostG"); | 368 post_grandchild.set_handler_name("PostG"); |
357 post_grandchild.set_recorder(&recorder); | 369 post_grandchild.set_recorder(&recorder); |
358 grandchild_r->AddPostTargetHandler(&post_grandchild); | 370 grandchild_r->AddPostTargetHandler(&post_grandchild); |
359 | 371 |
360 MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), | 372 MouseEvent mouse( |
361 EventTimeForNow(), EF_NONE, EF_NONE); | 373 ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10), EventTimeForNow(), |
| 374 EF_NONE, EF_NONE, |
| 375 ui::PointerEventDetails(ui::EventPointerType::POINTER_TYPE_MOUSE)); |
362 DispatchEvent(&mouse); | 376 DispatchEvent(&mouse); |
363 | 377 |
364 std::string expected[] = { "PreR", "PreC", "PreG", "G", "PostG", "PostC", | 378 std::string expected[] = { "PreR", "PreC", "PreG", "G", "PostG", "PostC", |
365 "PostR", "PreR", "PreC", "C", "PostC", "PostR", "PreR", "R", "PostR" }; | 379 "PostR", "PreR", "PreC", "C", "PostC", "PostR", "PreR", "R", "PostR" }; |
366 EXPECT_EQ(std::vector<std::string>( | 380 EXPECT_EQ(std::vector<std::string>( |
367 expected, expected + arraysize(expected)), recorder); | 381 expected, expected + arraysize(expected)), recorder); |
368 } | 382 } |
369 | 383 |
370 } // namespace test | 384 } // namespace test |
371 } // namespace ui | 385 } // namespace ui |
OLD | NEW |