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/aura/window_event_dispatcher.h" | 5 #include "ui/aura/window_event_dispatcher.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 namespace { | 38 namespace { |
39 | 39 |
40 // A delegate that always returns a non-client component for hit tests. | 40 // A delegate that always returns a non-client component for hit tests. |
41 class NonClientDelegate : public test::TestWindowDelegate { | 41 class NonClientDelegate : public test::TestWindowDelegate { |
42 public: | 42 public: |
43 NonClientDelegate() | 43 NonClientDelegate() |
44 : non_client_count_(0), | 44 : non_client_count_(0), |
45 mouse_event_count_(0), | 45 mouse_event_count_(0), |
46 mouse_event_flags_(0x0) { | 46 mouse_event_flags_(0x0) { |
47 } | 47 } |
48 virtual ~NonClientDelegate() {} | 48 ~NonClientDelegate() override {} |
49 | 49 |
50 int non_client_count() const { return non_client_count_; } | 50 int non_client_count() const { return non_client_count_; } |
51 gfx::Point non_client_location() const { return non_client_location_; } | 51 gfx::Point non_client_location() const { return non_client_location_; } |
52 int mouse_event_count() const { return mouse_event_count_; } | 52 int mouse_event_count() const { return mouse_event_count_; } |
53 gfx::Point mouse_event_location() const { return mouse_event_location_; } | 53 gfx::Point mouse_event_location() const { return mouse_event_location_; } |
54 int mouse_event_flags() const { return mouse_event_flags_; } | 54 int mouse_event_flags() const { return mouse_event_flags_; } |
55 | 55 |
56 virtual int GetNonClientComponent(const gfx::Point& location) const override { | 56 int GetNonClientComponent(const gfx::Point& location) const override { |
57 NonClientDelegate* self = const_cast<NonClientDelegate*>(this); | 57 NonClientDelegate* self = const_cast<NonClientDelegate*>(this); |
58 self->non_client_count_++; | 58 self->non_client_count_++; |
59 self->non_client_location_ = location; | 59 self->non_client_location_ = location; |
60 return HTTOPLEFT; | 60 return HTTOPLEFT; |
61 } | 61 } |
62 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 62 void OnMouseEvent(ui::MouseEvent* event) override { |
63 mouse_event_count_++; | 63 mouse_event_count_++; |
64 mouse_event_location_ = event->location(); | 64 mouse_event_location_ = event->location(); |
65 mouse_event_flags_ = event->flags(); | 65 mouse_event_flags_ = event->flags(); |
66 event->SetHandled(); | 66 event->SetHandled(); |
67 } | 67 } |
68 | 68 |
69 private: | 69 private: |
70 int non_client_count_; | 70 int non_client_count_; |
71 gfx::Point non_client_location_; | 71 gfx::Point non_client_location_; |
72 int mouse_event_count_; | 72 int mouse_event_count_; |
73 gfx::Point mouse_event_location_; | 73 gfx::Point mouse_event_location_; |
74 int mouse_event_flags_; | 74 int mouse_event_flags_; |
75 | 75 |
76 DISALLOW_COPY_AND_ASSIGN(NonClientDelegate); | 76 DISALLOW_COPY_AND_ASSIGN(NonClientDelegate); |
77 }; | 77 }; |
78 | 78 |
79 // A simple event handler that consumes key events. | 79 // A simple event handler that consumes key events. |
80 class ConsumeKeyHandler : public ui::test::TestEventHandler { | 80 class ConsumeKeyHandler : public ui::test::TestEventHandler { |
81 public: | 81 public: |
82 ConsumeKeyHandler() {} | 82 ConsumeKeyHandler() {} |
83 virtual ~ConsumeKeyHandler() {} | 83 ~ConsumeKeyHandler() override {} |
84 | 84 |
85 // Overridden from ui::EventHandler: | 85 // Overridden from ui::EventHandler: |
86 virtual void OnKeyEvent(ui::KeyEvent* event) override { | 86 void OnKeyEvent(ui::KeyEvent* event) override { |
87 ui::test::TestEventHandler::OnKeyEvent(event); | 87 ui::test::TestEventHandler::OnKeyEvent(event); |
88 event->StopPropagation(); | 88 event->StopPropagation(); |
89 } | 89 } |
90 | 90 |
91 private: | 91 private: |
92 DISALLOW_COPY_AND_ASSIGN(ConsumeKeyHandler); | 92 DISALLOW_COPY_AND_ASSIGN(ConsumeKeyHandler); |
93 }; | 93 }; |
94 | 94 |
95 bool IsFocusedWindow(aura::Window* window) { | 95 bool IsFocusedWindow(aura::Window* window) { |
96 return client::GetFocusClient(window)->GetFocusedWindow() == window; | 96 return client::GetFocusClient(window)->GetFocusedWindow() == window; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 : root_window_(root_window), | 234 : root_window_(root_window), |
235 lock_(false) { | 235 lock_(false) { |
236 client::SetEventClient(root_window_, this); | 236 client::SetEventClient(root_window_, this); |
237 Window* lock_window = | 237 Window* lock_window = |
238 test::CreateTestWindowWithBounds(root_window_->bounds(), root_window_); | 238 test::CreateTestWindowWithBounds(root_window_->bounds(), root_window_); |
239 lock_window->set_id(kLockWindowId); | 239 lock_window->set_id(kLockWindowId); |
240 Window* non_lock_window = | 240 Window* non_lock_window = |
241 test::CreateTestWindowWithBounds(root_window_->bounds(), root_window_); | 241 test::CreateTestWindowWithBounds(root_window_->bounds(), root_window_); |
242 non_lock_window->set_id(kNonLockWindowId); | 242 non_lock_window->set_id(kNonLockWindowId); |
243 } | 243 } |
244 virtual ~TestEventClient() { | 244 ~TestEventClient() override { client::SetEventClient(root_window_, NULL); } |
245 client::SetEventClient(root_window_, NULL); | |
246 } | |
247 | 245 |
248 // Starts/stops locking. Locking prevents windows other than those inside | 246 // Starts/stops locking. Locking prevents windows other than those inside |
249 // the lock container from receiving events, getting focus etc. | 247 // the lock container from receiving events, getting focus etc. |
250 void Lock() { | 248 void Lock() { |
251 lock_ = true; | 249 lock_ = true; |
252 } | 250 } |
253 void Unlock() { | 251 void Unlock() { |
254 lock_ = false; | 252 lock_ = false; |
255 } | 253 } |
256 | 254 |
257 Window* GetLockWindow() { | 255 Window* GetLockWindow() { |
258 return const_cast<Window*>( | 256 return const_cast<Window*>( |
259 static_cast<const TestEventClient*>(this)->GetLockWindow()); | 257 static_cast<const TestEventClient*>(this)->GetLockWindow()); |
260 } | 258 } |
261 const Window* GetLockWindow() const { | 259 const Window* GetLockWindow() const { |
262 return root_window_->GetChildById(kLockWindowId); | 260 return root_window_->GetChildById(kLockWindowId); |
263 } | 261 } |
264 Window* GetNonLockWindow() { | 262 Window* GetNonLockWindow() { |
265 return root_window_->GetChildById(kNonLockWindowId); | 263 return root_window_->GetChildById(kNonLockWindowId); |
266 } | 264 } |
267 | 265 |
268 private: | 266 private: |
269 // Overridden from client::EventClient: | 267 // Overridden from client::EventClient: |
270 virtual bool CanProcessEventsWithinSubtree( | 268 bool CanProcessEventsWithinSubtree(const Window* window) const override { |
271 const Window* window) const override { | |
272 return lock_ ? | 269 return lock_ ? |
273 window->Contains(GetLockWindow()) || GetLockWindow()->Contains(window) : | 270 window->Contains(GetLockWindow()) || GetLockWindow()->Contains(window) : |
274 true; | 271 true; |
275 } | 272 } |
276 | 273 |
277 virtual ui::EventTarget* GetToplevelEventTarget() override { | 274 ui::EventTarget* GetToplevelEventTarget() override { return NULL; } |
278 return NULL; | |
279 } | |
280 | 275 |
281 Window* root_window_; | 276 Window* root_window_; |
282 bool lock_; | 277 bool lock_; |
283 | 278 |
284 DISALLOW_COPY_AND_ASSIGN(TestEventClient); | 279 DISALLOW_COPY_AND_ASSIGN(TestEventClient); |
285 }; | 280 }; |
286 | 281 |
287 } // namespace | 282 } // namespace |
288 | 283 |
289 TEST_F(WindowEventDispatcherTest, CanProcessEventsWithinSubtree) { | 284 TEST_F(WindowEventDispatcherTest, CanProcessEventsWithinSubtree) { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 | 474 |
480 void Reset() { | 475 void Reset() { |
481 events_.clear(); | 476 events_.clear(); |
482 mouse_locations_.clear(); | 477 mouse_locations_.clear(); |
483 touch_locations_.clear(); | 478 touch_locations_.clear(); |
484 gesture_locations_.clear(); | 479 gesture_locations_.clear(); |
485 mouse_event_flags_.clear(); | 480 mouse_event_flags_.clear(); |
486 } | 481 } |
487 | 482 |
488 // ui::EventHandler overrides: | 483 // ui::EventHandler overrides: |
489 virtual void OnEvent(ui::Event* event) override { | 484 void OnEvent(ui::Event* event) override { |
490 ui::EventHandler::OnEvent(event); | 485 ui::EventHandler::OnEvent(event); |
491 events_.push_back(event->type()); | 486 events_.push_back(event->type()); |
492 if (wait_until_event_ == event->type() && run_loop_) { | 487 if (wait_until_event_ == event->type() && run_loop_) { |
493 run_loop_->Quit(); | 488 run_loop_->Quit(); |
494 wait_until_event_ = ui::ET_UNKNOWN; | 489 wait_until_event_ = ui::ET_UNKNOWN; |
495 } | 490 } |
496 } | 491 } |
497 | 492 |
498 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 493 void OnMouseEvent(ui::MouseEvent* event) override { |
499 mouse_locations_.push_back(event->location()); | 494 mouse_locations_.push_back(event->location()); |
500 mouse_event_flags_.push_back(event->flags()); | 495 mouse_event_flags_.push_back(event->flags()); |
501 } | 496 } |
502 | 497 |
503 virtual void OnTouchEvent(ui::TouchEvent* event) override { | 498 void OnTouchEvent(ui::TouchEvent* event) override { |
504 touch_locations_.push_back(event->location()); | 499 touch_locations_.push_back(event->location()); |
505 } | 500 } |
506 | 501 |
507 virtual void OnGestureEvent(ui::GestureEvent* event) override { | 502 void OnGestureEvent(ui::GestureEvent* event) override { |
508 gesture_locations_.push_back(event->location()); | 503 gesture_locations_.push_back(event->location()); |
509 } | 504 } |
510 | 505 |
511 bool HasReceivedEvent(ui::EventType type) { | 506 bool HasReceivedEvent(ui::EventType type) { |
512 return std::find(events_.begin(), events_.end(), type) != events_.end(); | 507 return std::find(events_.begin(), events_.end(), type) != events_.end(); |
513 } | 508 } |
514 | 509 |
515 private: | 510 private: |
516 scoped_ptr<base::RunLoop> run_loop_; | 511 scoped_ptr<base::RunLoop> run_loop_; |
517 ui::EventType wait_until_event_; | 512 ui::EventType wait_until_event_; |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 | 822 |
828 // This event handler requests the dispatcher to start holding pointer-move | 823 // This event handler requests the dispatcher to start holding pointer-move |
829 // events when it receives the first scroll-update gesture. | 824 // events when it receives the first scroll-update gesture. |
830 class HoldPointerOnScrollHandler : public ui::test::TestEventHandler { | 825 class HoldPointerOnScrollHandler : public ui::test::TestEventHandler { |
831 public: | 826 public: |
832 HoldPointerOnScrollHandler(WindowEventDispatcher* dispatcher, | 827 HoldPointerOnScrollHandler(WindowEventDispatcher* dispatcher, |
833 EventFilterRecorder* filter) | 828 EventFilterRecorder* filter) |
834 : dispatcher_(dispatcher), | 829 : dispatcher_(dispatcher), |
835 filter_(filter), | 830 filter_(filter), |
836 holding_moves_(false) {} | 831 holding_moves_(false) {} |
837 virtual ~HoldPointerOnScrollHandler() {} | 832 ~HoldPointerOnScrollHandler() override {} |
838 | 833 |
839 private: | 834 private: |
840 // ui::test::TestEventHandler: | 835 // ui::test::TestEventHandler: |
841 virtual void OnGestureEvent(ui::GestureEvent* gesture) override { | 836 void OnGestureEvent(ui::GestureEvent* gesture) override { |
842 if (!holding_moves_ && gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE) { | 837 if (!holding_moves_ && gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE) { |
843 holding_moves_ = true; | 838 holding_moves_ = true; |
844 dispatcher_->HoldPointerMoves(); | 839 dispatcher_->HoldPointerMoves(); |
845 filter_->Reset(); | 840 filter_->Reset(); |
846 } else if (gesture->type() == ui::ET_GESTURE_SCROLL_END) { | 841 } else if (gesture->type() == ui::ET_GESTURE_SCROLL_END) { |
847 dispatcher_->ReleasePointerMoves(); | 842 dispatcher_->ReleasePointerMoves(); |
848 holding_moves_ = false; | 843 holding_moves_ = false; |
849 } | 844 } |
850 } | 845 } |
851 | 846 |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 int translated_y = mouse_exit_location.y() - window_origin.y(); | 1121 int translated_y = mouse_exit_location.y() - window_origin.y(); |
1127 gfx::Point translated_point(translated_x, translated_y); | 1122 gfx::Point translated_point(translated_x, translated_y); |
1128 EXPECT_EQ(recorder.mouse_location(0).ToString(), translated_point.ToString()); | 1123 EXPECT_EQ(recorder.mouse_location(0).ToString(), translated_point.ToString()); |
1129 root_window()->RemovePreTargetHandler(&recorder); | 1124 root_window()->RemovePreTargetHandler(&recorder); |
1130 } | 1125 } |
1131 | 1126 |
1132 class DeletingEventFilter : public ui::EventHandler { | 1127 class DeletingEventFilter : public ui::EventHandler { |
1133 public: | 1128 public: |
1134 DeletingEventFilter() | 1129 DeletingEventFilter() |
1135 : delete_during_pre_handle_(false) {} | 1130 : delete_during_pre_handle_(false) {} |
1136 virtual ~DeletingEventFilter() {} | 1131 ~DeletingEventFilter() override {} |
1137 | 1132 |
1138 void Reset(bool delete_during_pre_handle) { | 1133 void Reset(bool delete_during_pre_handle) { |
1139 delete_during_pre_handle_ = delete_during_pre_handle; | 1134 delete_during_pre_handle_ = delete_during_pre_handle; |
1140 } | 1135 } |
1141 | 1136 |
1142 private: | 1137 private: |
1143 // Overridden from ui::EventHandler: | 1138 // Overridden from ui::EventHandler: |
1144 virtual void OnKeyEvent(ui::KeyEvent* event) override { | 1139 void OnKeyEvent(ui::KeyEvent* event) override { |
1145 if (delete_during_pre_handle_) | 1140 if (delete_during_pre_handle_) |
1146 delete event->target(); | 1141 delete event->target(); |
1147 } | 1142 } |
1148 | 1143 |
1149 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1144 void OnMouseEvent(ui::MouseEvent* event) override { |
1150 if (delete_during_pre_handle_) | 1145 if (delete_during_pre_handle_) |
1151 delete event->target(); | 1146 delete event->target(); |
1152 } | 1147 } |
1153 | 1148 |
1154 bool delete_during_pre_handle_; | 1149 bool delete_during_pre_handle_; |
1155 | 1150 |
1156 DISALLOW_COPY_AND_ASSIGN(DeletingEventFilter); | 1151 DISALLOW_COPY_AND_ASSIGN(DeletingEventFilter); |
1157 }; | 1152 }; |
1158 | 1153 |
1159 class DeletingWindowDelegate : public test::TestWindowDelegate { | 1154 class DeletingWindowDelegate : public test::TestWindowDelegate { |
1160 public: | 1155 public: |
1161 DeletingWindowDelegate() | 1156 DeletingWindowDelegate() |
1162 : window_(NULL), | 1157 : window_(NULL), |
1163 delete_during_handle_(false), | 1158 delete_during_handle_(false), |
1164 got_event_(false) {} | 1159 got_event_(false) {} |
1165 virtual ~DeletingWindowDelegate() {} | 1160 ~DeletingWindowDelegate() override {} |
1166 | 1161 |
1167 void Reset(Window* window, bool delete_during_handle) { | 1162 void Reset(Window* window, bool delete_during_handle) { |
1168 window_ = window; | 1163 window_ = window; |
1169 delete_during_handle_ = delete_during_handle; | 1164 delete_during_handle_ = delete_during_handle; |
1170 got_event_ = false; | 1165 got_event_ = false; |
1171 } | 1166 } |
1172 bool got_event() const { return got_event_; } | 1167 bool got_event() const { return got_event_; } |
1173 | 1168 |
1174 private: | 1169 private: |
1175 // Overridden from WindowDelegate: | 1170 // Overridden from WindowDelegate: |
1176 virtual void OnKeyEvent(ui::KeyEvent* event) override { | 1171 void OnKeyEvent(ui::KeyEvent* event) override { |
1177 if (delete_during_handle_) | 1172 if (delete_during_handle_) |
1178 delete window_; | 1173 delete window_; |
1179 got_event_ = true; | 1174 got_event_ = true; |
1180 } | 1175 } |
1181 | 1176 |
1182 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1177 void OnMouseEvent(ui::MouseEvent* event) override { |
1183 if (delete_during_handle_) | 1178 if (delete_during_handle_) |
1184 delete window_; | 1179 delete window_; |
1185 got_event_ = true; | 1180 got_event_ = true; |
1186 } | 1181 } |
1187 | 1182 |
1188 Window* window_; | 1183 Window* window_; |
1189 bool delete_during_handle_; | 1184 bool delete_during_handle_; |
1190 bool got_event_; | 1185 bool got_event_; |
1191 | 1186 |
1192 DISALLOW_COPY_AND_ASSIGN(DeletingWindowDelegate); | 1187 DISALLOW_COPY_AND_ASSIGN(DeletingWindowDelegate); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1232 EXPECT_FALSE(d11.got_event()); | 1227 EXPECT_FALSE(d11.got_event()); |
1233 } | 1228 } |
1234 | 1229 |
1235 namespace { | 1230 namespace { |
1236 | 1231 |
1237 // A window delegate that detaches the parent of the target's parent window when | 1232 // A window delegate that detaches the parent of the target's parent window when |
1238 // it receives a tap event. | 1233 // it receives a tap event. |
1239 class DetachesParentOnTapDelegate : public test::TestWindowDelegate { | 1234 class DetachesParentOnTapDelegate : public test::TestWindowDelegate { |
1240 public: | 1235 public: |
1241 DetachesParentOnTapDelegate() {} | 1236 DetachesParentOnTapDelegate() {} |
1242 virtual ~DetachesParentOnTapDelegate() {} | 1237 ~DetachesParentOnTapDelegate() override {} |
1243 | 1238 |
1244 private: | 1239 private: |
1245 virtual void OnGestureEvent(ui::GestureEvent* event) override { | 1240 void OnGestureEvent(ui::GestureEvent* event) override { |
1246 if (event->type() == ui::ET_GESTURE_TAP_DOWN) { | 1241 if (event->type() == ui::ET_GESTURE_TAP_DOWN) { |
1247 event->SetHandled(); | 1242 event->SetHandled(); |
1248 return; | 1243 return; |
1249 } | 1244 } |
1250 | 1245 |
1251 if (event->type() == ui::ET_GESTURE_TAP) { | 1246 if (event->type() == ui::ET_GESTURE_TAP) { |
1252 Window* parent = static_cast<Window*>(event->target())->parent(); | 1247 Window* parent = static_cast<Window*>(event->target())->parent(); |
1253 parent->parent()->RemoveChild(parent); | 1248 parent->parent()->RemoveChild(parent); |
1254 event->SetHandled(); | 1249 event->SetHandled(); |
1255 } | 1250 } |
(...skipping 19 matching lines...) Expand all Loading... |
1275 namespace { | 1270 namespace { |
1276 | 1271 |
1277 // A window delegate that processes nested gestures on tap. | 1272 // A window delegate that processes nested gestures on tap. |
1278 class NestedGestureDelegate : public test::TestWindowDelegate { | 1273 class NestedGestureDelegate : public test::TestWindowDelegate { |
1279 public: | 1274 public: |
1280 NestedGestureDelegate(ui::test::EventGenerator* generator, | 1275 NestedGestureDelegate(ui::test::EventGenerator* generator, |
1281 const gfx::Point tap_location) | 1276 const gfx::Point tap_location) |
1282 : generator_(generator), | 1277 : generator_(generator), |
1283 tap_location_(tap_location), | 1278 tap_location_(tap_location), |
1284 gesture_end_count_(0) {} | 1279 gesture_end_count_(0) {} |
1285 virtual ~NestedGestureDelegate() {} | 1280 ~NestedGestureDelegate() override {} |
1286 | 1281 |
1287 int gesture_end_count() const { return gesture_end_count_; } | 1282 int gesture_end_count() const { return gesture_end_count_; } |
1288 | 1283 |
1289 private: | 1284 private: |
1290 virtual void OnGestureEvent(ui::GestureEvent* event) override { | 1285 void OnGestureEvent(ui::GestureEvent* event) override { |
1291 switch (event->type()) { | 1286 switch (event->type()) { |
1292 case ui::ET_GESTURE_TAP_DOWN: | 1287 case ui::ET_GESTURE_TAP_DOWN: |
1293 event->SetHandled(); | 1288 event->SetHandled(); |
1294 break; | 1289 break; |
1295 case ui::ET_GESTURE_TAP: | 1290 case ui::ET_GESTURE_TAP: |
1296 if (generator_) | 1291 if (generator_) |
1297 generator_->GestureTapAt(tap_location_); | 1292 generator_->GestureTapAt(tap_location_); |
1298 event->SetHandled(); | 1293 event->SetHandled(); |
1299 break; | 1294 break; |
1300 case ui::ET_GESTURE_END: | 1295 case ui::ET_GESTURE_END: |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1364 // events after that. | 1359 // events after that. |
1365 class RepostGestureEventRecorder : public EventFilterRecorder { | 1360 class RepostGestureEventRecorder : public EventFilterRecorder { |
1366 public: | 1361 public: |
1367 RepostGestureEventRecorder(aura::Window* repost_source, | 1362 RepostGestureEventRecorder(aura::Window* repost_source, |
1368 aura::Window* repost_target) | 1363 aura::Window* repost_target) |
1369 : repost_source_(repost_source), | 1364 : repost_source_(repost_source), |
1370 repost_target_(repost_target), | 1365 repost_target_(repost_target), |
1371 reposted_(false), | 1366 reposted_(false), |
1372 done_cleanup_(false) {} | 1367 done_cleanup_(false) {} |
1373 | 1368 |
1374 virtual ~RepostGestureEventRecorder() {} | 1369 ~RepostGestureEventRecorder() override {} |
1375 | 1370 |
1376 virtual void OnTouchEvent(ui::TouchEvent* event) override { | 1371 void OnTouchEvent(ui::TouchEvent* event) override { |
1377 if (reposted_ && event->type() == ui::ET_TOUCH_PRESSED) { | 1372 if (reposted_ && event->type() == ui::ET_TOUCH_PRESSED) { |
1378 done_cleanup_ = true; | 1373 done_cleanup_ = true; |
1379 Reset(); | 1374 Reset(); |
1380 } | 1375 } |
1381 EventFilterRecorder::OnTouchEvent(event); | 1376 EventFilterRecorder::OnTouchEvent(event); |
1382 } | 1377 } |
1383 | 1378 |
1384 virtual void OnGestureEvent(ui::GestureEvent* event) override { | 1379 void OnGestureEvent(ui::GestureEvent* event) override { |
1385 EXPECT_EQ(done_cleanup_ ? repost_target_ : repost_source_, event->target()); | 1380 EXPECT_EQ(done_cleanup_ ? repost_target_ : repost_source_, event->target()); |
1386 if (event->type() == ui::ET_GESTURE_TAP_DOWN) { | 1381 if (event->type() == ui::ET_GESTURE_TAP_DOWN) { |
1387 if (!reposted_) { | 1382 if (!reposted_) { |
1388 EXPECT_NE(repost_target_, event->target()); | 1383 EXPECT_NE(repost_target_, event->target()); |
1389 reposted_ = true; | 1384 reposted_ = true; |
1390 repost_target_->GetHost()->dispatcher()->RepostEvent(*event); | 1385 repost_target_->GetHost()->dispatcher()->RepostEvent(*event); |
1391 // Ensure that the reposted gesture event above goes to the | 1386 // Ensure that the reposted gesture event above goes to the |
1392 // repost_target_; | 1387 // repost_target_; |
1393 repost_source_->GetRootWindow()->RemoveChild(repost_source_); | 1388 repost_source_->GetRootWindow()->RemoveChild(repost_source_); |
1394 return; | 1389 return; |
1395 } | 1390 } |
1396 } | 1391 } |
1397 EventFilterRecorder::OnGestureEvent(event); | 1392 EventFilterRecorder::OnGestureEvent(event); |
1398 } | 1393 } |
1399 | 1394 |
1400 // Ignore mouse events as they don't fire at all times. This causes | 1395 // Ignore mouse events as they don't fire at all times. This causes |
1401 // the GestureRepostEventOrder test to fail randomly. | 1396 // the GestureRepostEventOrder test to fail randomly. |
1402 virtual void OnMouseEvent(ui::MouseEvent* event) override {} | 1397 void OnMouseEvent(ui::MouseEvent* event) override {} |
1403 | 1398 |
1404 private: | 1399 private: |
1405 aura::Window* repost_source_; | 1400 aura::Window* repost_source_; |
1406 aura::Window* repost_target_; | 1401 aura::Window* repost_target_; |
1407 // set to true if we reposted the ET_GESTURE_TAP_DOWN event. | 1402 // set to true if we reposted the ET_GESTURE_TAP_DOWN event. |
1408 bool reposted_; | 1403 bool reposted_; |
1409 // set true if we're done cleaning up after hiding repost_source_; | 1404 // set true if we're done cleaning up after hiding repost_source_; |
1410 bool done_cleanup_; | 1405 bool done_cleanup_; |
1411 DISALLOW_COPY_AND_ASSIGN(RepostGestureEventRecorder); | 1406 DISALLOW_COPY_AND_ASSIGN(RepostGestureEventRecorder); |
1412 }; | 1407 }; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1466 EXPECT_EQ(1, tap_down_count); | 1461 EXPECT_EQ(1, tap_down_count); |
1467 | 1462 |
1468 EXPECT_EQ(kExpectedTargetEvents, | 1463 EXPECT_EQ(kExpectedTargetEvents, |
1469 EventTypesToString(repost_event_recorder.events())); | 1464 EventTypesToString(repost_event_recorder.events())); |
1470 root_window()->RemovePreTargetHandler(&repost_event_recorder); | 1465 root_window()->RemovePreTargetHandler(&repost_event_recorder); |
1471 } | 1466 } |
1472 | 1467 |
1473 class OnMouseExitDeletingEventFilter : public EventFilterRecorder { | 1468 class OnMouseExitDeletingEventFilter : public EventFilterRecorder { |
1474 public: | 1469 public: |
1475 OnMouseExitDeletingEventFilter() : window_to_delete_(NULL) {} | 1470 OnMouseExitDeletingEventFilter() : window_to_delete_(NULL) {} |
1476 virtual ~OnMouseExitDeletingEventFilter() {} | 1471 ~OnMouseExitDeletingEventFilter() override {} |
1477 | 1472 |
1478 void set_window_to_delete(Window* window_to_delete) { | 1473 void set_window_to_delete(Window* window_to_delete) { |
1479 window_to_delete_ = window_to_delete; | 1474 window_to_delete_ = window_to_delete; |
1480 } | 1475 } |
1481 | 1476 |
1482 private: | 1477 private: |
1483 // Overridden from ui::EventHandler: | 1478 // Overridden from ui::EventHandler: |
1484 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1479 void OnMouseEvent(ui::MouseEvent* event) override { |
1485 EventFilterRecorder::OnMouseEvent(event); | 1480 EventFilterRecorder::OnMouseEvent(event); |
1486 if (window_to_delete_) { | 1481 if (window_to_delete_) { |
1487 delete window_to_delete_; | 1482 delete window_to_delete_; |
1488 window_to_delete_ = NULL; | 1483 window_to_delete_ = NULL; |
1489 } | 1484 } |
1490 } | 1485 } |
1491 | 1486 |
1492 Window* window_to_delete_; | 1487 Window* window_to_delete_; |
1493 | 1488 |
1494 DISALLOW_COPY_AND_ASSIGN(OnMouseExitDeletingEventFilter); | 1489 DISALLOW_COPY_AND_ASSIGN(OnMouseExitDeletingEventFilter); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 // RootWindow at such time. | 1535 // RootWindow at such time. |
1541 class ValidRootDuringDestructionWindowObserver : public aura::WindowObserver { | 1536 class ValidRootDuringDestructionWindowObserver : public aura::WindowObserver { |
1542 public: | 1537 public: |
1543 ValidRootDuringDestructionWindowObserver(bool* got_destroying, | 1538 ValidRootDuringDestructionWindowObserver(bool* got_destroying, |
1544 bool* has_valid_root) | 1539 bool* has_valid_root) |
1545 : got_destroying_(got_destroying), | 1540 : got_destroying_(got_destroying), |
1546 has_valid_root_(has_valid_root) { | 1541 has_valid_root_(has_valid_root) { |
1547 } | 1542 } |
1548 | 1543 |
1549 // WindowObserver: | 1544 // WindowObserver: |
1550 virtual void OnWindowDestroying(aura::Window* window) override { | 1545 void OnWindowDestroying(aura::Window* window) override { |
1551 *got_destroying_ = true; | 1546 *got_destroying_ = true; |
1552 *has_valid_root_ = (window->GetRootWindow() != NULL); | 1547 *has_valid_root_ = (window->GetRootWindow() != NULL); |
1553 } | 1548 } |
1554 | 1549 |
1555 private: | 1550 private: |
1556 bool* got_destroying_; | 1551 bool* got_destroying_; |
1557 bool* has_valid_root_; | 1552 bool* has_valid_root_; |
1558 | 1553 |
1559 DISALLOW_COPY_AND_ASSIGN(ValidRootDuringDestructionWindowObserver); | 1554 DISALLOW_COPY_AND_ASSIGN(ValidRootDuringDestructionWindowObserver); |
1560 }; | 1555 }; |
(...skipping 19 matching lines...) Expand all Loading... |
1580 } | 1575 } |
1581 | 1576 |
1582 namespace { | 1577 namespace { |
1583 | 1578 |
1584 // See description above DontResetHeldEvent for details. | 1579 // See description above DontResetHeldEvent for details. |
1585 class DontResetHeldEventWindowDelegate : public test::TestWindowDelegate { | 1580 class DontResetHeldEventWindowDelegate : public test::TestWindowDelegate { |
1586 public: | 1581 public: |
1587 explicit DontResetHeldEventWindowDelegate(aura::Window* root) | 1582 explicit DontResetHeldEventWindowDelegate(aura::Window* root) |
1588 : root_(root), | 1583 : root_(root), |
1589 mouse_event_count_(0) {} | 1584 mouse_event_count_(0) {} |
1590 virtual ~DontResetHeldEventWindowDelegate() {} | 1585 ~DontResetHeldEventWindowDelegate() override {} |
1591 | 1586 |
1592 int mouse_event_count() const { return mouse_event_count_; } | 1587 int mouse_event_count() const { return mouse_event_count_; } |
1593 | 1588 |
1594 // TestWindowDelegate: | 1589 // TestWindowDelegate: |
1595 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1590 void OnMouseEvent(ui::MouseEvent* event) override { |
1596 if ((event->flags() & ui::EF_SHIFT_DOWN) != 0 && | 1591 if ((event->flags() & ui::EF_SHIFT_DOWN) != 0 && |
1597 mouse_event_count_++ == 0) { | 1592 mouse_event_count_++ == 0) { |
1598 ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, | 1593 ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, |
1599 gfx::Point(10, 10), gfx::Point(10, 10), | 1594 gfx::Point(10, 10), gfx::Point(10, 10), |
1600 ui::EF_SHIFT_DOWN, 0); | 1595 ui::EF_SHIFT_DOWN, 0); |
1601 root_->GetHost()->dispatcher()->RepostEvent(mouse_event); | 1596 root_->GetHost()->dispatcher()->RepostEvent(mouse_event); |
1602 } | 1597 } |
1603 } | 1598 } |
1604 | 1599 |
1605 private: | 1600 private: |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1640 | 1635 |
1641 // See description above DeleteHostFromHeldMouseEvent for details. | 1636 // See description above DeleteHostFromHeldMouseEvent for details. |
1642 class DeleteHostFromHeldMouseEventDelegate | 1637 class DeleteHostFromHeldMouseEventDelegate |
1643 : public test::TestWindowDelegate { | 1638 : public test::TestWindowDelegate { |
1644 public: | 1639 public: |
1645 explicit DeleteHostFromHeldMouseEventDelegate(WindowTreeHost* host) | 1640 explicit DeleteHostFromHeldMouseEventDelegate(WindowTreeHost* host) |
1646 : host_(host), | 1641 : host_(host), |
1647 got_mouse_event_(false), | 1642 got_mouse_event_(false), |
1648 got_destroy_(false) { | 1643 got_destroy_(false) { |
1649 } | 1644 } |
1650 virtual ~DeleteHostFromHeldMouseEventDelegate() {} | 1645 ~DeleteHostFromHeldMouseEventDelegate() override {} |
1651 | 1646 |
1652 bool got_mouse_event() const { return got_mouse_event_; } | 1647 bool got_mouse_event() const { return got_mouse_event_; } |
1653 bool got_destroy() const { return got_destroy_; } | 1648 bool got_destroy() const { return got_destroy_; } |
1654 | 1649 |
1655 // TestWindowDelegate: | 1650 // TestWindowDelegate: |
1656 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1651 void OnMouseEvent(ui::MouseEvent* event) override { |
1657 if ((event->flags() & ui::EF_SHIFT_DOWN) != 0) { | 1652 if ((event->flags() & ui::EF_SHIFT_DOWN) != 0) { |
1658 got_mouse_event_ = true; | 1653 got_mouse_event_ = true; |
1659 delete host_; | 1654 delete host_; |
1660 } | 1655 } |
1661 } | 1656 } |
1662 virtual void OnWindowDestroyed(Window* window) override { | 1657 void OnWindowDestroyed(Window* window) override { got_destroy_ = true; } |
1663 got_destroy_ = true; | |
1664 } | |
1665 | 1658 |
1666 private: | 1659 private: |
1667 WindowTreeHost* host_; | 1660 WindowTreeHost* host_; |
1668 bool got_mouse_event_; | 1661 bool got_mouse_event_; |
1669 bool got_destroy_; | 1662 bool got_destroy_; |
1670 | 1663 |
1671 DISALLOW_COPY_AND_ASSIGN(DeleteHostFromHeldMouseEventDelegate); | 1664 DISALLOW_COPY_AND_ASSIGN(DeleteHostFromHeldMouseEventDelegate); |
1672 }; | 1665 }; |
1673 | 1666 |
1674 } // namespace | 1667 } // namespace |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1805 EXPECT_TRUE(recorder2.events().empty()); | 1798 EXPECT_TRUE(recorder2.events().empty()); |
1806 } | 1799 } |
1807 | 1800 |
1808 namespace { | 1801 namespace { |
1809 | 1802 |
1810 // This class creates and manages a window which is destroyed as soon as | 1803 // This class creates and manages a window which is destroyed as soon as |
1811 // capture is lost. This is the case for the drag and drop capture window. | 1804 // capture is lost. This is the case for the drag and drop capture window. |
1812 class CaptureWindowTracker : public test::TestWindowDelegate { | 1805 class CaptureWindowTracker : public test::TestWindowDelegate { |
1813 public: | 1806 public: |
1814 CaptureWindowTracker() {} | 1807 CaptureWindowTracker() {} |
1815 virtual ~CaptureWindowTracker() {} | 1808 ~CaptureWindowTracker() override {} |
1816 | 1809 |
1817 void CreateCaptureWindow(aura::Window* root_window) { | 1810 void CreateCaptureWindow(aura::Window* root_window) { |
1818 capture_window_.reset(test::CreateTestWindowWithDelegate( | 1811 capture_window_.reset(test::CreateTestWindowWithDelegate( |
1819 this, -1234, gfx::Rect(20, 20, 20, 20), root_window)); | 1812 this, -1234, gfx::Rect(20, 20, 20, 20), root_window)); |
1820 capture_window_->SetCapture(); | 1813 capture_window_->SetCapture(); |
1821 } | 1814 } |
1822 | 1815 |
1823 void reset() { | 1816 void reset() { |
1824 capture_window_.reset(); | 1817 capture_window_.reset(); |
1825 } | 1818 } |
1826 | 1819 |
1827 virtual void OnCaptureLost() override { | 1820 void OnCaptureLost() override { capture_window_.reset(); } |
1828 capture_window_.reset(); | |
1829 } | |
1830 | 1821 |
1831 virtual void OnWindowDestroyed(Window* window) override { | 1822 void OnWindowDestroyed(Window* window) override { |
1832 TestWindowDelegate::OnWindowDestroyed(window); | 1823 TestWindowDelegate::OnWindowDestroyed(window); |
1833 capture_window_.reset(); | 1824 capture_window_.reset(); |
1834 } | 1825 } |
1835 | 1826 |
1836 aura::Window* capture_window() { return capture_window_.get(); } | 1827 aura::Window* capture_window() { return capture_window_.get(); } |
1837 | 1828 |
1838 private: | 1829 private: |
1839 scoped_ptr<aura::Window> capture_window_; | 1830 scoped_ptr<aura::Window> capture_window_; |
1840 | 1831 |
1841 DISALLOW_COPY_AND_ASSIGN(CaptureWindowTracker); | 1832 DISALLOW_COPY_AND_ASSIGN(CaptureWindowTracker); |
(...skipping 13 matching lines...) Expand all Loading... |
1855 TEST_F(WindowEventDispatcherTest, CaptureWindowDestroyed) { | 1846 TEST_F(WindowEventDispatcherTest, CaptureWindowDestroyed) { |
1856 CaptureWindowTracker capture_window_tracker; | 1847 CaptureWindowTracker capture_window_tracker; |
1857 capture_window_tracker.CreateCaptureWindow(root_window()); | 1848 capture_window_tracker.CreateCaptureWindow(root_window()); |
1858 capture_window_tracker.reset(); | 1849 capture_window_tracker.reset(); |
1859 EXPECT_EQ(NULL, capture_window_tracker.capture_window()); | 1850 EXPECT_EQ(NULL, capture_window_tracker.capture_window()); |
1860 } | 1851 } |
1861 | 1852 |
1862 class ExitMessageLoopOnMousePress : public ui::test::TestEventHandler { | 1853 class ExitMessageLoopOnMousePress : public ui::test::TestEventHandler { |
1863 public: | 1854 public: |
1864 ExitMessageLoopOnMousePress() {} | 1855 ExitMessageLoopOnMousePress() {} |
1865 virtual ~ExitMessageLoopOnMousePress() {} | 1856 ~ExitMessageLoopOnMousePress() override {} |
1866 | 1857 |
1867 protected: | 1858 protected: |
1868 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 1859 void OnMouseEvent(ui::MouseEvent* event) override { |
1869 ui::test::TestEventHandler::OnMouseEvent(event); | 1860 ui::test::TestEventHandler::OnMouseEvent(event); |
1870 if (event->type() == ui::ET_MOUSE_PRESSED) | 1861 if (event->type() == ui::ET_MOUSE_PRESSED) |
1871 base::MessageLoopForUI::current()->Quit(); | 1862 base::MessageLoopForUI::current()->Quit(); |
1872 } | 1863 } |
1873 | 1864 |
1874 private: | 1865 private: |
1875 DISALLOW_COPY_AND_ASSIGN(ExitMessageLoopOnMousePress); | 1866 DISALLOW_COPY_AND_ASSIGN(ExitMessageLoopOnMousePress); |
1876 }; | 1867 }; |
1877 | 1868 |
1878 class WindowEventDispatcherTestWithMessageLoop | 1869 class WindowEventDispatcherTestWithMessageLoop |
1879 : public WindowEventDispatcherTest { | 1870 : public WindowEventDispatcherTest { |
1880 public: | 1871 public: |
1881 WindowEventDispatcherTestWithMessageLoop() {} | 1872 WindowEventDispatcherTestWithMessageLoop() {} |
1882 virtual ~WindowEventDispatcherTestWithMessageLoop() {} | 1873 ~WindowEventDispatcherTestWithMessageLoop() override {} |
1883 | 1874 |
1884 void RunTest() { | 1875 void RunTest() { |
1885 // Reset any event the window may have received when bringing up the window | 1876 // Reset any event the window may have received when bringing up the window |
1886 // (e.g. mouse-move events if the mouse cursor is over the window). | 1877 // (e.g. mouse-move events if the mouse cursor is over the window). |
1887 handler_.Reset(); | 1878 handler_.Reset(); |
1888 | 1879 |
1889 // Start a nested message-loop, post an event to be dispatched, and then | 1880 // Start a nested message-loop, post an event to be dispatched, and then |
1890 // terminate the message-loop. When the message-loop unwinds and gets back, | 1881 // terminate the message-loop. When the message-loop unwinds and gets back, |
1891 // the reposted event should not have fired. | 1882 // the reposted event should not have fired. |
1892 scoped_ptr<ui::MouseEvent> mouse(new ui::MouseEvent(ui::ET_MOUSE_PRESSED, | 1883 scoped_ptr<ui::MouseEvent> mouse(new ui::MouseEvent(ui::ET_MOUSE_PRESSED, |
(...skipping 15 matching lines...) Expand all Loading... |
1908 | 1899 |
1909 // Let the current message-loop run. The event-handler will terminate the | 1900 // Let the current message-loop run. The event-handler will terminate the |
1910 // message-loop when it receives the reposted event. | 1901 // message-loop when it receives the reposted event. |
1911 } | 1902 } |
1912 | 1903 |
1913 base::MessageLoop* message_loop() { | 1904 base::MessageLoop* message_loop() { |
1914 return base::MessageLoopForUI::current(); | 1905 return base::MessageLoopForUI::current(); |
1915 } | 1906 } |
1916 | 1907 |
1917 protected: | 1908 protected: |
1918 virtual void SetUp() override { | 1909 void SetUp() override { |
1919 WindowEventDispatcherTest::SetUp(); | 1910 WindowEventDispatcherTest::SetUp(); |
1920 window_.reset(CreateNormalWindow(1, root_window(), NULL)); | 1911 window_.reset(CreateNormalWindow(1, root_window(), NULL)); |
1921 window_->AddPreTargetHandler(&handler_); | 1912 window_->AddPreTargetHandler(&handler_); |
1922 } | 1913 } |
1923 | 1914 |
1924 virtual void TearDown() override { | 1915 void TearDown() override { |
1925 window_.reset(); | 1916 window_.reset(); |
1926 WindowEventDispatcherTest::TearDown(); | 1917 WindowEventDispatcherTest::TearDown(); |
1927 } | 1918 } |
1928 | 1919 |
1929 private: | 1920 private: |
1930 // Used to avoid a copying |event| when binding to a closure. | 1921 // Used to avoid a copying |event| when binding to a closure. |
1931 static void RepostEventHelper(WindowEventDispatcher* dispatcher, | 1922 static void RepostEventHelper(WindowEventDispatcher* dispatcher, |
1932 scoped_ptr<ui::MouseEvent> event) { | 1923 scoped_ptr<ui::MouseEvent> event) { |
1933 dispatcher->RepostEvent(*event); | 1924 dispatcher->RepostEvent(*event); |
1934 } | 1925 } |
(...skipping 11 matching lines...) Expand all Loading... |
1946 message_loop()->PostTask( | 1937 message_loop()->PostTask( |
1947 FROM_HERE, base::Bind( | 1938 FROM_HERE, base::Bind( |
1948 &WindowEventDispatcherTestWithMessageLoop::RunTest, | 1939 &WindowEventDispatcherTestWithMessageLoop::RunTest, |
1949 base::Unretained(this))); | 1940 base::Unretained(this))); |
1950 message_loop()->Run(); | 1941 message_loop()->Run(); |
1951 } | 1942 } |
1952 | 1943 |
1953 class WindowEventDispatcherTestInHighDPI : public WindowEventDispatcherTest { | 1944 class WindowEventDispatcherTestInHighDPI : public WindowEventDispatcherTest { |
1954 public: | 1945 public: |
1955 WindowEventDispatcherTestInHighDPI() {} | 1946 WindowEventDispatcherTestInHighDPI() {} |
1956 virtual ~WindowEventDispatcherTestInHighDPI() {} | 1947 ~WindowEventDispatcherTestInHighDPI() override {} |
1957 | 1948 |
1958 protected: | 1949 protected: |
1959 virtual void SetUp() override { | 1950 void SetUp() override { |
1960 WindowEventDispatcherTest::SetUp(); | 1951 WindowEventDispatcherTest::SetUp(); |
1961 test_screen()->SetDeviceScaleFactor(2.f); | 1952 test_screen()->SetDeviceScaleFactor(2.f); |
1962 } | 1953 } |
1963 }; | 1954 }; |
1964 | 1955 |
1965 TEST_F(WindowEventDispatcherTestInHighDPI, EventLocationTransform) { | 1956 TEST_F(WindowEventDispatcherTestInHighDPI, EventLocationTransform) { |
1966 test::TestWindowDelegate delegate; | 1957 test::TestWindowDelegate delegate; |
1967 scoped_ptr<aura::Window> child(test::CreateTestWindowWithDelegate(&delegate, | 1958 scoped_ptr<aura::Window> child(test::CreateTestWindowWithDelegate(&delegate, |
1968 1234, gfx::Rect(20, 20, 100, 100), root_window())); | 1959 1234, gfx::Rect(20, 20, 100, 100), root_window())); |
1969 child->Show(); | 1960 child->Show(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2025 ASSERT_EQ(2u, recorder.touch_locations().size()); | 2016 ASSERT_EQ(2u, recorder.touch_locations().size()); |
2026 EXPECT_EQ(gfx::Point(-40, 10).ToString(), | 2017 EXPECT_EQ(gfx::Point(-40, 10).ToString(), |
2027 recorder.touch_locations()[0].ToString()); | 2018 recorder.touch_locations()[0].ToString()); |
2028 EXPECT_EQ(gfx::Point(-40, 10).ToString(), | 2019 EXPECT_EQ(gfx::Point(-40, 10).ToString(), |
2029 recorder.touch_locations()[1].ToString()); | 2020 recorder.touch_locations()[1].ToString()); |
2030 } | 2021 } |
2031 | 2022 |
2032 class SelfDestructDelegate : public test::TestWindowDelegate { | 2023 class SelfDestructDelegate : public test::TestWindowDelegate { |
2033 public: | 2024 public: |
2034 SelfDestructDelegate() {} | 2025 SelfDestructDelegate() {} |
2035 virtual ~SelfDestructDelegate() {} | 2026 ~SelfDestructDelegate() override {} |
2036 | 2027 |
2037 virtual void OnMouseEvent(ui::MouseEvent* event) override { | 2028 void OnMouseEvent(ui::MouseEvent* event) override { window_.reset(); } |
2038 window_.reset(); | |
2039 } | |
2040 | 2029 |
2041 void set_window(scoped_ptr<aura::Window> window) { | 2030 void set_window(scoped_ptr<aura::Window> window) { |
2042 window_ = window.Pass(); | 2031 window_ = window.Pass(); |
2043 } | 2032 } |
2044 bool has_window() const { return !!window_.get(); } | 2033 bool has_window() const { return !!window_.get(); } |
2045 | 2034 |
2046 private: | 2035 private: |
2047 scoped_ptr<aura::Window> window_; | 2036 scoped_ptr<aura::Window> window_; |
2048 DISALLOW_COPY_AND_ASSIGN(SelfDestructDelegate); | 2037 DISALLOW_COPY_AND_ASSIGN(SelfDestructDelegate); |
2049 }; | 2038 }; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2098 | 2087 |
2099 client::CaptureDelegate* capture_delegate = host()->dispatcher(); | 2088 client::CaptureDelegate* capture_delegate = host()->dispatcher(); |
2100 capture_delegate->UpdateCapture(window_first_raw, window_second.get()); | 2089 capture_delegate->UpdateCapture(window_first_raw, window_second.get()); |
2101 EXPECT_FALSE(delegate.has_window()); | 2090 EXPECT_FALSE(delegate.has_window()); |
2102 } | 2091 } |
2103 | 2092 |
2104 class StaticFocusClient : public client::FocusClient { | 2093 class StaticFocusClient : public client::FocusClient { |
2105 public: | 2094 public: |
2106 explicit StaticFocusClient(Window* focused) | 2095 explicit StaticFocusClient(Window* focused) |
2107 : focused_(focused) {} | 2096 : focused_(focused) {} |
2108 virtual ~StaticFocusClient() {} | 2097 ~StaticFocusClient() override {} |
2109 | 2098 |
2110 private: | 2099 private: |
2111 // client::FocusClient: | 2100 // client::FocusClient: |
2112 virtual void AddObserver(client::FocusChangeObserver* observer) override {} | 2101 void AddObserver(client::FocusChangeObserver* observer) override {} |
2113 virtual void RemoveObserver(client::FocusChangeObserver* observer) override {} | 2102 void RemoveObserver(client::FocusChangeObserver* observer) override {} |
2114 virtual void FocusWindow(Window* window) override {} | 2103 void FocusWindow(Window* window) override {} |
2115 virtual void ResetFocusWithinActiveWindow(Window* window) override {} | 2104 void ResetFocusWithinActiveWindow(Window* window) override {} |
2116 virtual Window* GetFocusedWindow() override { return focused_; } | 2105 Window* GetFocusedWindow() override { return focused_; } |
2117 | 2106 |
2118 Window* focused_; | 2107 Window* focused_; |
2119 | 2108 |
2120 DISALLOW_COPY_AND_ASSIGN(StaticFocusClient); | 2109 DISALLOW_COPY_AND_ASSIGN(StaticFocusClient); |
2121 }; | 2110 }; |
2122 | 2111 |
2123 // Tests that host-cancel-mode event can be dispatched to a dispatcher safely | 2112 // Tests that host-cancel-mode event can be dispatched to a dispatcher safely |
2124 // when the focused window does not live in the dispatcher's tree. | 2113 // when the focused window does not live in the dispatcher's tree. |
2125 TEST_F(WindowEventDispatcherTest, HostCancelModeWithFocusedWindowOutside) { | 2114 TEST_F(WindowEventDispatcherTest, HostCancelModeWithFocusedWindowOutside) { |
2126 test::TestWindowDelegate delegate; | 2115 test::TestWindowDelegate delegate; |
2127 scoped_ptr<Window> focused(CreateTestWindowWithDelegate(&delegate, 123, | 2116 scoped_ptr<Window> focused(CreateTestWindowWithDelegate(&delegate, 123, |
2128 gfx::Rect(20, 30, 100, 50), NULL)); | 2117 gfx::Rect(20, 30, 100, 50), NULL)); |
2129 StaticFocusClient focus_client(focused.get()); | 2118 StaticFocusClient focus_client(focused.get()); |
2130 client::SetFocusClient(root_window(), &focus_client); | 2119 client::SetFocusClient(root_window(), &focus_client); |
2131 EXPECT_FALSE(root_window()->Contains(focused.get())); | 2120 EXPECT_FALSE(root_window()->Contains(focused.get())); |
2132 EXPECT_EQ(focused.get(), | 2121 EXPECT_EQ(focused.get(), |
2133 client::GetFocusClient(root_window())->GetFocusedWindow()); | 2122 client::GetFocusClient(root_window())->GetFocusedWindow()); |
2134 host()->dispatcher()->DispatchCancelModeEvent(); | 2123 host()->dispatcher()->DispatchCancelModeEvent(); |
2135 EXPECT_EQ(focused.get(), | 2124 EXPECT_EQ(focused.get(), |
2136 client::GetFocusClient(root_window())->GetFocusedWindow()); | 2125 client::GetFocusClient(root_window())->GetFocusedWindow()); |
2137 } | 2126 } |
2138 | 2127 |
2139 // Dispatches a mouse-move event to |target| when it receives a mouse-move | 2128 // Dispatches a mouse-move event to |target| when it receives a mouse-move |
2140 // event. | 2129 // event. |
2141 class DispatchEventHandler : public ui::EventHandler { | 2130 class DispatchEventHandler : public ui::EventHandler { |
2142 public: | 2131 public: |
2143 explicit DispatchEventHandler(Window* target) | 2132 explicit DispatchEventHandler(Window* target) |
2144 : target_(target), | 2133 : target_(target), |
2145 dispatched_(false) {} | 2134 dispatched_(false) {} |
2146 virtual ~DispatchEventHandler() {} | 2135 ~DispatchEventHandler() override {} |
2147 | 2136 |
2148 bool dispatched() const { return dispatched_; } | 2137 bool dispatched() const { return dispatched_; } |
2149 private: | 2138 private: |
2150 // ui::EventHandler: | 2139 // ui::EventHandler: |
2151 virtual void OnMouseEvent(ui::MouseEvent* mouse) override { | 2140 void OnMouseEvent(ui::MouseEvent* mouse) override { |
2152 if (mouse->type() == ui::ET_MOUSE_MOVED) { | 2141 if (mouse->type() == ui::ET_MOUSE_MOVED) { |
2153 ui::MouseEvent move(ui::ET_MOUSE_MOVED, target_->bounds().CenterPoint(), | 2142 ui::MouseEvent move(ui::ET_MOUSE_MOVED, target_->bounds().CenterPoint(), |
2154 target_->bounds().CenterPoint(), ui::EF_NONE, ui::EF_NONE); | 2143 target_->bounds().CenterPoint(), ui::EF_NONE, ui::EF_NONE); |
2155 ui::EventDispatchDetails details = | 2144 ui::EventDispatchDetails details = |
2156 target_->GetHost()->dispatcher()->OnEventFromSource(&move); | 2145 target_->GetHost()->dispatcher()->OnEventFromSource(&move); |
2157 ASSERT_FALSE(details.dispatcher_destroyed); | 2146 ASSERT_FALSE(details.dispatcher_destroyed); |
2158 EXPECT_FALSE(details.target_destroyed); | 2147 EXPECT_FALSE(details.target_destroyed); |
2159 EXPECT_EQ(target_, move.target()); | 2148 EXPECT_EQ(target_, move.target()); |
2160 dispatched_ = true; | 2149 dispatched_ = true; |
2161 } | 2150 } |
2162 ui::EventHandler::OnMouseEvent(mouse); | 2151 ui::EventHandler::OnMouseEvent(mouse); |
2163 } | 2152 } |
2164 | 2153 |
2165 Window* target_; | 2154 Window* target_; |
2166 bool dispatched_; | 2155 bool dispatched_; |
2167 | 2156 |
2168 DISALLOW_COPY_AND_ASSIGN(DispatchEventHandler); | 2157 DISALLOW_COPY_AND_ASSIGN(DispatchEventHandler); |
2169 }; | 2158 }; |
2170 | 2159 |
2171 // Moves |window| to |root_window| when it receives a mouse-move event. | 2160 // Moves |window| to |root_window| when it receives a mouse-move event. |
2172 class MoveWindowHandler : public ui::EventHandler { | 2161 class MoveWindowHandler : public ui::EventHandler { |
2173 public: | 2162 public: |
2174 MoveWindowHandler(Window* window, Window* root_window) | 2163 MoveWindowHandler(Window* window, Window* root_window) |
2175 : window_to_move_(window), | 2164 : window_to_move_(window), |
2176 root_window_to_move_to_(root_window) {} | 2165 root_window_to_move_to_(root_window) {} |
2177 virtual ~MoveWindowHandler() {} | 2166 ~MoveWindowHandler() override {} |
2178 | 2167 |
2179 private: | 2168 private: |
2180 // ui::EventHandler: | 2169 // ui::EventHandler: |
2181 virtual void OnMouseEvent(ui::MouseEvent* mouse) override { | 2170 void OnMouseEvent(ui::MouseEvent* mouse) override { |
2182 if (mouse->type() == ui::ET_MOUSE_MOVED) { | 2171 if (mouse->type() == ui::ET_MOUSE_MOVED) { |
2183 root_window_to_move_to_->AddChild(window_to_move_); | 2172 root_window_to_move_to_->AddChild(window_to_move_); |
2184 } | 2173 } |
2185 ui::EventHandler::OnMouseEvent(mouse); | 2174 ui::EventHandler::OnMouseEvent(mouse); |
2186 } | 2175 } |
2187 | 2176 |
2188 Window* window_to_move_; | 2177 Window* window_to_move_; |
2189 Window* root_window_to_move_to_; | 2178 Window* root_window_to_move_to_; |
2190 | 2179 |
2191 DISALLOW_COPY_AND_ASSIGN(MoveWindowHandler); | 2180 DISALLOW_COPY_AND_ASSIGN(MoveWindowHandler); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2233 EXPECT_TRUE(dispatch_event.dispatched()); | 2222 EXPECT_TRUE(dispatch_event.dispatched()); |
2234 EXPECT_EQ(second_root, first->GetRootWindow()); | 2223 EXPECT_EQ(second_root, first->GetRootWindow()); |
2235 | 2224 |
2236 first->RemovePreTargetHandler(&dispatch_event); | 2225 first->RemovePreTargetHandler(&dispatch_event); |
2237 second->RemovePreTargetHandler(&move_window); | 2226 second->RemovePreTargetHandler(&move_window); |
2238 } | 2227 } |
2239 | 2228 |
2240 class AlwaysMouseDownInputStateLookup : public InputStateLookup { | 2229 class AlwaysMouseDownInputStateLookup : public InputStateLookup { |
2241 public: | 2230 public: |
2242 AlwaysMouseDownInputStateLookup() {} | 2231 AlwaysMouseDownInputStateLookup() {} |
2243 virtual ~AlwaysMouseDownInputStateLookup() {} | 2232 ~AlwaysMouseDownInputStateLookup() override {} |
2244 | 2233 |
2245 private: | 2234 private: |
2246 // InputStateLookup: | 2235 // InputStateLookup: |
2247 virtual bool IsMouseButtonDown() const override { return true; } | 2236 bool IsMouseButtonDown() const override { return true; } |
2248 | 2237 |
2249 DISALLOW_COPY_AND_ASSIGN(AlwaysMouseDownInputStateLookup); | 2238 DISALLOW_COPY_AND_ASSIGN(AlwaysMouseDownInputStateLookup); |
2250 }; | 2239 }; |
2251 | 2240 |
2252 TEST_F(WindowEventDispatcherTest, | 2241 TEST_F(WindowEventDispatcherTest, |
2253 CursorVisibilityChangedWhileCaptureWindowInAnotherDispatcher) { | 2242 CursorVisibilityChangedWhileCaptureWindowInAnotherDispatcher) { |
2254 test::EventCountDelegate delegate; | 2243 test::EventCountDelegate delegate; |
2255 scoped_ptr<Window> window(CreateTestWindowWithDelegate(&delegate, 123, | 2244 scoped_ptr<Window> window(CreateTestWindowWithDelegate(&delegate, 123, |
2256 gfx::Rect(20, 10, 10, 20), root_window())); | 2245 gfx::Rect(20, 10, 10, 20), root_window())); |
2257 window->Show(); | 2246 window->Show(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2334 | 2323 |
2335 class AsyncWindowDelegate : public test::TestWindowDelegate { | 2324 class AsyncWindowDelegate : public test::TestWindowDelegate { |
2336 public: | 2325 public: |
2337 AsyncWindowDelegate(WindowEventDispatcher* dispatcher) | 2326 AsyncWindowDelegate(WindowEventDispatcher* dispatcher) |
2338 : dispatcher_(dispatcher) {} | 2327 : dispatcher_(dispatcher) {} |
2339 | 2328 |
2340 void set_window(Window* window) { | 2329 void set_window(Window* window) { |
2341 window_ = window; | 2330 window_ = window; |
2342 } | 2331 } |
2343 private: | 2332 private: |
2344 virtual void OnTouchEvent(ui::TouchEvent* event) override { | 2333 void OnTouchEvent(ui::TouchEvent* event) override { |
2345 // Convert touch event back to root window coordinates. | 2334 // Convert touch event back to root window coordinates. |
2346 event->ConvertLocationToTarget(window_, window_->GetRootWindow()); | 2335 event->ConvertLocationToTarget(window_, window_->GetRootWindow()); |
2347 dispatcher_->ProcessedTouchEvent(event, window_, ui::ER_UNHANDLED); | 2336 dispatcher_->ProcessedTouchEvent(event, window_, ui::ER_UNHANDLED); |
2348 event->StopPropagation(); | 2337 event->StopPropagation(); |
2349 } | 2338 } |
2350 | 2339 |
2351 WindowEventDispatcher* dispatcher_; | 2340 WindowEventDispatcher* dispatcher_; |
2352 Window* window_; | 2341 Window* window_; |
2353 | 2342 |
2354 DISALLOW_COPY_AND_ASSIGN(AsyncWindowDelegate); | 2343 DISALLOW_COPY_AND_ASSIGN(AsyncWindowDelegate); |
(...skipping 27 matching lines...) Expand all Loading... |
2382 ASSERT_EQ(1u, recorder.touch_locations().size()); | 2371 ASSERT_EQ(1u, recorder.touch_locations().size()); |
2383 EXPECT_EQ(gfx::Point(kX - kWindowOffset, kY - kWindowOffset).ToString(), | 2372 EXPECT_EQ(gfx::Point(kX - kWindowOffset, kY - kWindowOffset).ToString(), |
2384 recorder.touch_locations()[0].ToString()); | 2373 recorder.touch_locations()[0].ToString()); |
2385 | 2374 |
2386 ASSERT_EQ(2u, recorder.gesture_locations().size()); | 2375 ASSERT_EQ(2u, recorder.gesture_locations().size()); |
2387 EXPECT_EQ(gfx::Point(kX - kWindowOffset, kY - kWindowOffset).ToString(), | 2376 EXPECT_EQ(gfx::Point(kX - kWindowOffset, kY - kWindowOffset).ToString(), |
2388 recorder.gesture_locations()[0].ToString()); | 2377 recorder.gesture_locations()[0].ToString()); |
2389 } | 2378 } |
2390 | 2379 |
2391 } // namespace aura | 2380 } // namespace aura |
OLD | NEW |