| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/browser/renderer_host/input/gesture_event_filter.h" | 9 #include "content/browser/renderer_host/input/gesture_event_filter.h" |
| 10 #include "content/browser/renderer_host/input/input_router_client.h" | 10 #include "content/browser/renderer_host/input/input_router_client.h" |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 } | 262 } |
| 263 | 263 |
| 264 bool TouchEventQueueEmpty() const { | 264 bool TouchEventQueueEmpty() const { |
| 265 return input_router()->touch_event_queue_->empty(); | 265 return input_router()->touch_event_queue_->empty(); |
| 266 } | 266 } |
| 267 | 267 |
| 268 bool TouchEventTimeoutEnabled() const { | 268 bool TouchEventTimeoutEnabled() const { |
| 269 return input_router()->touch_event_queue_->ack_timeout_enabled(); | 269 return input_router()->touch_event_queue_->ack_timeout_enabled(); |
| 270 } | 270 } |
| 271 | 271 |
| 272 void OnHasTouchEventHandlers(bool has_handlers) { |
| 273 input_router_->OnMessageReceived( |
| 274 ViewHostMsg_HasTouchEventHandlers(0, has_handlers)); |
| 275 } |
| 276 |
| 272 size_t GetSentMessageCountAndResetSink() { | 277 size_t GetSentMessageCountAndResetSink() { |
| 273 size_t count = process_->sink().message_count(); | 278 size_t count = process_->sink().message_count(); |
| 274 process_->sink().ClearMessages(); | 279 process_->sink().ClearMessages(); |
| 275 return count; | 280 return count; |
| 276 } | 281 } |
| 277 | 282 |
| 278 scoped_ptr<MockRenderProcessHost> process_; | 283 scoped_ptr<MockRenderProcessHost> process_; |
| 279 scoped_ptr<MockInputRouterClient> client_; | 284 scoped_ptr<MockInputRouterClient> client_; |
| 280 scoped_ptr<MockInputAckHandler> ack_handler_; | 285 scoped_ptr<MockInputAckHandler> ack_handler_; |
| 281 scoped_ptr<InputRouterImpl> input_router_; | 286 scoped_ptr<InputRouterImpl> input_router_; |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 ASSERT_EQ(WebMouseWheelEvent::PhaseEnded, wheel_event->phase); | 527 ASSERT_EQ(WebMouseWheelEvent::PhaseEnded, wheel_event->phase); |
| 523 | 528 |
| 524 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(1)); | 529 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(1)); |
| 525 EXPECT_EQ(WebInputEvent::GestureScrollEnd, input_event->type); | 530 EXPECT_EQ(WebInputEvent::GestureScrollEnd, input_event->type); |
| 526 | 531 |
| 527 ASSERT_EQ(2U, GetSentMessageCountAndResetSink()); | 532 ASSERT_EQ(2U, GetSentMessageCountAndResetSink()); |
| 528 } | 533 } |
| 529 | 534 |
| 530 // Tests that touch-events are queued properly. | 535 // Tests that touch-events are queued properly. |
| 531 TEST_F(InputRouterImplTest, TouchEventQueue) { | 536 TEST_F(InputRouterImplTest, TouchEventQueue) { |
| 537 OnHasTouchEventHandlers(true); |
| 538 |
| 532 PressTouchPoint(1, 1); | 539 PressTouchPoint(1, 1); |
| 533 SendTouchEvent(); | 540 SendTouchEvent(); |
| 534 EXPECT_TRUE(client_->GetAndResetFilterEventCalled()); | 541 EXPECT_TRUE(client_->GetAndResetFilterEventCalled()); |
| 535 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 542 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 536 EXPECT_FALSE(TouchEventQueueEmpty()); | 543 EXPECT_FALSE(TouchEventQueueEmpty()); |
| 537 | 544 |
| 538 // The second touch should not be sent since one is already in queue. | 545 // The second touch should not be sent since one is already in queue. |
| 539 MoveTouchPoint(0, 5, 5); | 546 MoveTouchPoint(0, 5, 5); |
| 540 SendTouchEvent(); | 547 SendTouchEvent(); |
| 541 EXPECT_FALSE(client_->GetAndResetFilterEventCalled()); | 548 EXPECT_FALSE(client_->GetAndResetFilterEventCalled()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 556 EXPECT_TRUE(TouchEventQueueEmpty()); | 563 EXPECT_TRUE(TouchEventQueueEmpty()); |
| 557 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 564 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
| 558 EXPECT_EQ(WebInputEvent::TouchMove, | 565 EXPECT_EQ(WebInputEvent::TouchMove, |
| 559 ack_handler_->acked_touch_event().event.type); | 566 ack_handler_->acked_touch_event().event.type); |
| 560 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 567 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 561 } | 568 } |
| 562 | 569 |
| 563 // Tests that the touch-queue is emptied if a page stops listening for touch | 570 // Tests that the touch-queue is emptied if a page stops listening for touch |
| 564 // events. | 571 // events. |
| 565 TEST_F(InputRouterImplTest, TouchEventQueueFlush) { | 572 TEST_F(InputRouterImplTest, TouchEventQueueFlush) { |
| 566 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); | 573 OnHasTouchEventHandlers(true); |
| 567 EXPECT_TRUE(client_->has_touch_handler()); | 574 EXPECT_TRUE(client_->has_touch_handler()); |
| 568 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 575 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 569 EXPECT_TRUE(TouchEventQueueEmpty()); | 576 EXPECT_TRUE(TouchEventQueueEmpty()); |
| 570 | 577 |
| 571 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent()); | 578 EXPECT_TRUE(input_router_->ShouldForwardTouchEvent()); |
| 572 | 579 |
| 573 // Send a touch-press event. | 580 // Send a touch-press event. |
| 574 PressTouchPoint(1, 1); | 581 PressTouchPoint(1, 1); |
| 575 SendTouchEvent(); | 582 SendTouchEvent(); |
| 576 EXPECT_FALSE(TouchEventQueueEmpty()); | 583 EXPECT_FALSE(TouchEventQueueEmpty()); |
| 577 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 584 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 578 | 585 |
| 579 // The page stops listening for touch-events. The touch-event queue should now | 586 // The page stops listening for touch-events. The touch-event queue should now |
| 580 // be emptied, but none of the queued touch-events should be sent to the | 587 // be emptied, but none of the queued touch-events should be sent to the |
| 581 // renderer. | 588 // renderer. |
| 582 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); | 589 OnHasTouchEventHandlers(false); |
| 583 EXPECT_FALSE(client_->has_touch_handler()); | 590 EXPECT_FALSE(client_->has_touch_handler()); |
| 584 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | 591 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
| 585 EXPECT_TRUE(TouchEventQueueEmpty()); | 592 EXPECT_TRUE(TouchEventQueueEmpty()); |
| 586 EXPECT_FALSE(input_router_->ShouldForwardTouchEvent()); | 593 EXPECT_FALSE(input_router_->ShouldForwardTouchEvent()); |
| 587 } | 594 } |
| 588 | 595 |
| 589 #if defined(OS_WIN) || defined(USE_AURA) | 596 #if defined(OS_WIN) || defined(USE_AURA) |
| 590 // Tests that the acked events have correct state. (ui::Events are used only on | 597 // Tests that the acked events have correct state. (ui::Events are used only on |
| 591 // windows and aura) | 598 // windows and aura) |
| 592 TEST_F(InputRouterImplTest, AckedTouchEventState) { | 599 TEST_F(InputRouterImplTest, AckedTouchEventState) { |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 // Check that the second event was sent. | 702 // Check that the second event was sent. |
| 696 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 703 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
| 697 InputMsg_HandleInputEvent::ID)); | 704 InputMsg_HandleInputEvent::ID)); |
| 698 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 705 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
| 699 | 706 |
| 700 // Check that the correct unhandled wheel event was received. | 707 // Check that the correct unhandled wheel event was received. |
| 701 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); | 708 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); |
| 702 } | 709 } |
| 703 | 710 |
| 704 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { | 711 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { |
| 712 OnHasTouchEventHandlers(true); |
| 713 |
| 705 int start_type = static_cast<int>(WebInputEvent::TouchStart); | 714 int start_type = static_cast<int>(WebInputEvent::TouchStart); |
| 706 int end_type = static_cast<int>(WebInputEvent::TouchCancel); | 715 int end_type = static_cast<int>(WebInputEvent::TouchCancel); |
| 707 ASSERT_LT(start_type, end_type); | 716 ASSERT_LT(start_type, end_type); |
| 708 for (int i = start_type; i <= end_type; ++i) { | 717 for (int i = start_type; i <= end_type; ++i) { |
| 709 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i); | 718 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i); |
| 710 if (!WebInputEventTraits::IgnoresAckDisposition(type)) | 719 if (!WebInputEventTraits::IgnoresAckDisposition(type)) |
| 711 continue; | 720 continue; |
| 712 | 721 |
| 713 // The TouchEventQueue requires an initial TouchStart for it to begin | 722 // The TouchEventQueue requires an initial TouchStart for it to begin |
| 714 // forwarding other touch event types. | 723 // forwarding other touch event types. |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 | 949 |
| 941 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT | | 950 input_router()->OnViewUpdated(InputRouter::MOBILE_VIEWPORT | |
| 942 InputRouter::FIXED_PAGE_SCALE); | 951 InputRouter::FIXED_PAGE_SCALE); |
| 943 EXPECT_FALSE(TouchEventTimeoutEnabled()); | 952 EXPECT_FALSE(TouchEventTimeoutEnabled()); |
| 944 | 953 |
| 945 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE); | 954 input_router()->OnViewUpdated(InputRouter::VIEW_FLAGS_NONE); |
| 946 EXPECT_TRUE(TouchEventTimeoutEnabled()); | 955 EXPECT_TRUE(TouchEventTimeoutEnabled()); |
| 947 } | 956 } |
| 948 | 957 |
| 949 } // namespace content | 958 } // namespace content |
| OLD | NEW |