Commit 9fd9e2c0 authored by Xida Chen's avatar Xida Chen Committed by Commit Bot

Set touch action Auto if there is no touch action with Ack

When the kCompositorTouchAction flag is enabled, and browser receives
the touch start ack from the compositor, if there is no white listed
touch action, then the touch start must be non-blocking, thus setting
the touch action to Auto.

Unit tests are modified to account for this change.

Bug: 907959
Change-Id: Ife589533a959ccce1376926e14935639341f32ea
Reviewed-on: https://chromium-review.googlesource.com/c/1349673Reviewed-by: default avatarNavid Zolghadr <nzolghadr@chromium.org>
Commit-Queue: Xida Chen <xidachen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611092}
parent b8f08357
...@@ -381,7 +381,7 @@ void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event, ...@@ -381,7 +381,7 @@ void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event,
base::NumberToString(event.event.unique_touch_event_id).c_str()); base::NumberToString(event.event.unique_touch_event_id).c_str());
touch_action_filter_.IncreaseActiveTouches(); touch_action_filter_.IncreaseActiveTouches();
if ((compositor_touch_action_enabled_ && if ((compositor_touch_action_enabled_ &&
ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) || !touch_action_filter_.white_listed_touch_action().has_value()) ||
(!compositor_touch_action_enabled_ && (!compositor_touch_action_enabled_ &&
!touch_action_filter_.allowed_touch_action().has_value())) { !touch_action_filter_.allowed_touch_action().has_value())) {
touch_action_filter_.OnSetTouchAction(cc::kTouchActionAuto); touch_action_filter_.OnSetTouchAction(cc::kTouchActionAuto);
......
...@@ -437,6 +437,7 @@ class InputRouterImplTestBase : public testing::Test { ...@@ -437,6 +437,7 @@ class InputRouterImplTestBase : public testing::Test {
} }
void OnTouchEventAckWithAckState( void OnTouchEventAckWithAckState(
InputEventAckSource source,
InputEventAckState ack_state, InputEventAckState ack_state,
base::Optional<cc::TouchAction> expected_touch_action) { base::Optional<cc::TouchAction> expected_touch_action) {
input_router_->OnHasTouchEventHandlers(true); input_router_->OnHasTouchEventHandlers(true);
...@@ -444,7 +445,7 @@ class InputRouterImplTestBase : public testing::Test { ...@@ -444,7 +445,7 @@ class InputRouterImplTestBase : public testing::Test {
PressTouchPoint(1, 1); PressTouchPoint(1, 1);
input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_)); input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_));
input_router_->OnTouchEventAck(TouchEventWithLatencyInfo(touch_event_), input_router_->OnTouchEventAck(TouchEventWithLatencyInfo(touch_event_),
InputEventAckSource::BROWSER, ack_state); source, ack_state);
EXPECT_EQ(input_router_->AllowedTouchAction(), expected_touch_action); EXPECT_EQ(input_router_->AllowedTouchAction(), expected_touch_action);
} }
...@@ -674,53 +675,61 @@ TEST_P(InputRouterImplTest, ActiveTouchSequenceCountWithTouchActionNoConsumer) { ...@@ -674,53 +675,61 @@ TEST_P(InputRouterImplTest, ActiveTouchSequenceCountWithTouchActionNoConsumer) {
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateConsumed) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateConsumed) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_CONSUMED, touch_action); OnTouchEventAckWithAckState(source, INPUT_EVENT_ACK_STATE_CONSUMED,
cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNotConsumed) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNotConsumed) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_action); OnTouchEventAckWithAckState(source, INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateConsumedShouldBubble) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateConsumedShouldBubble) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_CONSUMED_SHOULD_BUBBLE, OnTouchEventAckWithAckState(source,
touch_action); INPUT_EVENT_ACK_STATE_CONSUMED_SHOULD_BUBBLE,
cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNoConsumerExists) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNoConsumerExists) {
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, InputEventAckSource source = compositor_touch_action_enabled_
? InputEventAckSource::COMPOSITOR_THREAD
: InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(source, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
cc::kTouchActionAuto); cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateIgnored) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateIgnored) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_IGNORED, touch_action); OnTouchEventAckWithAckState(source, INPUT_EVENT_ACK_STATE_IGNORED,
cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNonBlocking) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNonBlocking) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING, OnTouchEventAckWithAckState(source, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING,
touch_action); cc::kTouchActionAuto);
} }
TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNonBlockingDueToFling) { TEST_P(InputRouterImplTest, TouchActionAutoWithAckStateNonBlockingDueToFling) {
base::Optional<cc::TouchAction> touch_action = InputEventAckSource source = compositor_touch_action_enabled_
compositor_touch_action_enabled_ ? base::Optional<cc::TouchAction>() ? InputEventAckSource::COMPOSITOR_THREAD
: cc::kTouchActionAuto; : InputEventAckSource::MAIN_THREAD;
OnTouchEventAckWithAckState( OnTouchEventAckWithAckState(
INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING, touch_action); source, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING,
cc::kTouchActionAuto);
} }
// Tests that touch-events are sent properly. // Tests that touch-events are sent properly.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment