| Index: content/browser/renderer_host/input/immediate_input_router_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/immediate_input_router_unittest.cc b/content/browser/renderer_host/input/immediate_input_router_unittest.cc
|
| index 371e02e01b32c939dc55e5312d9bc4795bcb9429..3d540e07fe946b37745feb4975de7744046a0e7f 100644
|
| --- a/content/browser/renderer_host/input/immediate_input_router_unittest.cc
|
| +++ b/content/browser/renderer_host/input/immediate_input_router_unittest.cc
|
| @@ -8,6 +8,8 @@
|
| #include "content/browser/renderer_host/input/gesture_event_filter.h"
|
| #include "content/browser/renderer_host/input/immediate_input_router.h"
|
| #include "content/browser/renderer_host/input/input_router_client.h"
|
| +#include "content/browser/renderer_host/input/input_router_unittest.h"
|
| +#include "content/browser/renderer_host/input/mock_input_router_client.h"
|
| #include "content/common/content_constants_internal.h"
|
| #include "content/common/edit_command.h"
|
| #include "content/common/input_messages.h"
|
| @@ -100,266 +102,22 @@ bool EventListIsSubset(const ScopedVector<ui::TouchEvent>& subset,
|
|
|
| } // namespace
|
|
|
| -class MockInputRouterClient : public InputRouterClient {
|
| +class ImmediateInputRouterTest : public InputRouterTest {
|
| public:
|
| - MockInputRouterClient()
|
| - : input_router_(NULL),
|
| - in_flight_event_count_(0),
|
| - has_touch_handler_(false),
|
| - ack_count_(0),
|
| - unexpected_event_ack_called_(false),
|
| - ack_state_(INPUT_EVENT_ACK_STATE_UNKNOWN),
|
| - filter_state_(INPUT_EVENT_ACK_STATE_NOT_CONSUMED),
|
| - is_shortcut_(false),
|
| - allow_send_key_event_(true),
|
| - send_called_(false),
|
| - send_immediately_called_(false) {
|
| - }
|
| - virtual ~MockInputRouterClient() {
|
| - }
|
| -
|
| - // InputRouterClient
|
| - virtual InputEventAckState FilterInputEvent(
|
| - const WebInputEvent& input_event,
|
| - const ui::LatencyInfo& latency_info) OVERRIDE {
|
| - return filter_state_;
|
| - }
|
| -
|
| - // Called each time a WebInputEvent IPC is sent.
|
| - virtual void IncrementInFlightEventCount() OVERRIDE {
|
| - ++in_flight_event_count_;
|
| - }
|
| -
|
| - // Called each time a WebInputEvent ACK IPC is received.
|
| - virtual void DecrementInFlightEventCount() OVERRIDE {
|
| - --in_flight_event_count_;
|
| - }
|
| -
|
| - // Called when the renderer notifies that it has touch event handlers.
|
| - virtual void OnHasTouchEventHandlers(bool has_handlers) OVERRIDE {
|
| - has_touch_handler_ = has_handlers;
|
| - }
|
| -
|
| - virtual bool OnSendKeyboardEvent(
|
| - const NativeWebKeyboardEvent& key_event,
|
| - const ui::LatencyInfo& latency_info,
|
| - bool* is_shortcut) OVERRIDE {
|
| - send_called_ = true;
|
| - sent_key_event_ = key_event;
|
| - *is_shortcut = is_shortcut_;
|
| -
|
| - return allow_send_key_event_;
|
| - }
|
| -
|
| - virtual bool OnSendWheelEvent(
|
| - const MouseWheelEventWithLatencyInfo& wheel_event) OVERRIDE {
|
| - send_called_ = true;
|
| - sent_wheel_event_ = wheel_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnSendMouseEvent(
|
| - const MouseEventWithLatencyInfo& mouse_event) OVERRIDE {
|
| - send_called_ = true;
|
| - sent_mouse_event_ = mouse_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnSendTouchEvent(
|
| - const TouchEventWithLatencyInfo& touch_event) OVERRIDE {
|
| - send_called_ = true;
|
| - sent_touch_event_ = touch_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnSendGestureEvent(
|
| - const GestureEventWithLatencyInfo& gesture_event) OVERRIDE {
|
| - send_called_ = true;
|
| - sent_gesture_event_ = gesture_event;
|
| -
|
| - return input_router_->ShouldForwardGestureEvent(gesture_event);
|
| - }
|
| -
|
| - virtual bool OnSendMouseEventImmediately(
|
| - const MouseEventWithLatencyInfo& mouse_event) OVERRIDE {
|
| - send_immediately_called_ = true;
|
| - immediately_sent_mouse_event_ = mouse_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnSendTouchEventImmediately(
|
| - const TouchEventWithLatencyInfo& touch_event) OVERRIDE {
|
| - send_immediately_called_ = true;
|
| - immediately_sent_touch_event_ = touch_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - virtual bool OnSendGestureEventImmediately(
|
| - const GestureEventWithLatencyInfo& gesture_event) OVERRIDE {
|
| - send_immediately_called_ = true;
|
| - immediately_sent_gesture_event_ = gesture_event;
|
| -
|
| - return true;
|
| - }
|
| -
|
| - // Called upon event ack receipt from the renderer.
|
| - virtual void OnKeyboardEventAck(const NativeWebKeyboardEvent& event,
|
| - InputEventAckState ack_result) OVERRIDE {
|
| - VLOG(1) << __FUNCTION__ << " called!";
|
| - acked_key_event_ = event;
|
| - RecordAckCalled(ack_result);
|
| - }
|
| - virtual void OnWheelEventAck(const WebMouseWheelEvent& event,
|
| - InputEventAckState ack_result) OVERRIDE {
|
| - VLOG(1) << __FUNCTION__ << " called!";
|
| - acked_wheel_event_ = event;
|
| - RecordAckCalled(ack_result);
|
| - }
|
| - virtual void OnTouchEventAck(const TouchEventWithLatencyInfo& event,
|
| - InputEventAckState ack_result) OVERRIDE {
|
| - VLOG(1) << __FUNCTION__ << " called!";
|
| - acked_touch_event_ = event;
|
| - RecordAckCalled(ack_result);
|
| - }
|
| - virtual void OnGestureEventAck(const WebGestureEvent& event,
|
| - InputEventAckState ack_result) OVERRIDE {
|
| - VLOG(1) << __FUNCTION__ << " called!";
|
| - RecordAckCalled(ack_result);
|
| - }
|
| - virtual void OnUnexpectedEventAck(bool bad_message) OVERRIDE {
|
| - VLOG(1) << __FUNCTION__ << " called!";
|
| - unexpected_event_ack_called_ = true;
|
| - }
|
| -
|
| - void ExpectSendCalled(bool called) {
|
| - EXPECT_EQ(called, send_called_);
|
| - send_called_ = false;
|
| - }
|
| - void ExpectSendImmediatelyCalled(bool called) {
|
| - EXPECT_EQ(called, send_immediately_called_);
|
| - send_immediately_called_ = false;
|
| - }
|
| - void ExpectAckCalled(int times) {
|
| - EXPECT_EQ(times, ack_count_);
|
| - ack_count_ = 0;
|
| - }
|
| -
|
| - void set_input_router(InputRouter* input_router) {
|
| - input_router_ = input_router;
|
| - }
|
| - bool has_touch_handler() const { return has_touch_handler_; }
|
| - InputEventAckState ack_state() const { return ack_state_; }
|
| - void set_filter_state(InputEventAckState filter_state) {
|
| - filter_state_ = filter_state;
|
| - }
|
| - bool unexpected_event_ack_called() const {
|
| - return unexpected_event_ack_called_;
|
| - }
|
| - const NativeWebKeyboardEvent& acked_keyboard_event() {
|
| - return acked_key_event_;
|
| - }
|
| - const WebMouseWheelEvent& acked_wheel_event() {
|
| - return acked_wheel_event_;
|
| - }
|
| - const TouchEventWithLatencyInfo& acked_touch_event() {
|
| - return acked_touch_event_;
|
| - }
|
| - void set_is_shortcut(bool is_shortcut) {
|
| - is_shortcut_ = is_shortcut;
|
| - }
|
| - void set_allow_send_key_event(bool allow) {
|
| - allow_send_key_event_ = allow;
|
| - }
|
| - const NativeWebKeyboardEvent& sent_key_event() {
|
| - return sent_key_event_;
|
| - }
|
| - const MouseWheelEventWithLatencyInfo& sent_wheel_event() {
|
| - return sent_wheel_event_;
|
| - }
|
| - const MouseEventWithLatencyInfo& sent_mouse_event() {
|
| - return sent_mouse_event_;
|
| - }
|
| - const GestureEventWithLatencyInfo& sent_gesture_event() {
|
| - return sent_gesture_event_;
|
| - }
|
| - const MouseEventWithLatencyInfo& immediately_sent_mouse_event() {
|
| - return immediately_sent_mouse_event_;
|
| - }
|
| - const TouchEventWithLatencyInfo& immediately_sent_touch_event() {
|
| - return immediately_sent_touch_event_;
|
| - }
|
| - const GestureEventWithLatencyInfo& immediately_sent_gesture_event() {
|
| - return immediately_sent_gesture_event_;
|
| - }
|
| -
|
| - private:
|
| - void RecordAckCalled(InputEventAckState ack_result) {
|
| - ++ack_count_;
|
| - ack_state_ = ack_result;
|
| - }
|
| -
|
| - InputRouter* input_router_;
|
| - int in_flight_event_count_;
|
| - bool has_touch_handler_;
|
| -
|
| - int ack_count_;
|
| - bool unexpected_event_ack_called_;
|
| - InputEventAckState ack_state_;
|
| - InputEventAckState filter_state_;
|
| - NativeWebKeyboardEvent acked_key_event_;
|
| - WebMouseWheelEvent acked_wheel_event_;
|
| - TouchEventWithLatencyInfo acked_touch_event_;
|
| -
|
| - bool is_shortcut_;
|
| - bool allow_send_key_event_;
|
| - bool send_called_;
|
| - NativeWebKeyboardEvent sent_key_event_;
|
| - MouseWheelEventWithLatencyInfo sent_wheel_event_;
|
| - MouseEventWithLatencyInfo sent_mouse_event_;
|
| - TouchEventWithLatencyInfo sent_touch_event_;
|
| - GestureEventWithLatencyInfo sent_gesture_event_;
|
| -
|
| - bool send_immediately_called_;
|
| - MouseEventWithLatencyInfo immediately_sent_mouse_event_;
|
| - TouchEventWithLatencyInfo immediately_sent_touch_event_;
|
| - GestureEventWithLatencyInfo immediately_sent_gesture_event_;
|
| -};
|
| -
|
| -class ImmediateInputRouterTest : public testing::Test {
|
| - public:
|
| - ImmediateInputRouterTest() {
|
| - }
|
| - virtual ~ImmediateInputRouterTest() {
|
| - }
|
| + ImmediateInputRouterTest() {}
|
| + virtual ~ImmediateInputRouterTest() {}
|
|
|
| protected:
|
| - // testing::Test
|
| - virtual void SetUp() {
|
| - browser_context_.reset(new TestBrowserContext());
|
| - process_.reset(new MockRenderProcessHost(browser_context_.get()));
|
| - client_.reset(new MockInputRouterClient());
|
| - input_router_.reset(new ImmediateInputRouter(
|
| - process_.get(),
|
| - client_.get(),
|
| - MSG_ROUTING_NONE));
|
| - client_->set_input_router(input_router_.get());
|
| - }
|
| - virtual void TearDown() {
|
| - // Process all pending tasks to avoid leaks.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - input_router_.reset();
|
| - client_.reset();
|
| - process_.reset();
|
| - browser_context_.reset();
|
| + // InputRouterTest
|
| + virtual scoped_ptr<InputRouter> CreateInputRouter(RenderProcessHost* process,
|
| + InputRouterClient* client,
|
| + InputAckHandler* handler,
|
| + int routing_id) OVERRIDE {
|
| + return scoped_ptr<InputRouter>(
|
| + new ImmediateInputRouter(process, client, handler, routing_id));
|
| }
|
|
|
| - void SendInputEventACK(WebInputEvent::Type type,
|
| + void SendInputEventACK(WebKit::WebInputEvent::Type type,
|
| InputEventAckState ack_result) {
|
| scoped_ptr<IPC::Message> response(
|
| new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result,
|
| @@ -367,177 +125,16 @@ class ImmediateInputRouterTest : public testing::Test {
|
| input_router_->OnMessageReceived(*response);
|
| }
|
|
|
| - void SimulateKeyboardEvent(WebInputEvent::Type type) {
|
| - NativeWebKeyboardEvent key_event;
|
| - key_event.type = type;
|
| - key_event.windowsKeyCode = ui::VKEY_L; // non-null made up value.
|
| - input_router_->SendKeyboardEvent(key_event, ui::LatencyInfo());
|
| - client_->ExpectSendCalled(true);
|
| - EXPECT_EQ(type, client_->sent_key_event().type);
|
| - EXPECT_EQ(key_event.windowsKeyCode,
|
| - client_->sent_key_event().windowsKeyCode);
|
| - }
|
| -
|
| - void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) {
|
| - WebMouseWheelEvent wheel_event;
|
| - wheel_event.type = WebInputEvent::MouseWheel;
|
| - wheel_event.deltaX = dX;
|
| - wheel_event.deltaY = dY;
|
| - wheel_event.modifiers = modifiers;
|
| - wheel_event.hasPreciseScrollingDeltas = precise;
|
| - input_router_->SendWheelEvent(
|
| - MouseWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo()));
|
| - client_->ExpectSendCalled(true);
|
| - EXPECT_EQ(wheel_event.type, client_->sent_wheel_event().event.type);
|
| - EXPECT_EQ(dX, client_->sent_wheel_event().event.deltaX);
|
| - }
|
| -
|
| - void SimulateMouseMove(int x, int y, int modifiers) {
|
| - WebMouseEvent mouse_event;
|
| - mouse_event.type = WebInputEvent::MouseMove;
|
| - mouse_event.x = mouse_event.windowX = x;
|
| - mouse_event.y = mouse_event.windowY = y;
|
| - mouse_event.modifiers = modifiers;
|
| - input_router_->SendMouseEvent(
|
| - MouseEventWithLatencyInfo(mouse_event, ui::LatencyInfo()));
|
| - client_->ExpectSendCalled(true);
|
| - client_->ExpectSendImmediatelyCalled(true);
|
| - EXPECT_EQ(mouse_event.type, client_->sent_mouse_event().event.type);
|
| - EXPECT_EQ(x, client_->sent_mouse_event().event.x);
|
| - EXPECT_EQ(mouse_event.type,
|
| - client_->immediately_sent_mouse_event().event.type);
|
| - EXPECT_EQ(x, client_->immediately_sent_mouse_event().event.x);
|
| - }
|
| -
|
| - void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) {
|
| - WebMouseWheelEvent wheel_event;
|
| - wheel_event.type = WebInputEvent::MouseWheel;
|
| - wheel_event.phase = phase;
|
| - input_router_->SendWheelEvent(
|
| - MouseWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo()));
|
| - client_->ExpectSendCalled(true);
|
| - EXPECT_EQ(wheel_event.type, client_->sent_wheel_event().event.type);
|
| - EXPECT_EQ(phase, client_->sent_wheel_event().event.phase);
|
| - }
|
| -
|
| - // Inject provided synthetic WebGestureEvent instance.
|
| - void SimulateGestureEventCore(WebInputEvent::Type type,
|
| - WebGestureEvent::SourceDevice sourceDevice,
|
| - WebGestureEvent* gesture_event) {
|
| - gesture_event->type = type;
|
| - gesture_event->sourceDevice = sourceDevice;
|
| - GestureEventWithLatencyInfo gesture_with_latency(
|
| - *gesture_event, ui::LatencyInfo());
|
| - input_router_->SendGestureEvent(gesture_with_latency);
|
| - client_->ExpectSendCalled(true);
|
| - EXPECT_EQ(type, client_->sent_gesture_event().event.type);
|
| - EXPECT_EQ(sourceDevice, client_->sent_gesture_event().event.sourceDevice);
|
| - }
|
| -
|
| - // Inject simple synthetic WebGestureEvent instances.
|
| - void SimulateGestureEvent(WebInputEvent::Type type,
|
| - WebGestureEvent::SourceDevice sourceDevice) {
|
| - WebGestureEvent gesture_event;
|
| - SimulateGestureEventCore(type, sourceDevice, &gesture_event);
|
| - }
|
| -
|
| - void SimulateGestureScrollUpdateEvent(float dX, float dY, int modifiers) {
|
| - WebGestureEvent gesture_event;
|
| - gesture_event.data.scrollUpdate.deltaX = dX;
|
| - gesture_event.data.scrollUpdate.deltaY = dY;
|
| - gesture_event.modifiers = modifiers;
|
| - SimulateGestureEventCore(WebInputEvent::GestureScrollUpdate,
|
| - WebGestureEvent::Touchscreen, &gesture_event);
|
| - }
|
| -
|
| - void SimulateGesturePinchUpdateEvent(float scale,
|
| - float anchorX,
|
| - float anchorY,
|
| - int modifiers) {
|
| - WebGestureEvent gesture_event;
|
| - gesture_event.data.pinchUpdate.scale = scale;
|
| - gesture_event.x = anchorX;
|
| - gesture_event.y = anchorY;
|
| - gesture_event.modifiers = modifiers;
|
| - SimulateGestureEventCore(WebInputEvent::GesturePinchUpdate,
|
| - WebGestureEvent::Touchscreen, &gesture_event);
|
| - }
|
| -
|
| - // Inject synthetic GestureFlingStart events.
|
| - void SimulateGestureFlingStartEvent(
|
| - float velocityX,
|
| - float velocityY,
|
| - WebGestureEvent::SourceDevice sourceDevice) {
|
| - WebGestureEvent gesture_event;
|
| - gesture_event.data.flingStart.velocityX = velocityX;
|
| - gesture_event.data.flingStart.velocityY = velocityY;
|
| - SimulateGestureEventCore(WebInputEvent::GestureFlingStart, sourceDevice,
|
| - &gesture_event);
|
| - }
|
| -
|
| - // Set the timestamp for the touch-event.
|
| - void SetTouchTimestamp(base::TimeDelta timestamp) {
|
| - touch_event_.timeStampSeconds = timestamp.InSecondsF();
|
| - }
|
| -
|
| - // Sends a touch event (irrespective of whether the page has a touch-event
|
| - // handler or not).
|
| - void SendTouchEvent() {
|
| - input_router_->SendTouchEvent(
|
| - TouchEventWithLatencyInfo(touch_event_, ui::LatencyInfo()));
|
| -
|
| - // Mark all the points as stationary. And remove the points that have been
|
| - // released.
|
| - int point = 0;
|
| - for (unsigned int i = 0; i < touch_event_.touchesLength; ++i) {
|
| - if (touch_event_.touches[i].state == WebTouchPoint::StateReleased)
|
| - continue;
|
| -
|
| - touch_event_.touches[point] = touch_event_.touches[i];
|
| - touch_event_.touches[point].state =
|
| - WebTouchPoint::StateStationary;
|
| - ++point;
|
| - }
|
| - touch_event_.touchesLength = point;
|
| - touch_event_.type = WebInputEvent::Undefined;
|
| - }
|
| -
|
| - int PressTouchPoint(int x, int y) {
|
| - if (touch_event_.touchesLength == touch_event_.touchesLengthCap)
|
| - return -1;
|
| - WebTouchPoint& point =
|
| - touch_event_.touches[touch_event_.touchesLength];
|
| - point.id = touch_event_.touchesLength;
|
| - point.position.x = point.screenPosition.x = x;
|
| - point.position.y = point.screenPosition.y = y;
|
| - point.state = WebTouchPoint::StatePressed;
|
| - point.radiusX = point.radiusY = 1.f;
|
| - ++touch_event_.touchesLength;
|
| - touch_event_.type = WebInputEvent::TouchStart;
|
| - return point.id;
|
| - }
|
| -
|
| - void MoveTouchPoint(int index, int x, int y) {
|
| - CHECK(index >= 0 && index < touch_event_.touchesLengthCap);
|
| - WebTouchPoint& point = touch_event_.touches[index];
|
| - point.position.x = point.screenPosition.x = x;
|
| - point.position.y = point.screenPosition.y = y;
|
| - touch_event_.touches[index].state = WebTouchPoint::StateMoved;
|
| - touch_event_.type = WebInputEvent::TouchMove;
|
| - }
|
| -
|
| - void ReleaseTouchPoint(int index) {
|
| - CHECK(index >= 0 && index < touch_event_.touchesLengthCap);
|
| - touch_event_.touches[index].state = WebTouchPoint::StateReleased;
|
| - touch_event_.type = WebInputEvent::TouchEnd;
|
| + ImmediateInputRouter* input_router() const {
|
| + return static_cast<ImmediateInputRouter*>(input_router_.get());
|
| }
|
|
|
| void set_debounce_interval_time_ms(int ms) {
|
| - input_router_->gesture_event_filter()->debounce_interval_time_ms_ = ms;
|
| + input_router()->gesture_event_filter()->debounce_interval_time_ms_ = ms;
|
| }
|
|
|
| void set_maximum_tap_gap_time_ms(int delay_ms) {
|
| - input_router_->gesture_event_filter()->maximum_tap_gap_time_ms_ = delay_ms;
|
| + input_router()->gesture_event_filter()->maximum_tap_gap_time_ms_ = delay_ms;
|
| }
|
|
|
| size_t TouchEventQueueSize() {
|
| @@ -549,7 +146,7 @@ class ImmediateInputRouterTest : public testing::Test {
|
| }
|
|
|
| void EnableNoTouchToRendererWhileScrolling() {
|
| - input_router_->enable_no_touch_to_renderer_while_scrolling_ = true;
|
| + input_router()->enable_no_touch_to_renderer_while_scrolling_ = true;
|
| }
|
|
|
| bool no_touch_move_to_renderer() {
|
| @@ -557,7 +154,7 @@ class ImmediateInputRouterTest : public testing::Test {
|
| }
|
|
|
| TouchEventQueue* touch_event_queue() const {
|
| - return input_router_->touch_event_queue();
|
| + return input_router()->touch_event_queue();
|
| }
|
|
|
| unsigned GestureEventLastQueueEventSize() {
|
| @@ -598,18 +195,8 @@ class ImmediateInputRouterTest : public testing::Test {
|
| }
|
|
|
| GestureEventFilter* gesture_event_filter() const {
|
| - return input_router_->gesture_event_filter();
|
| + return input_router()->gesture_event_filter();
|
| }
|
| -
|
| - scoped_ptr<MockRenderProcessHost> process_;
|
| - scoped_ptr<MockInputRouterClient> client_;
|
| - scoped_ptr<ImmediateInputRouter> input_router_;
|
| -
|
| - private:
|
| - base::MessageLoopForUI message_loop_;
|
| - WebTouchEvent touch_event_;
|
| -
|
| - scoped_ptr<TestBrowserContext> browser_context_;
|
| };
|
|
|
| #if GTEST_HAS_PARAM_TEST
|
| @@ -621,8 +208,8 @@ class ImmediateInputRouterWithSourceTest
|
| #endif // GTEST_HAS_PARAM_TEST
|
|
|
| TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) {
|
| - input_router_->SendInput(
|
| - new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4)));
|
| + input_router_->SendInput(scoped_ptr<IPC::Message>(
|
| + new InputMsg_SelectRange(0, gfx::Point(1, 2), gfx::Point(3, 4))));
|
| EXPECT_EQ(1u, process_->sink().message_count());
|
| ExpectIPCMessageWithArg2<InputMsg_SelectRange>(
|
| process_->sink().GetMessageAt(0),
|
| @@ -631,12 +218,12 @@ TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) {
|
| process_->sink().ClearMessages();
|
|
|
| // Send two more messages without acking.
|
| - input_router_->SendInput(
|
| - new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8)));
|
| + input_router_->SendInput(scoped_ptr<IPC::Message>(
|
| + new InputMsg_SelectRange(0, gfx::Point(5, 6), gfx::Point(7, 8))));
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
|
|
| - input_router_->SendInput(
|
| - new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12)));
|
| + input_router_->SendInput(scoped_ptr<IPC::Message>(
|
| + new InputMsg_SelectRange(0, gfx::Point(9, 10), gfx::Point(11, 12))));
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
|
|
| // Now ack the first message.
|
| @@ -662,17 +249,20 @@ TEST_F(ImmediateInputRouterTest, CoalescesRangeSelection) {
|
| }
|
|
|
| TEST_F(ImmediateInputRouterTest, CoalescesCaretMove) {
|
| - input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(1, 2)));
|
| + input_router_->SendInput(
|
| + scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(1, 2))));
|
| EXPECT_EQ(1u, process_->sink().message_count());
|
| ExpectIPCMessageWithArg1<InputMsg_MoveCaret>(
|
| process_->sink().GetMessageAt(0), gfx::Point(1, 2));
|
| process_->sink().ClearMessages();
|
|
|
| // Send two more messages without acking.
|
| - input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(5, 6)));
|
| + input_router_->SendInput(
|
| + scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(5, 6))));
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
|
|
| - input_router_->SendInput(new InputMsg_MoveCaret(0, gfx::Point(9, 10)));
|
| + input_router_->SendInput(
|
| + scoped_ptr<IPC::Message>(new InputMsg_MoveCaret(0, gfx::Point(9, 10))));
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
|
|
| // Now ack the first message.
|
| @@ -705,7 +295,7 @@ TEST_F(ImmediateInputRouterTest, HandledInputEvent) {
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
|
|
| // OnKeyboardEventAck should be triggered without actual ack.
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
|
|
| // As the event was acked already, keyboard event queue should be
|
| // empty.
|
| @@ -713,14 +303,14 @@ TEST_F(ImmediateInputRouterTest, HandledInputEvent) {
|
| }
|
|
|
| TEST_F(ImmediateInputRouterTest, ClientCanceledKeyboardEvent) {
|
| - client_->set_allow_send_key_event(false);
|
| + client_->set_allow_send_event(false);
|
|
|
| // Simulate a keyboard event.
|
| SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
|
|
|
| // Make sure no input event is sent to the renderer.
|
| EXPECT_EQ(0u, process_->sink().message_count());
|
| - client_->ExpectAckCalled(0);
|
| + ack_handler_->ExpectAckCalled(0);
|
| }
|
|
|
| TEST_F(ImmediateInputRouterTest, ShortcutKeyboardEvent) {
|
| @@ -742,7 +332,7 @@ TEST_F(ImmediateInputRouterTest, NoncorrespondingKeyEvents) {
|
|
|
| SendInputEventACK(WebInputEvent::KeyUp,
|
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| - EXPECT_TRUE(client_->unexpected_event_ack_called());
|
| + EXPECT_TRUE(ack_handler_->unexpected_event_ack_called());
|
| }
|
|
|
| // Tests ported from RenderWidgetHostTest --------------------------------------
|
| @@ -762,8 +352,9 @@ TEST_F(ImmediateInputRouterTest, HandleKeyEventsWeSent) {
|
| // Send the simulated response from the renderer back.
|
| SendInputEventACK(WebInputEvent::RawKeyDown,
|
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| - client_->ExpectAckCalled(1);
|
| - EXPECT_EQ(WebInputEvent::RawKeyDown, client_->acked_keyboard_event().type);
|
| + ack_handler_->ExpectAckCalled(1);
|
| + EXPECT_EQ(WebInputEvent::RawKeyDown,
|
| + ack_handler_->acked_keyboard_event().type);
|
| }
|
|
|
| TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) {
|
| @@ -771,7 +362,7 @@ TEST_F(ImmediateInputRouterTest, IgnoreKeyEventsWeDidntSend) {
|
| SendInputEventACK(WebInputEvent::RawKeyDown,
|
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
|
|
| - client_->ExpectAckCalled(0);
|
| + ack_handler_->ExpectAckCalled(0);
|
| }
|
|
|
| TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) {
|
| @@ -794,7 +385,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) {
|
| // so that additional input events can be processed before
|
| // we turn off coalescing.
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| InputMsg_HandleInputEvent::ID));
|
| @@ -804,7 +395,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) {
|
| SendInputEventACK(WebInputEvent::MouseWheel,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| InputMsg_HandleInputEvent::ID));
|
| @@ -814,7 +405,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesWheelEvents) {
|
| SendInputEventACK(WebInputEvent::MouseWheel,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
|
|
| // FIXME(kouhei): Below is testing gesture event filter. Maybe separate test?
|
| @@ -917,7 +508,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesScrollGestureEvents) {
|
| SendInputEventACK(WebInputEvent::GestureScrollBegin,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| InputMsg_HandleInputEvent::ID));
|
| @@ -927,7 +518,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesScrollGestureEvents) {
|
| SendInputEventACK(WebInputEvent::GestureScrollUpdate,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| InputMsg_HandleInputEvent::ID));
|
| @@ -937,7 +528,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesScrollGestureEvents) {
|
| SendInputEventACK(WebInputEvent::GestureScrollUpdate,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| InputMsg_HandleInputEvent::ID));
|
| @@ -947,7 +538,7 @@ TEST_F(ImmediateInputRouterTest, CoalescesScrollGestureEvents) {
|
| SendInputEventACK(WebInputEvent::GestureScrollEnd,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| }
|
|
|
| @@ -1200,14 +791,14 @@ TEST_P(ImmediateInputRouterWithSourceTest, GestureFlingCancelsFiltered) {
|
| SendInputEventACK(WebInputEvent::GestureFlingStart,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
|
| EXPECT_FALSE(FlingInProgress());
|
| EXPECT_EQ(2U, process_->sink().message_count());
|
| SendInputEventACK(WebInputEvent::GestureFlingCancel,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(0U, GestureEventLastQueueEventSize());
|
|
|
| // GFC before previous GFS is acked.
|
| @@ -1226,7 +817,7 @@ TEST_P(ImmediateInputRouterWithSourceTest, GestureFlingCancelsFiltered) {
|
| SendInputEventACK(WebInputEvent::GestureFlingCancel,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| base::MessageLoop::current()->RunUntilIdle();
|
| - client_->ExpectAckCalled(2);
|
| + ack_handler_->ExpectAckCalled(2);
|
| EXPECT_EQ(0U, GestureEventLastQueueEventSize());
|
|
|
| // GFS is added to the queue if another event is pending
|
| @@ -1571,18 +1162,18 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueue) {
|
| SendInputEventACK(WebInputEvent::TouchStart,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(1U, TouchEventQueueSize());
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(WebInputEvent::TouchStart,
|
| - client_->acked_touch_event().event.type);
|
| + ack_handler_->acked_touch_event().event.type);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| process_->sink().ClearMessages();
|
|
|
| SendInputEventACK(WebInputEvent::TouchMove,
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(0U, TouchEventQueueSize());
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(WebInputEvent::TouchMove,
|
| - client_->acked_touch_event().event.type);
|
| + ack_handler_->acked_touch_event().event.type);
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| }
|
|
|
| @@ -1623,8 +1214,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueFlush) {
|
| INPUT_EVENT_ACK_STATE_CONSUMED);
|
| EXPECT_EQ(31U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchStart,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| process_->sink().ClearMessages();
|
|
|
| @@ -1671,8 +1262,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueCoalesce) {
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_EQ(2U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchStart,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(1);
|
| process_->sink().ClearMessages();
|
|
|
| // Coalesced touch-move events should be sent.
|
| @@ -1686,8 +1277,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueCoalesce) {
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_EQ(1U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchMove,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(10);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(10);
|
| process_->sink().ClearMessages();
|
|
|
| // ACK the release.
|
| @@ -1696,8 +1287,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueCoalesce) {
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| EXPECT_EQ(0U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchEnd,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(1);
|
| }
|
|
|
| // Tests that an event that has already been sent but hasn't been ack'ed yet
|
| @@ -1852,8 +1443,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueNoConsumer) {
|
| INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchMove,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(2);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(2);
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| process_->sink().ClearMessages();
|
|
|
| @@ -1862,8 +1453,8 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueNoConsumer) {
|
| SendTouchEvent();
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| EXPECT_EQ(WebInputEvent::TouchEnd,
|
| - client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(1);
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(1);
|
|
|
| // Send a press-event, followed by move and release events, and another press
|
| // event, before the ACK for the first press event comes back. All of the
|
| @@ -1891,8 +1482,9 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueNoConsumer) {
|
| SendInputEventACK(WebInputEvent::TouchStart,
|
| INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| - EXPECT_EQ(WebInputEvent::TouchEnd, client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(4);
|
| + EXPECT_EQ(WebInputEvent::TouchEnd,
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(4);
|
| EXPECT_EQ(1U, TouchEventQueueSize());
|
| process_->sink().ClearMessages();
|
|
|
| @@ -1900,8 +1492,9 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueNoConsumer) {
|
| SendInputEventACK(WebInputEvent::TouchStart,
|
| INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| - EXPECT_EQ(WebInputEvent::TouchStart, client_->acked_touch_event().event.type);
|
| - client_->ExpectAckCalled(1);
|
| + EXPECT_EQ(WebInputEvent::TouchStart,
|
| + ack_handler_->acked_touch_event().event.type);
|
| + ack_handler_->ExpectAckCalled(1);
|
| EXPECT_EQ(0U, TouchEventQueueSize());
|
|
|
| // Send a second press event. Even though the first touch had NO_CONSUMER,
|
| @@ -2038,7 +1631,7 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueConsumerIgnoreMultiFinger) {
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| EXPECT_EQ(2U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchMove,
|
| - client_->acked_touch_event().event.type);
|
| + ack_handler_->acked_touch_event().event.type);
|
| process_->sink().ClearMessages();
|
|
|
| // ACK the press with NO_CONSUMED_EXISTS. This should release the queued
|
| @@ -2048,7 +1641,7 @@ TEST_F(ImmediateInputRouterTest, TouchEventQueueConsumerIgnoreMultiFinger) {
|
| EXPECT_EQ(0U, process_->sink().message_count());
|
| EXPECT_EQ(0U, TouchEventQueueSize());
|
| EXPECT_EQ(WebInputEvent::TouchMove,
|
| - client_->acked_touch_event().event.type);
|
| + ack_handler_->acked_touch_event().event.type);
|
|
|
| ReleaseTouchPoint(2);
|
| ReleaseTouchPoint(1);
|
| @@ -2126,11 +1719,11 @@ TEST_F(ImmediateInputRouterTest, AckedTouchEventState) {
|
| for (size_t i = 0; i < arraysize(acks); ++i) {
|
| SendInputEventACK(acks[i],
|
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| - EXPECT_EQ(acks[i], client_->acked_touch_event().event.type);
|
| + EXPECT_EQ(acks[i], ack_handler_->acked_touch_event().event.type);
|
| ScopedVector<ui::TouchEvent> acked;
|
|
|
| MakeUITouchEventsFromWebTouchEvents(
|
| - client_->acked_touch_event(), &acked, coordinate_system);
|
| + ack_handler_->acked_touch_event(), &acked, coordinate_system);
|
| bool success = EventListIsSubset(acked, expected_events);
|
| EXPECT_TRUE(success) << "Failed on step: " << i;
|
| if (!success)
|
| @@ -2159,9 +1752,9 @@ TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) {
|
| INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
|
|
| // Check that the correct unhandled wheel event was received.
|
| - client_->ExpectAckCalled(1);
|
| - EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, client_->ack_state());
|
| - EXPECT_EQ(client_->acked_wheel_event().deltaY, -5);
|
| + ack_handler_->ExpectAckCalled(1);
|
| + EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state());
|
| + EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
|
|
|
| // Check that the second event was sent.
|
| EXPECT_EQ(1U, process_->sink().message_count());
|
| @@ -2170,7 +1763,7 @@ TEST_F(ImmediateInputRouterTest, UnhandledWheelEvent) {
|
| process_->sink().ClearMessages();
|
|
|
| // Check that the correct unhandled wheel event was received.
|
| - EXPECT_EQ(client_->acked_wheel_event().deltaY, -5);
|
| + EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
|
| }
|
|
|
| // Tests that no touch move events are sent to renderer during scrolling.
|
|
|