Commit f220adde authored by Ella Ge's avatar Ella Ge Committed by Commit Bot

WebMouse/PointerEvent CanCoalesce check modifiers

WebMouseEvent and PointerEvent coalescing need to check modifiers too.
This CL adds the missing checks and tests.

Bug: 973959
Change-Id: I68255000db9d5f7fe4df52189d4f5a7263810d43
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1659197Reviewed-by: default avatarNavid Zolghadr <nzolghadr@chromium.org>
Commit-Queue: Ella Ge <eirage@chromium.org>
Cr-Commit-Position: refs/heads/master@{#669008}
parent 863e7d3f
......@@ -268,6 +268,7 @@ bool CanCoalesce(const WebPointerEvent& event_to_coalesce,
return (event.GetType() == WebInputEvent::kPointerMove ||
event.GetType() == WebInputEvent::kPointerRawUpdate) &&
event.GetType() == event_to_coalesce.GetType() &&
event.GetModifiers() == event_to_coalesce.GetModifiers() &&
event.id == event_to_coalesce.id &&
event.pointer_type == event_to_coalesce.pointer_type;
}
......@@ -290,6 +291,7 @@ bool CanCoalesce(const WebMouseEvent& event_to_coalesce,
// coalescing mouse events.
return event.GetType() == WebInputEvent::kMouseMove &&
event.GetType() == event_to_coalesce.GetType() &&
event.GetModifiers() == event_to_coalesce.GetModifiers() &&
event.id == event_to_coalesce.id &&
event.pointer_type == event_to_coalesce.pointer_type;
}
......
......@@ -10,10 +10,43 @@
#include "third_party/blink/public/platform/web_gesture_event.h"
#include "third_party/blink/public/platform/web_input_event.h"
#include "third_party/blink/public/platform/web_mouse_wheel_event.h"
#include "third_party/blink/public/platform/web_pointer_event.h"
#include "ui/events/gesture_event_details.h"
namespace ui {
namespace {
blink::WebMouseEvent CreateWebMouseMoveEvent() {
blink::WebMouseEvent mouse_event;
mouse_event.SetType(blink::WebInputEvent::kMouseMove);
mouse_event.id = 1;
mouse_event.pointer_type = blink::WebPointerProperties::PointerType::kMouse;
return mouse_event;
}
blink::WebPointerEvent CreateWebPointerMoveEvent() {
blink::WebPointerEvent pointer_event;
pointer_event.SetType(blink::WebInputEvent::kPointerMove);
pointer_event.id = 1;
pointer_event.pointer_type = blink::WebPointerProperties::PointerType::kMouse;
return pointer_event;
}
blink::WebTouchEvent CreateWebTouchMoveEvent() {
blink::WebTouchPoint touch_point;
touch_point.id = 1;
touch_point.state = blink::WebTouchPoint::kStateMoved;
touch_point.pointer_type = blink::WebPointerProperties::PointerType::kTouch;
blink::WebTouchEvent touch_event;
touch_event.SetType(blink::WebInputEvent::kTouchMove);
touch_event.touches[touch_event.touches_length++] = touch_point;
return touch_event;
}
} // namespace
using BlinkEventUtilTest = testing::Test;
TEST(BlinkEventUtilTest, NoScalingWith1DSF) {
......@@ -173,23 +206,14 @@ TEST(BlinkEventUtilTest, LineAndDocumentScrollEvents) {
}
TEST(BlinkEventUtilTest, TouchEventCoalescing) {
blink::WebTouchPoint touch_point;
touch_point.id = 1;
touch_point.state = blink::WebTouchPoint::kStateMoved;
touch_point.pointer_type = blink::WebPointerProperties::PointerType::kTouch;
blink::WebTouchEvent coalesced_event;
blink::WebTouchEvent coalesced_event = CreateWebTouchMoveEvent();
coalesced_event.SetType(blink::WebInputEvent::kTouchMove);
touch_point.movement_x = 5;
touch_point.movement_y = 10;
coalesced_event.touches[coalesced_event.touches_length++] = touch_point;
coalesced_event.touches[0].movement_x = 5;
coalesced_event.touches[0].movement_y = 10;
blink::WebTouchEvent event_to_be_coalesced;
event_to_be_coalesced.SetType(blink::WebInputEvent::kTouchMove);
touch_point.movement_x = 3;
touch_point.movement_y = -4;
event_to_be_coalesced.touches[event_to_be_coalesced.touches_length++] =
touch_point;
blink::WebTouchEvent event_to_be_coalesced = CreateWebTouchMoveEvent();
event_to_be_coalesced.touches[0].movement_x = 3;
event_to_be_coalesced.touches[0].movement_y = -4;
EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
Coalesce(event_to_be_coalesced, &coalesced_event);
......@@ -199,6 +223,11 @@ TEST(BlinkEventUtilTest, TouchEventCoalescing) {
coalesced_event.touches[0].pointer_type =
blink::WebPointerProperties::PointerType::kPen;
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
coalesced_event = CreateWebTouchMoveEvent();
event_to_be_coalesced = CreateWebTouchMoveEvent();
event_to_be_coalesced.SetModifiers(blink::WebInputEvent::kControlKey);
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
}
TEST(BlinkEventUtilTest, WebMouseWheelEventCoalescing) {
......@@ -321,33 +350,75 @@ TEST(BlinkEventUtilTest, GesturePinchUpdateCoalescing) {
}
TEST(BlinkEventUtilTest, MouseEventCoalescing) {
blink::WebMouseEvent coalesced_event;
coalesced_event.SetType(blink::WebInputEvent::kMouseMove);
blink::WebMouseEvent coalesced_event = CreateWebMouseMoveEvent();
blink::WebMouseEvent event_to_be_coalesced = CreateWebMouseMoveEvent();
EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test coalescing movements.
coalesced_event.movement_x = 5;
coalesced_event.movement_y = 10;
coalesced_event.id = 1;
coalesced_event.pointer_type =
blink::WebPointerProperties::PointerType::kMouse;
blink::WebMouseEvent event_to_be_coalesced;
event_to_be_coalesced.SetType(blink::WebInputEvent::kMouseMove);
event_to_be_coalesced.movement_x = 3;
event_to_be_coalesced.movement_y = -4;
event_to_be_coalesced.id = 1;
EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
Coalesce(event_to_be_coalesced, &coalesced_event);
EXPECT_EQ(8, coalesced_event.movement_x);
EXPECT_EQ(6, coalesced_event.movement_y);
// Test id.
coalesced_event = CreateWebMouseMoveEvent();
event_to_be_coalesced = CreateWebMouseMoveEvent();
event_to_be_coalesced.id = 3;
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test pointer_type.
coalesced_event = CreateWebMouseMoveEvent();
event_to_be_coalesced = CreateWebMouseMoveEvent();
event_to_be_coalesced.pointer_type =
blink::WebPointerProperties::PointerType::kMouse;
blink::WebPointerProperties::PointerType::kPen;
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test modifiers
coalesced_event = CreateWebMouseMoveEvent();
event_to_be_coalesced = CreateWebMouseMoveEvent();
event_to_be_coalesced.SetModifiers(blink::WebInputEvent::kControlKey);
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
}
TEST(BlinkEventUtilTest, PointerEventCoalescing) {
blink::WebPointerEvent coalesced_event = CreateWebPointerMoveEvent();
blink::WebPointerEvent event_to_be_coalesced = CreateWebPointerMoveEvent();
EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test coalescing movements.
coalesced_event.movement_x = 5;
coalesced_event.movement_y = 10;
event_to_be_coalesced.movement_x = 3;
event_to_be_coalesced.movement_y = -4;
EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
Coalesce(event_to_be_coalesced, &coalesced_event);
EXPECT_EQ(8, coalesced_event.movement_x);
EXPECT_EQ(6, coalesced_event.movement_y);
// Test id.
coalesced_event = CreateWebPointerMoveEvent();
event_to_be_coalesced = CreateWebPointerMoveEvent();
event_to_be_coalesced.id = 3;
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test pointer_type.
coalesced_event = CreateWebPointerMoveEvent();
event_to_be_coalesced = CreateWebPointerMoveEvent();
event_to_be_coalesced.pointer_type =
blink::WebPointerProperties::PointerType::kPen;
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
// Test modifiers
coalesced_event = CreateWebPointerMoveEvent();
event_to_be_coalesced = CreateWebPointerMoveEvent();
event_to_be_coalesced.SetModifiers(blink::WebInputEvent::kControlKey);
EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
}
TEST(BlinkEventUtilTest, WebEventModifersAndEventFlags) {
......
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