OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 <math.h> | 5 #include <math.h> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 event = &gesture; | 73 event = &gesture; |
74 } else if (type == WebInputEvent::MouseWheel) { | 74 } else if (type == WebInputEvent::MouseWheel) { |
75 static WebMouseWheelEvent wheel; | 75 static WebMouseWheelEvent wheel; |
76 event = &wheel; | 76 event = &wheel; |
77 } | 77 } |
78 CHECK(event); | 78 CHECK(event); |
79 event->type = type; | 79 event->type = type; |
80 return *event; | 80 return *event; |
81 } | 81 } |
82 | 82 |
83 bool GetIsShortcutFromHandleInputEventMessage(const IPC::Message* msg) { | |
84 InputMsg_HandleInputEvent::Schema::Param param; | |
85 InputMsg_HandleInputEvent::Read(msg, ¶m); | |
86 return base::get<2>(param); | |
87 } | |
88 | |
89 template<typename MSG_T, typename ARG_T1> | 83 template<typename MSG_T, typename ARG_T1> |
90 void ExpectIPCMessageWithArg1(const IPC::Message* msg, const ARG_T1& arg1) { | 84 void ExpectIPCMessageWithArg1(const IPC::Message* msg, const ARG_T1& arg1) { |
91 ASSERT_EQ(MSG_T::ID, msg->type()); | 85 ASSERT_EQ(MSG_T::ID, msg->type()); |
92 typename MSG_T::Schema::Param param; | 86 typename MSG_T::Schema::Param param; |
93 ASSERT_TRUE(MSG_T::Read(msg, ¶m)); | 87 ASSERT_TRUE(MSG_T::Read(msg, ¶m)); |
94 EXPECT_EQ(arg1, base::get<0>(param)); | 88 EXPECT_EQ(arg1, base::get<0>(param)); |
95 } | 89 } |
96 | 90 |
97 template<typename MSG_T, typename ARG_T1, typename ARG_T2> | 91 template<typename MSG_T, typename ARG_T1, typename ARG_T2> |
98 void ExpectIPCMessageWithArg2(const IPC::Message* msg, | 92 void ExpectIPCMessageWithArg2(const IPC::Message* msg, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 config_.touch_config.desktop_touch_ack_timeout_delay = | 169 config_.touch_config.desktop_touch_ack_timeout_delay = |
176 base::TimeDelta::FromMilliseconds(desktop_timeout_ms); | 170 base::TimeDelta::FromMilliseconds(desktop_timeout_ms); |
177 config_.touch_config.mobile_touch_ack_timeout_delay = | 171 config_.touch_config.mobile_touch_ack_timeout_delay = |
178 base::TimeDelta::FromMilliseconds(mobile_timeout_ms); | 172 base::TimeDelta::FromMilliseconds(mobile_timeout_ms); |
179 config_.touch_config.touch_ack_timeout_supported = true; | 173 config_.touch_config.touch_ack_timeout_supported = true; |
180 TearDown(); | 174 TearDown(); |
181 SetUp(); | 175 SetUp(); |
182 input_router()->NotifySiteIsMobileOptimized(false); | 176 input_router()->NotifySiteIsMobileOptimized(false); |
183 } | 177 } |
184 | 178 |
185 void SimulateKeyboardEvent(WebInputEvent::Type type, bool is_shortcut) { | 179 void SimulateKeyboardEvent(WebInputEvent::Type type) { |
186 WebKeyboardEvent event = SyntheticWebKeyboardEventBuilder::Build(type); | 180 WebKeyboardEvent event = SyntheticWebKeyboardEventBuilder::Build(type); |
187 NativeWebKeyboardEvent native_event; | 181 NativeWebKeyboardEvent native_event; |
188 memcpy(&native_event, &event, sizeof(event)); | 182 memcpy(&native_event, &event, sizeof(event)); |
189 NativeWebKeyboardEventWithLatencyInfo key_event(native_event); | 183 NativeWebKeyboardEventWithLatencyInfo key_event(native_event); |
190 input_router_->SendKeyboardEvent(key_event, is_shortcut); | 184 input_router_->SendKeyboardEvent(key_event); |
191 } | 185 } |
192 | 186 |
193 void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) { | 187 void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) { |
194 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo( | 188 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo( |
195 SyntheticWebMouseWheelEventBuilder::Build(dX, dY, modifiers, precise))); | 189 SyntheticWebMouseWheelEventBuilder::Build(dX, dY, modifiers, precise))); |
196 } | 190 } |
197 | 191 |
198 void SimulateMouseEvent(WebInputEvent::Type type, int x, int y) { | 192 void SimulateMouseEvent(WebInputEvent::Type type, int x, int y) { |
199 input_router_->SendMouseEvent(MouseEventWithLatencyInfo( | 193 input_router_->SendMouseEvent(MouseEventWithLatencyInfo( |
200 SyntheticWebMouseEventBuilder::Build(type, x, y, 0))); | 194 SyntheticWebMouseEventBuilder::Build(type, x, y, 0))); |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 scoped_ptr<IPC::Message> response(new InputHostMsg_MoveCaret_ACK(0)); | 604 scoped_ptr<IPC::Message> response(new InputHostMsg_MoveCaret_ACK(0)); |
611 input_router_->OnMessageReceived(*response); | 605 input_router_->OnMessageReceived(*response); |
612 } | 606 } |
613 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); | 607 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); |
614 } | 608 } |
615 | 609 |
616 TEST_F(InputRouterImplTest, HandledInputEvent) { | 610 TEST_F(InputRouterImplTest, HandledInputEvent) { |
617 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); | 611 client_->set_filter_state(INPUT_EVENT_ACK_STATE_CONSUMED); |
618 | 612 |
619 // Simulate a keyboard event. | 613 // Simulate a keyboard event. |
620 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | 614 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
621 | 615 |
622 // Make sure no input event is sent to the renderer. | 616 // Make sure no input event is sent to the renderer. |
623 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); | 617 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); |
624 | 618 |
625 // OnKeyboardEventAck should be triggered without actual ack. | 619 // OnKeyboardEventAck should be triggered without actual ack. |
626 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 620 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
627 | 621 |
628 // As the event was acked already, keyboard event queue should be | 622 // As the event was acked already, keyboard event queue should be |
629 // empty. | 623 // empty. |
630 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent()); | 624 ASSERT_EQ(NULL, input_router_->GetLastKeyboardEvent()); |
631 } | 625 } |
632 | 626 |
633 TEST_F(InputRouterImplTest, ClientCanceledKeyboardEvent) { | 627 TEST_F(InputRouterImplTest, ClientCanceledKeyboardEvent) { |
634 client_->set_filter_state(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 628 client_->set_filter_state(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
635 | 629 |
636 // Simulate a keyboard event that has no consumer. | 630 // Simulate a keyboard event that has no consumer. |
637 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | 631 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
638 | 632 |
639 // Make sure no input event is sent to the renderer. | 633 // Make sure no input event is sent to the renderer. |
640 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); | 634 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); |
641 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 635 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
642 | 636 |
643 | 637 |
644 // Simulate a keyboard event that should be dropped. | 638 // Simulate a keyboard event that should be dropped. |
645 client_->set_filter_state(INPUT_EVENT_ACK_STATE_UNKNOWN); | 639 client_->set_filter_state(INPUT_EVENT_ACK_STATE_UNKNOWN); |
646 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | 640 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
647 | 641 |
648 // Make sure no input event is sent to the renderer, and no ack is sent. | 642 // Make sure no input event is sent to the renderer, and no ack is sent. |
649 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); | 643 EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); |
650 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | 644 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
651 } | 645 } |
652 | 646 |
653 TEST_F(InputRouterImplTest, ShortcutKeyboardEvent) { | |
654 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, true); | |
655 EXPECT_TRUE(GetIsShortcutFromHandleInputEventMessage( | |
656 process_->sink().GetMessageAt(0))); | |
657 | |
658 process_->sink().ClearMessages(); | |
659 | |
660 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | |
661 EXPECT_FALSE(GetIsShortcutFromHandleInputEventMessage( | |
662 process_->sink().GetMessageAt(0))); | |
663 } | |
664 | |
665 TEST_F(InputRouterImplTest, NoncorrespondingKeyEvents) { | 647 TEST_F(InputRouterImplTest, NoncorrespondingKeyEvents) { |
666 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | 648 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
667 | 649 |
668 SendInputEventACK(WebInputEvent::KeyUp, | 650 SendInputEventACK(WebInputEvent::KeyUp, |
669 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 651 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
670 EXPECT_TRUE(ack_handler_->unexpected_event_ack_called()); | 652 EXPECT_TRUE(ack_handler_->unexpected_event_ack_called()); |
671 } | 653 } |
672 | 654 |
673 // Tests ported from RenderWidgetHostTest -------------------------------------- | 655 // Tests ported from RenderWidgetHostTest -------------------------------------- |
674 | 656 |
675 TEST_F(InputRouterImplTest, HandleKeyEventsWeSent) { | 657 TEST_F(InputRouterImplTest, HandleKeyEventsWeSent) { |
676 // Simulate a keyboard event. | 658 // Simulate a keyboard event. |
677 SimulateKeyboardEvent(WebInputEvent::RawKeyDown, false); | 659 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
678 ASSERT_TRUE(input_router_->GetLastKeyboardEvent()); | 660 ASSERT_TRUE(input_router_->GetLastKeyboardEvent()); |
679 EXPECT_EQ(WebInputEvent::RawKeyDown, | 661 EXPECT_EQ(WebInputEvent::RawKeyDown, |
680 input_router_->GetLastKeyboardEvent()->type); | 662 input_router_->GetLastKeyboardEvent()->type); |
681 | 663 |
682 // Make sure we sent the input event to the renderer. | 664 // Make sure we sent the input event to the renderer. |
683 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 665 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
684 InputMsg_HandleInputEvent::ID)); | 666 InputMsg_HandleInputEvent::ID)); |
685 process_->sink().ClearMessages(); | 667 process_->sink().ClearMessages(); |
686 | 668 |
687 // Send the simulated response from the renderer back. | 669 // Send the simulated response from the renderer back. |
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1829 client_overscroll = client_->GetAndResetOverscroll(); | 1811 client_overscroll = client_->GetAndResetOverscroll(); |
1830 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, | 1812 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, |
1831 client_overscroll.accumulated_overscroll); | 1813 client_overscroll.accumulated_overscroll); |
1832 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, | 1814 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, |
1833 client_overscroll.latest_overscroll_delta); | 1815 client_overscroll.latest_overscroll_delta); |
1834 EXPECT_EQ(wheel_overscroll.current_fling_velocity, | 1816 EXPECT_EQ(wheel_overscroll.current_fling_velocity, |
1835 client_overscroll.current_fling_velocity); | 1817 client_overscroll.current_fling_velocity); |
1836 } | 1818 } |
1837 | 1819 |
1838 } // namespace content | 1820 } // namespace content |
OLD | NEW |