Index: content/browser/renderer_host/render_widget_host_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc |
index d50287d75cbe2a41fed2918f592af32641f19ba1..f1de19a9c69523169456063c977b0eae119bc866 100644 |
--- a/content/browser/renderer_host/render_widget_host_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc |
@@ -9,11 +9,7 @@ |
#include "base/memory/shared_memory.h" |
#include "base/timer/timer.h" |
#include "content/browser/browser_thread_impl.h" |
-#include "content/browser/renderer_host/input/gesture_event_queue.h" |
#include "content/browser/renderer_host/input/input_router_impl.h" |
-#include "content/browser/renderer_host/input/touch_event_queue.h" |
-#include "content/browser/renderer_host/overscroll_controller.h" |
-#include "content/browser/renderer_host/overscroll_controller_delegate.h" |
#include "content/browser/renderer_host/render_widget_host_delegate.h" |
#include "content/browser/renderer_host/render_widget_host_view_base.h" |
#include "content/common/input/synthetic_web_input_event_builders.h" |
@@ -53,64 +49,6 @@ using blink::WebTouchPoint; |
namespace content { |
-// TestOverscrollDelegate ------------------------------------------------------ |
- |
-class TestOverscrollDelegate : public OverscrollControllerDelegate { |
- public: |
- explicit TestOverscrollDelegate(RenderWidgetHostView* view) |
- : view_(view), |
- current_mode_(OVERSCROLL_NONE), |
- completed_mode_(OVERSCROLL_NONE), |
- delta_x_(0.f), |
- delta_y_(0.f) { |
- } |
- |
- virtual ~TestOverscrollDelegate() {} |
- |
- OverscrollMode current_mode() const { return current_mode_; } |
- OverscrollMode completed_mode() const { return completed_mode_; } |
- float delta_x() const { return delta_x_; } |
- float delta_y() const { return delta_y_; } |
- |
- void Reset() { |
- current_mode_ = OVERSCROLL_NONE; |
- completed_mode_ = OVERSCROLL_NONE; |
- delta_x_ = delta_y_ = 0.f; |
- } |
- |
- private: |
- // Overridden from OverscrollControllerDelegate: |
- virtual gfx::Rect GetVisibleBounds() const OVERRIDE { |
- return view_->IsShowing() ? view_->GetViewBounds() : gfx::Rect(); |
- } |
- |
- virtual void OnOverscrollUpdate(float delta_x, float delta_y) OVERRIDE { |
- delta_x_ = delta_x; |
- delta_y_ = delta_y; |
- } |
- |
- virtual void OnOverscrollComplete(OverscrollMode overscroll_mode) OVERRIDE { |
- EXPECT_EQ(current_mode_, overscroll_mode); |
- completed_mode_ = overscroll_mode; |
- current_mode_ = OVERSCROLL_NONE; |
- } |
- |
- virtual void OnOverscrollModeChange(OverscrollMode old_mode, |
- OverscrollMode new_mode) OVERRIDE { |
- EXPECT_EQ(current_mode_, old_mode); |
- current_mode_ = new_mode; |
- delta_x_ = delta_y_ = 0.f; |
- } |
- |
- RenderWidgetHostView* view_; |
- OverscrollMode current_mode_; |
- OverscrollMode completed_mode_; |
- float delta_x_; |
- float delta_y_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestOverscrollDelegate); |
-}; |
- |
// MockInputRouter ------------------------------------------------------------- |
class MockInputRouter : public InputRouter { |
@@ -208,55 +146,6 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl { |
using RenderWidgetHostImpl::resize_ack_pending_; |
using RenderWidgetHostImpl::input_router_; |
- bool unresponsive_timer_fired() const { |
- return unresponsive_timer_fired_; |
- } |
- |
- void set_hung_renderer_delay_ms(int delay_ms) { |
- hung_renderer_delay_ms_ = delay_ms; |
- } |
- |
- unsigned GestureEventLastQueueEventSize() const { |
- return gesture_event_queue().coalesced_gesture_events_.size(); |
- } |
- |
- WebGestureEvent GestureEventSecondFromLastQueueEvent() const { |
- return gesture_event_queue().coalesced_gesture_events_.at( |
- GestureEventLastQueueEventSize() - 2).event; |
- } |
- |
- WebGestureEvent GestureEventLastQueueEvent() const { |
- return gesture_event_queue().coalesced_gesture_events_.back().event; |
- } |
- |
- unsigned GestureEventDebouncingQueueSize() const { |
- return gesture_event_queue().debouncing_deferral_queue_.size(); |
- } |
- |
- WebGestureEvent GestureEventQueueEventAt(int i) const { |
- return gesture_event_queue().coalesced_gesture_events_.at(i).event; |
- } |
- |
- bool ScrollingInProgress() const { |
- return gesture_event_queue().scrolling_in_progress_; |
- } |
- |
- void SetupForOverscrollControllerTest() { |
- SetOverscrollControllerEnabled(true); |
- overscroll_delegate_.reset(new TestOverscrollDelegate(GetView())); |
- overscroll_controller_->set_delegate(overscroll_delegate_.get()); |
- } |
- |
- void DisableGestureDebounce() { set_debounce_interval_time_ms(0); } |
- |
- void set_debounce_interval_time_ms(int delay_ms) { |
- gesture_event_queue().set_debounce_interval_time_ms_for_testing(delay_ms); |
- } |
- |
- bool TouchEventQueueEmpty() const { |
- return touch_event_queue().empty(); |
- } |
- |
virtual void OnTouchEventAck( |
const TouchEventWithLatencyInfo& event, |
InputEventAckState ack_result) OVERRIDE { |
@@ -265,40 +154,21 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl { |
RenderWidgetHostImpl::OnTouchEventAck(event, ack_result); |
} |
- WebInputEvent::Type acked_touch_event_type() const { |
- return acked_touch_event_type_; |
- } |
- |
- bool ScrollStateIsContentScrolling() const { |
- return scroll_state() == OverscrollController::STATE_CONTENT_SCROLLING; |
- } |
- |
- bool ScrollStateIsOverscrolling() const { |
- return scroll_state() == OverscrollController::STATE_OVERSCROLLING; |
- } |
- |
- bool ScrollStateIsUnknown() const { |
- return scroll_state() == OverscrollController::STATE_UNKNOWN; |
- } |
- |
- OverscrollController::ScrollState scroll_state() const { |
- return overscroll_controller_->scroll_state_; |
- } |
- |
- OverscrollMode overscroll_mode() const { |
- return overscroll_controller_->overscroll_mode_; |
+ bool unresponsive_timer_fired() const { |
+ return unresponsive_timer_fired_; |
} |
- float overscroll_delta_x() const { |
- return overscroll_controller_->overscroll_delta_x_; |
+ void set_hung_renderer_delay_ms(int delay_ms) { |
+ hung_renderer_delay_ms_ = delay_ms; |
} |
- float overscroll_delta_y() const { |
- return overscroll_controller_->overscroll_delta_y_; |
+ void DisableGestureDebounce() { |
+ input_router_.reset(new InputRouterImpl( |
+ process_, this, this, routing_id_, InputRouterImpl::Config())); |
} |
- TestOverscrollDelegate* overscroll_delegate() { |
- return overscroll_delegate_.get(); |
+ WebInputEvent::Type acked_touch_event_type() const { |
+ return acked_touch_event_type_; |
} |
void SetupForInputRouterTest() { |
@@ -314,32 +184,9 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl { |
unresponsive_timer_fired_ = true; |
} |
- const TouchEventQueue& touch_event_queue() const { |
- return input_router_impl()->touch_event_queue_; |
- } |
- |
- const GestureEventQueue& gesture_event_queue() const { |
- return input_router_impl()->gesture_event_queue_; |
- } |
- |
- GestureEventQueue& gesture_event_queue() { |
- return input_router_impl()->gesture_event_queue_; |
- } |
- |
- private: |
- const InputRouterImpl* input_router_impl() const { |
- return static_cast<InputRouterImpl*>(input_router_.get()); |
- } |
- |
- InputRouterImpl* input_router_impl() { |
- return static_cast<InputRouterImpl*>(input_router_.get()); |
- } |
- |
bool unresponsive_timer_fired_; |
WebInputEvent::Type acked_touch_event_type_; |
- scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; |
- |
DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); |
}; |
@@ -462,7 +309,10 @@ class TestView : public TestRenderWidgetHostView { |
acked_event_ = touch.event; |
++acked_event_count_; |
} |
- virtual void UnhandledWheelEvent(const WebMouseWheelEvent& event) OVERRIDE { |
+ virtual void WheelEventAck(const WebMouseWheelEvent& event, |
+ InputEventAckState ack_result) OVERRIDE { |
+ if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) |
+ return; |
unhandled_wheel_event_count_++; |
unhandled_wheel_event_ = event; |
} |
@@ -611,8 +461,6 @@ class RenderWidgetHostTest : public testing::Test { |
view_.reset(new TestView(host_.get())); |
host_->SetView(view_.get()); |
host_->Init(); |
- |
- // Tests for debounce-related behavior will explicitly enable debouncing. |
host_->DisableGestureDebounce(); |
} |
virtual void TearDown() { |
@@ -701,25 +549,10 @@ class RenderWidgetHostTest : public testing::Test { |
host_->ForwardMouseEvent(event); |
} |
- void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) { |
- host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build(phase)); |
- } |
- |
- // Inject provided synthetic WebGestureEvent instance. |
- void SimulateGestureEventCore(const WebGestureEvent& gesture_event) { |
- host_->ForwardGestureEvent(gesture_event); |
- } |
- |
- void SimulateGestureEventCoreWithLatencyInfo( |
- const WebGestureEvent& gesture_event, |
- const ui::LatencyInfo& ui_latency) { |
- host_->ForwardGestureEventWithLatencyInfo(gesture_event, ui_latency); |
- } |
- |
// Inject simple synthetic WebGestureEvent instances. |
void SimulateGestureEvent(WebInputEvent::Type type, |
WebGestureEvent::SourceDevice sourceDevice) { |
- SimulateGestureEventCore( |
+ host_->ForwardGestureEvent( |
SyntheticWebGestureEventBuilder::Build(type, sourceDevice)); |
} |
@@ -727,35 +560,11 @@ class RenderWidgetHostTest : public testing::Test { |
WebInputEvent::Type type, |
WebGestureEvent::SourceDevice sourceDevice, |
const ui::LatencyInfo& ui_latency) { |
- SimulateGestureEventCoreWithLatencyInfo( |
+ host_->ForwardGestureEventWithLatencyInfo( |
SyntheticWebGestureEventBuilder::Build(type, sourceDevice), |
ui_latency); |
} |
- void SimulateGestureScrollUpdateEvent(float dX, float dY, int modifiers) { |
- SimulateGestureEventCore( |
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(dX, dY, modifiers)); |
- } |
- |
- void SimulateGesturePinchUpdateEvent(float scale, |
- float anchorX, |
- float anchorY, |
- int modifiers) { |
- SimulateGestureEventCore(SyntheticWebGestureEventBuilder::BuildPinchUpdate( |
- scale, anchorX, anchorY, modifiers, WebGestureEvent::Touchscreen)); |
- } |
- |
- // Inject synthetic GestureFlingStart events. |
- void SimulateGestureFlingStartEvent( |
- float velocityX, |
- float velocityY, |
- WebGestureEvent::SourceDevice sourceDevice) { |
- SimulateGestureEventCore( |
- SyntheticWebGestureEventBuilder::BuildFling(velocityX, |
- velocityY, |
- sourceDevice)); |
- } |
- |
// Set the timestamp for the touch-event. |
void SetTouchTimestamp(base::TimeDelta timestamp) { |
touch_event_.SetTimestamp(timestamp); |
@@ -1209,1038 +1018,6 @@ TEST_F(RenderWidgetHostTest, MultipleInputEvents) { |
EXPECT_TRUE(host_->unresponsive_timer_fired()); |
} |
-// Tests that scroll ACKs are correctly handled by the overscroll-navigation |
-// controller. |
-TEST_F(RenderWidgetHostTest, WheelScrollEventOverscrolls) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- // Simulate wheel events. |
- SimulateWheelEvent(-5, 0, 0, true); // sent directly |
- SimulateWheelEvent(-1, 1, 0, true); // enqueued |
- SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-20, 6, 1, true); // enqueued, different modifiers |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK the first wheel event as not processed. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK for the second (coalesced) event as not processed. This will |
- // start a back navigation. However, this will also cause the queued next |
- // event to be sent to the renderer. But since overscroll navigation has |
- // started, that event will also be included in the overscroll computation |
- // instead of being sent to the renderer. So the result will be an overscroll |
- // back navigation, and no event will be sent to the renderer. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(-81.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(-31.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- // Send a mouse-move event. This should cancel the overscroll navigation. |
- SimulateMouseMove(5, 10, 0); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
-} |
- |
-// Tests that if some scroll events are consumed towards the start, then |
-// subsequent scrolls do not horizontal overscroll. |
-TEST_F(RenderWidgetHostTest, WheelScrollConsumedDoNotHorizOverscroll) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- // Simulate wheel events. |
- SimulateWheelEvent(-5, 0, 0, true); // sent directly |
- SimulateWheelEvent(-1, -1, 0, true); // enqueued |
- SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-20, 6, 1, true); // enqueued, different modifiers |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK the first wheel event as processed. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK for the second (coalesced) event as not processed. This should |
- // not initiate overscroll, since the beginning of the scroll has been |
- // consumed. The queued event with different modifiers should be sent to the |
- // renderer. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- |
- // Indicate the end of the scrolling from the touchpad. |
- SimulateGestureFlingStartEvent(-1200.f, 0.f, WebGestureEvent::Touchpad); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- |
- // Start another scroll. This time, do not consume any scroll events. |
- process_->sink().ClearMessages(); |
- SimulateWheelEvent(0, -5, 0, true); // sent directly |
- SimulateWheelEvent(0, -1, 0, true); // enqueued |
- SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-20, 6, 1, true); // enqueued, different modifiers |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK for the first wheel and the subsequent coalesced event as not |
- // processed. This should start a back-overscroll. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
-} |
- |
-// Tests that wheel-scrolling correctly turns overscroll on and off. |
-TEST_F(RenderWidgetHostTest, WheelScrollOverscrollToggle) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- // Send a wheel event. ACK the event as not processed. This should not |
- // initiate an overscroll gesture since it doesn't cross the threshold yet. |
- SimulateWheelEvent(10, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more so as to not overscroll. |
- SimulateWheelEvent(10, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more to initiate an overscroll. |
- SimulateWheelEvent(40, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(60.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(10.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll in the reverse direction enough to abort the overscroll. |
- SimulateWheelEvent(-20, 0, 0, true); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- // Continue to scroll in the reverse direction. |
- SimulateWheelEvent(-20, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Continue to scroll in the reverse direction enough to initiate overscroll |
- // in that direction. |
- SimulateWheelEvent(-55, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(-75.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(-25.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
-} |
- |
-TEST_F(RenderWidgetHostTest, ScrollEventsOverscrollWithFling) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- // Send a wheel event. ACK the event as not processed. This should not |
- // initiate an overscroll gesture since it doesn't cross the threshold yet. |
- SimulateWheelEvent(10, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more so as to not overscroll. |
- SimulateWheelEvent(20, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more to initiate an overscroll. |
- SimulateWheelEvent(30, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(60.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(10.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- |
- // Send a fling start, but with a small velocity, so that the overscroll is |
- // aborted. The fling should proceed to the renderer, through the gesture |
- // event filter. |
- SimulateGestureFlingStartEvent(0.f, 0.1f, WebGestureEvent::Touchpad); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
-} |
- |
-// Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that |
-// the zero-velocity fling does not reach the renderer. |
-TEST_F(RenderWidgetHostTest, ScrollEventsOverscrollWithZeroFling) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- // Send a wheel event. ACK the event as not processed. This should not |
- // initiate an overscroll gesture since it doesn't cross the threshold yet. |
- SimulateWheelEvent(10, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more so as to not overscroll. |
- SimulateWheelEvent(20, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Scroll some more to initiate an overscroll. |
- SimulateWheelEvent(30, 0, 0, true); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(60.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(10.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- |
- // Send a fling start, but with a small velocity, so that the overscroll is |
- // aborted. The fling should proceed to the renderer, through the gesture |
- // event filter. |
- SimulateGestureFlingStartEvent(10.f, 0.f, WebGestureEvent::Touchpad); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
-} |
- |
-// Tests that a fling in the opposite direction of the overscroll cancels the |
-// overscroll nav instead of completing it. |
-TEST_F(RenderWidgetHostTest, ReverseFlingCancelsOverscroll) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- { |
- // Start and end a gesture in the same direction without processing the |
- // gesture events in the renderer. This should initiate and complete an |
- // overscroll navigation. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(300, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- } |
- |
- { |
- // Start over, except instead of ending the gesture with ScrollEnd, end it |
- // with a FlingStart, with velocity in the reverse direction. This should |
- // initiate an overscroll navigation, but it should be cancelled because of |
- // the fling in the opposite direction. |
- host_->overscroll_delegate()->Reset(); |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(-300, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureFlingStartEvent(100, 0, WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- } |
-} |
- |
-// Tests that touch-scroll events are handled correctly by the overscroll |
-// controller. This also tests that the overscroll controller and the |
-// gesture-event filter play nice with each other. |
-TEST_F(RenderWidgetHostTest, GestureScrollOverscrolls) { |
- // Turn off debounce handling for test isolation. |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- // Send another gesture event and ACK as not being processed. This should |
- // initiate the navigation gesture. |
- SimulateGestureScrollUpdateEvent(55, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(55.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(-5.f, host_->overscroll_delta_y()); |
- EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- process_->sink().ClearMessages(); |
- |
- // Send another gesture update event. This event should be consumed by the |
- // controller, and not be forwarded to the renderer. The gesture-event filter |
- // should not also receive this event. |
- SimulateGestureScrollUpdateEvent(10, -5, 0); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(65.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(-10.f, host_->overscroll_delta_y()); |
- EXPECT_EQ(15.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(-10.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- |
- // Now send a scroll end. This should cancel the overscroll gesture, and send |
- // the event to the renderer. The gesture-event filter should receive this |
- // event. |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- // The scroll end event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
-} |
- |
-// Tests that if the page is scrolled because of a scroll-gesture, then that |
-// particular scroll sequence never generates overscroll if the scroll direction |
-// is horizontal. |
-TEST_F(RenderWidgetHostTest, GestureScrollConsumedHorizontal) { |
- // Turn off debounce handling for test isolation. |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(10, 0, 0); |
- |
- // Start scrolling on content. ACK both events as being processed. |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Send another gesture event and ACK as not being processed. This should |
- // not initiate overscroll because the beginning of the scroll event did |
- // scroll some content on the page. Since there was no overscroll, the event |
- // should reach the renderer. |
- SimulateGestureScrollUpdateEvent(55, 0, 0); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
-} |
- |
-// Tests that the overscroll controller plays nice with touch-scrolls and the |
-// gesture event filter with debounce filtering turned on. |
-TEST_F(RenderWidgetHostTest, GestureScrollDebounceOverscrolls) { |
- host_->SetupForOverscrollControllerTest(); |
- host_->set_debounce_interval_time_ms(100); |
- process_->sink().ClearMessages(); |
- |
- // Start scrolling. Receive ACK as it being processed. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Send update events. |
- SimulateGestureScrollUpdateEvent(25, 0, 0); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Quickly end and restart the scroll gesture. These two events should get |
- // discarded. |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, host_->GestureEventDebouncingQueueSize()); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(2U, host_->GestureEventDebouncingQueueSize()); |
- |
- // Send another update event. This should get into the queue. |
- SimulateGestureScrollUpdateEvent(30, 0, 0); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- |
- // Receive an ACK for the first scroll-update event as not being processed. |
- // This will contribute to the overscroll gesture, but not enough for the |
- // overscroll controller to start consuming gesture events. This also cause |
- // the queued gesture event to be forwarded to the renderer. |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Send another update event. This should get into the queue. |
- SimulateGestureScrollUpdateEvent(10, 0, 0); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- |
- // Receive an ACK for the second scroll-update event as not being processed. |
- // This will now initiate an overscroll. This will also cause the queued |
- // gesture event to be released. But instead of going to the renderer, it will |
- // be consumed by the overscroll controller. |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(65.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(15.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
-} |
- |
-// Tests that the gesture debounce timer plays nice with the overscroll |
-// controller. |
-TEST_F(RenderWidgetHostTest, GestureScrollDebounceTimerOverscroll) { |
- host_->SetupForOverscrollControllerTest(); |
- host_->set_debounce_interval_time_ms(10); |
- process_->sink().ClearMessages(); |
- |
- // Start scrolling. Receive ACK as it being processed. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Send update events. |
- SimulateGestureScrollUpdateEvent(55, 0, 0); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Send an end event. This should get in the debounce queue. |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, host_->GestureEventDebouncingQueueSize()); |
- |
- // Receive ACK for the scroll-update event. |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(55.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- // Let the timer for the debounce queue fire. That should release the queued |
- // scroll-end event. Since overscroll has started, but there hasn't been |
- // enough overscroll to complete the gesture, the overscroll controller |
- // will reset the state. The scroll-end should therefore be dispatched to the |
- // renderer, and the gesture-event-filter should await an ACK for it. |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::MessageLoop::QuitClosure(), |
- TimeDelta::FromMilliseconds(15)); |
- base::MessageLoop::current()->Run(); |
- |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- // The scroll end event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
-} |
- |
-// Tests that when touch-events are dispatched to the renderer, the overscroll |
-// gesture deals with them correctly. |
-TEST_F(RenderWidgetHostTest, OverscrollWithTouchEvents) { |
- host_->SetupForOverscrollControllerTest(); |
- host_->set_debounce_interval_time_ms(10); |
- host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- // The test sends an intermingled sequence of touch and gesture events. |
- |
- PressTouchPoint(0, 1); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::TouchStart, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- MoveTouchPoint(0, 20, 5); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::TouchMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(20, 0, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Another touch move event should reach the renderer since overscroll hasn't |
- // started yet. |
- MoveTouchPoint(0, 65, 10); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- SendInputEventACK(WebInputEvent::TouchMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- SimulateGestureScrollUpdateEvent(45, 0, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(65.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(15.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- process_->sink().ClearMessages(); |
- |
- // Send another touch event. The page should get the touch-move event, even |
- // though overscroll has started. |
- MoveTouchPoint(0, 55, 5); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_FALSE(host_->TouchEventQueueEmpty()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(65.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(15.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- |
- SendInputEventACK(WebInputEvent::TouchMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureScrollUpdateEvent(-10, 0, 0); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(55.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- |
- MoveTouchPoint(0, 255, 5); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_FALSE(host_->TouchEventQueueEmpty()); |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::TouchMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- SimulateGestureScrollUpdateEvent(200, 0, 0); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(255.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(205.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- |
- // The touch-end/cancel event should always reach the renderer if the page has |
- // touch handlers. |
- ReleaseTouchPoint(0); |
- SendTouchEvent(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_FALSE(host_->TouchEventQueueEmpty()); |
- process_->sink().ClearMessages(); |
- |
- SendInputEventACK(WebInputEvent::TouchEnd, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- |
- SimulateGestureEvent(blink::WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::MessageLoop::QuitClosure(), |
- TimeDelta::FromMilliseconds(10)); |
- base::MessageLoop::current()->Run(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_TRUE(host_->TouchEventQueueEmpty()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
-} |
- |
-// Tests that touch-gesture end is dispatched to the renderer at the end of a |
-// touch-gesture initiated overscroll. |
-TEST_F(RenderWidgetHostTest, TouchGestureEndDispatchedAfterOverscrollComplete) { |
- host_->SetupForOverscrollControllerTest(); |
- host_->set_debounce_interval_time_ms(10); |
- host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- // Start scrolling. Receive ACK as it being processed. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- // The scroll begin event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- // Send update events. |
- SimulateGestureScrollUpdateEvent(55, -5, 0); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(55.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(5.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y()); |
- |
- // Send end event. |
- SimulateGestureEvent(blink::WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, host_->GestureEventDebouncingQueueSize()); |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::MessageLoop::QuitClosure(), |
- TimeDelta::FromMilliseconds(10)); |
- base::MessageLoop::current()->Run(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- // The scroll end event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- // Start scrolling. Receive ACK as it being processed. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- // The scroll begin event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- // Send update events. |
- SimulateGestureScrollUpdateEvent(235, -5, 0); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(235.f, host_->overscroll_delta_x()); |
- EXPECT_EQ(185.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(-5.f, host_->overscroll_delegate()->delta_y()); |
- |
- // Send end event. |
- SimulateGestureEvent(blink::WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(1U, host_->GestureEventDebouncingQueueSize()); |
- |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::MessageLoop::QuitClosure(), |
- TimeDelta::FromMilliseconds(10)); |
- base::MessageLoop::current()->Run(); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- // The scroll end event will have received a synthetic ack from the input |
- // router. |
- EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
-} |
- |
-TEST_F(RenderWidgetHostTest, OverscrollDirectionChange) { |
- host_->SetupForOverscrollControllerTest(); |
- host_->set_debounce_interval_time_ms(100); |
- process_->sink().ClearMessages(); |
- |
- // Start scrolling. Receive ACK as it being processed. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Send update events and receive ack as not consumed. |
- SimulateGestureScrollUpdateEvent(125, -5, 0); |
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
- EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); |
- EXPECT_TRUE(host_->ScrollingInProgress()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- // Send another update event, but in the reverse direction. The overscroll |
- // controller will consume the event, and reset the overscroll mode. |
- SimulateGestureScrollUpdateEvent(-260, 0, 0); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- |
- // Since the overscroll mode has been reset, the next scroll update events |
- // should reach the renderer. |
- SimulateGestureScrollUpdateEvent(-20, 0, 0); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
-} |
- |
-// Tests that if a mouse-move event completes the overscroll gesture, future |
-// move events do reach the renderer. |
-TEST_F(RenderWidgetHostTest, OverscrollMouseMoveCompletion) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- SimulateWheelEvent(5, 0, 0, true); // sent directly |
- SimulateWheelEvent(-1, 0, 0, true); // enqueued |
- SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event |
- SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK the first wheel event as not processed. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Receive ACK for the second (coalesced) event as not processed. This will |
- // start an overcroll gesture. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- // Send a mouse-move event. This should cancel the overscroll navigation |
- // (since the amount overscrolled is not above the threshold), and so the |
- // mouse-move should reach the renderer. |
- SimulateMouseMove(5, 10, 0); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- SendInputEventACK(WebInputEvent::MouseMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- // Moving the mouse more should continue to send the events to the renderer. |
- SimulateMouseMove(5, 10, 0); |
- SendInputEventACK(WebInputEvent::MouseMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Now try with gestures. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(300, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- process_->sink().ClearMessages(); |
- |
- // Overscroll gesture is in progress. Send a mouse-move now. This should |
- // complete the gesture (because the amount overscrolled is above the |
- // threshold). |
- SimulateMouseMove(5, 10, 0); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- SendInputEventACK(WebInputEvent::MouseMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Move mouse some more. The mouse-move events should reach the renderer. |
- SimulateMouseMove(5, 10, 0); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- |
- SendInputEventACK(WebInputEvent::MouseMove, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- process_->sink().ClearMessages(); |
-} |
- |
-// Tests that if a page scrolled, then the overscroll controller's states are |
-// reset after the end of the scroll. |
-TEST_F(RenderWidgetHostTest, OverscrollStateResetsAfterScroll) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- SimulateWheelEvent(0, 5, 0, true); // sent directly |
- SimulateWheelEvent(0, 30, 0, true); // enqueued |
- SimulateWheelEvent(0, 40, 0, true); // coalesced into previous event |
- SimulateWheelEvent(0, 10, 0, true); // coalesced into previous event |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // The first wheel event is consumed. Dispatches the queued wheel event. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- EXPECT_TRUE(host_->ScrollStateIsContentScrolling()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // The second wheel event is consumed. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- EXPECT_TRUE(host_->ScrollStateIsContentScrolling()); |
- |
- // Touchpad scroll can end with a zero-velocity fling. But it is not |
- // dispatched, but it should still reset the overscroll controller state. |
- SimulateGestureFlingStartEvent(0.f, 0.f, WebGestureEvent::Touchpad); |
- EXPECT_TRUE(host_->ScrollStateIsUnknown()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- SimulateWheelEvent(-5, 0, 0, true); // sent directly |
- SimulateWheelEvent(-60, 0, 0, true); // enqueued |
- SimulateWheelEvent(-100, 0, 0, true); // coalesced into previous event |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- EXPECT_TRUE(host_->ScrollStateIsUnknown()); |
- process_->sink().ClearMessages(); |
- |
- // The first wheel scroll did not scroll content. Overscroll should not start |
- // yet, since enough hasn't been scrolled. |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_TRUE(host_->ScrollStateIsUnknown()); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- SendInputEventACK(WebInputEvent::MouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); |
- EXPECT_TRUE(host_->ScrollStateIsOverscrolling()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- |
- SimulateGestureFlingStartEvent(0.f, 0.f, WebGestureEvent::Touchpad); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_TRUE(host_->ScrollStateIsUnknown()); |
- EXPECT_EQ(0U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
-} |
- |
-TEST_F(RenderWidgetHostTest, OverscrollResetsOnBlur) { |
- host_->SetupForOverscrollControllerTest(); |
- process_->sink().ClearMessages(); |
- view_->set_bounds(gfx::Rect(0, 0, 400, 200)); |
- view_->Show(); |
- |
- // Start an overscroll with gesture scroll. In the middle of the scroll, blur |
- // the host. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(300, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(2U, process_->sink().message_count()); |
- |
- host_->Blur(); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_x()); |
- EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); |
- process_->sink().ClearMessages(); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(1U, process_->sink().message_count()); |
- process_->sink().ClearMessages(); |
- |
- // Start a scroll gesture again. This should correctly start the overscroll |
- // after the threshold. |
- SimulateGestureEvent(WebInputEvent::GestureScrollBegin, |
- WebGestureEvent::Touchscreen); |
- SimulateGestureScrollUpdateEvent(300, -5, 0); |
- SendInputEventACK(WebInputEvent::GestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
- |
- SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
- WebGestureEvent::Touchscreen); |
- EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
- EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
- EXPECT_EQ(3U, process_->sink().message_count()); |
-} |
- |
std::string GetInputMessageTypes(RenderWidgetHostProcess* process) { |
std::string result; |
for (size_t i = 0; i < process->sink().message_count(); ++i) { |