OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/views/mus/native_widget_mus.h" | 5 #include "ui/views/mus/native_widget_mus.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "components/mus/public/cpp/property_type_converters.h" | 9 #include "components/mus/public/cpp/property_type_converters.h" |
10 #include "components/mus/public/cpp/tests/window_tree_client_impl_private.h" | 10 #include "components/mus/public/cpp/tests/window_tree_client_impl_private.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
134 void GetWidgetHitTestMask(gfx::Path* mask) const override { | 134 void GetWidgetHitTestMask(gfx::Path* mask) const override { |
135 mask->addRect(gfx::RectToSkRect(mask_rect_)); | 135 mask->addRect(gfx::RectToSkRect(mask_rect_)); |
136 } | 136 } |
137 | 137 |
138 private: | 138 private: |
139 gfx::Rect mask_rect_; | 139 gfx::Rect mask_rect_; |
140 | 140 |
141 DISALLOW_COPY_AND_ASSIGN(WidgetDelegateWithHitTestMask); | 141 DISALLOW_COPY_AND_ASSIGN(WidgetDelegateWithHitTestMask); |
142 }; | 142 }; |
143 | 143 |
144 class UIMouseEventHandler : public ui::test::TestEventHandler { | |
145 public: | |
146 explicit UIMouseEventHandler(ui::PointerDetails* pointer_details) | |
147 : pointer_details_(pointer_details), event_received_(false) {} | |
148 ~UIMouseEventHandler() override {} | |
149 | |
150 void OnMouseEvent(ui::MouseEvent* event) override { | |
151 *pointer_details_ = event->pointer_details(); | |
152 set_event_received(); | |
153 } | |
154 | |
155 bool event_received() { return event_received_; } | |
156 | |
157 private: | |
158 void set_event_received() { event_received_ = true; } | |
159 | |
160 ui::PointerDetails* pointer_details_; | |
161 bool event_received_; | |
162 | |
163 DISALLOW_COPY_AND_ASSIGN(UIMouseEventHandler); | |
164 }; | |
165 | |
166 class MusMouseEventHandler : public mus::InputEventHandler { | |
167 public: | |
168 explicit MusMouseEventHandler(ui::PointerDetails* pointer_details, | |
169 mus::Window* window) | |
170 : pointer_details_(pointer_details), window_(window), | |
171 event_received_(false) { | |
172 delegate_ = window->input_event_handler(); | |
173 window->set_input_event_handler(this); | |
174 } | |
175 ~MusMouseEventHandler() override { | |
176 window_->set_input_event_handler(delegate_); | |
177 } | |
178 | |
179 bool event_received() { return event_received_; } | |
180 | |
181 private: | |
182 void set_event_received() { event_received_ = true; } | |
183 | |
184 // InputEventHandler: | |
185 void OnWindowInputEvent( | |
186 mus::Window* target, | |
187 const ui::Event& event, | |
188 std::unique_ptr<base::Callback<void(EventResult)>>* ack_callback) | |
189 override { | |
190 DCHECK(event.IsMouseEvent()); | |
191 *pointer_details_ = event.AsMouseEvent()->pointer_details(); | |
192 set_event_received(); | |
193 if (delegate_) | |
194 delegate_->OnWindowInputEvent(target, event, ack_callback); | |
195 } | |
196 | |
197 ui::PointerDetails* pointer_details_; | |
198 mus::Window* window_; | |
199 bool event_received_; | |
200 mus::InputEventHandler* delegate_; | |
201 | |
202 DISALLOW_COPY_AND_ASSIGN(MusMouseEventHandler); | |
203 }; | |
204 | |
144 } // namespace | 205 } // namespace |
145 | 206 |
146 class NativeWidgetMusTest : public ViewsTestBase { | 207 class NativeWidgetMusTest : public ViewsTestBase { |
147 public: | 208 public: |
148 NativeWidgetMusTest() {} | 209 NativeWidgetMusTest() {} |
149 ~NativeWidgetMusTest() override {} | 210 ~NativeWidgetMusTest() override {} |
150 | 211 |
151 // Creates a test widget. Takes ownership of |delegate|. | 212 // Creates a test widget. Takes ownership of |delegate|. |
152 std::unique_ptr<Widget> CreateWidget(WidgetDelegate* delegate) { | 213 std::unique_ptr<Widget> CreateWidget(WidgetDelegate* delegate) { |
153 std::unique_ptr<Widget> widget(new Widget()); | 214 std::unique_ptr<Widget> widget(new Widget()); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
416 content->AddPreTargetHandler(&handler); | 477 content->AddPreTargetHandler(&handler); |
417 | 478 |
418 std::unique_ptr<ui::MouseEvent> mouse = CreateMouseEvent(); | 479 std::unique_ptr<ui::MouseEvent> mouse = CreateMouseEvent(); |
419 NativeWidgetMus* native_widget = | 480 NativeWidgetMus* native_widget = |
420 static_cast<NativeWidgetMus*>(widget->native_widget_private()); | 481 static_cast<NativeWidgetMus*>(widget->native_widget_private()); |
421 mus::WindowTreeClientImplPrivate test_api(native_widget->window()); | 482 mus::WindowTreeClientImplPrivate test_api(native_widget->window()); |
422 test_api.CallOnWindowInputEvent(native_widget->window(), *mouse); | 483 test_api.CallOnWindowInputEvent(native_widget->window(), *mouse); |
423 EXPECT_EQ(1, handler.num_mouse_events()); | 484 EXPECT_EQ(1, handler.num_mouse_events()); |
424 } | 485 } |
425 | 486 |
487 TEST_F(NativeWidgetMusTest, WidgetViewMouseEventAgreement) { | |
488 std::unique_ptr<Widget> widget(CreateWidget(nullptr)); | |
489 widget->Show(); | |
490 | |
491 View* content = new HandleMousePressView; | |
492 content->SetBounds(10, 20, 90, 180); | |
493 widget->GetContentsView()->AddChildView(content); | |
494 | |
495 ui::PointerDetails ui_pointer_details; | |
496 UIMouseEventHandler ui_handler(&ui_pointer_details); | |
497 content->AddPreTargetHandler(&ui_handler); | |
498 | |
499 ui::PointerDetails mus_pointer_details; | |
500 NativeWidgetMus* native_widget = | |
501 static_cast<NativeWidgetMus*>(widget->native_widget_private()); | |
502 MusMouseEventHandler mus_handler(&mus_pointer_details, | |
503 native_widget->window()); // Self-installed. | |
504 | |
505 std::unique_ptr<ui::MouseEvent> mouse = CreateMouseEvent(); | |
506 mus::WindowTreeClientImplPrivate test_api(native_widget->window()); | |
507 test_api.CallOnWindowInputEvent(native_widget->window(), *mouse); | |
508 | |
509 // Expectation: Event delivered to view and widget in same coordinate space. | |
510 EXPECT_TRUE(ui_handler.event_received()); | |
511 EXPECT_TRUE(mus_handler.event_received()); | |
512 EXPECT_EQ(ui_pointer_details, mus_pointer_details); | |
sadrul
2016/05/26 22:00:50
PointerDetails do not contain event-location, whic
Mark Dittmer
2016/05/27 12:37:32
Wait. So does that mean that the view and widget _
Mark Dittmer
2016/05/27 13:46:19
Done.
| |
513 } | |
514 | |
426 // Tests that an incoming UI event is acked with the handled status. | 515 // Tests that an incoming UI event is acked with the handled status. |
427 TEST_F(NativeWidgetMusTest, EventAcked) { | 516 TEST_F(NativeWidgetMusTest, EventAcked) { |
428 std::unique_ptr<Widget> widget(CreateWidget(nullptr)); | 517 std::unique_ptr<Widget> widget(CreateWidget(nullptr)); |
429 widget->Show(); | 518 widget->Show(); |
430 | 519 |
431 View* content = new HandleMousePressView; | 520 View* content = new HandleMousePressView; |
432 content->SetBounds(10, 20, 90, 180); | 521 content->SetBounds(10, 20, 90, 180); |
433 widget->GetContentsView()->AddChildView(content); | 522 widget->GetContentsView()->AddChildView(content); |
434 | 523 |
435 // Dispatch an input event to the window and view. | 524 // Dispatch an input event to the window and view. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
517 mus_window->SetBounds(end_bounds); | 606 mus_window->SetBounds(end_bounds); |
518 | 607 |
519 EXPECT_EQ(end_bounds, mus_window->bounds()); | 608 EXPECT_EQ(end_bounds, mus_window->bounds()); |
520 | 609 |
521 // Main check for this test: Setting |mus_window| bounds while bypassing | 610 // Main check for this test: Setting |mus_window| bounds while bypassing |
522 // |native_widget| must update window_tree_host bounds. | 611 // |native_widget| must update window_tree_host bounds. |
523 EXPECT_EQ(end_bounds, native_widget->window_tree_host()->GetBounds()); | 612 EXPECT_EQ(end_bounds, native_widget->window_tree_host()->GetBounds()); |
524 } | 613 } |
525 | 614 |
526 } // namespace views | 615 } // namespace views |
OLD | NEW |