Commit 50609a97 authored by Kevin McNee's avatar Kevin McNee Committed by Commit Bot

Fix misuse of WebGestureEvent data union with tap events

The wrong union member is written to during deserialization of the
contact_size.

A few tap types have been added in switch statements where they were
missing.

Bug: None
Change-Id: I7f1b389070bd42b540ed78cfaff40cc463827d79
Reviewed-on: https://chromium-review.googlesource.com/c/1252633Reviewed-by: default avatarRick Byers <rbyers@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Commit-Queue: Kevin McNee <mcnee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#597272}
parent 3f6afbd0
......@@ -135,8 +135,6 @@ bool StructTraits<content::mojom::EventDataView, InputEventUniquePtr>::Read(
default:
break;
case blink::WebInputEvent::Type::kGestureTapDown:
case blink::WebInputEvent::Type::kGestureTapUnconfirmed:
case blink::WebInputEvent::Type::kGestureDoubleTap:
gesture_event->data.tap_down.width =
gesture_data->contact_size->width();
gesture_event->data.tap_down.height =
......@@ -149,10 +147,13 @@ bool StructTraits<content::mojom::EventDataView, InputEventUniquePtr>::Read(
gesture_data->contact_size->height();
break;
case blink::WebInputEvent::Type::kGestureTap:
case blink::WebInputEvent::Type::kGestureTapUnconfirmed:
case blink::WebInputEvent::Type::kGestureDoubleTap:
gesture_event->data.tap.width = gesture_data->contact_size->width();
gesture_event->data.tap.height = gesture_data->contact_size->height();
break;
case blink::WebInputEvent::Type::kGestureLongPress:
case blink::WebInputEvent::Type::kGestureLongTap:
gesture_event->data.long_press.width =
gesture_data->contact_size->width();
gesture_event->data.long_press.height =
......@@ -434,6 +435,7 @@ StructTraits<content::mojom::EventDataView, InputEventUniquePtr>::gesture_data(
content::mojom::TapData::New(gesture_event->data.tap.tap_count);
break;
case blink::WebInputEvent::Type::kGestureLongPress:
case blink::WebInputEvent::Type::kGestureLongTap:
gesture_data->contact_size =
gfx::Size(gesture_event->data.long_press.width,
gesture_event->data.long_press.height);
......
......@@ -72,6 +72,7 @@ class WebGestureEvent : public WebInputEvent {
float height;
} show_press;
// This is used for both GestureLongPress and GestureLongTap.
struct {
float width;
float height;
......
......@@ -68,7 +68,8 @@ WebFloatSize WebGestureEvent::TapAreaInRootFrame() const {
return WebFloatSize(data.long_press.width / frame_scale_,
data.long_press.height / frame_scale_);
} else if (type_ == WebInputEvent::kGestureTap ||
type_ == WebInputEvent::kGestureTapUnconfirmed) {
type_ == WebInputEvent::kGestureTapUnconfirmed ||
type_ == WebInputEvent::kGestureDoubleTap) {
return WebFloatSize(data.tap.width / frame_scale_,
data.tap.height / frame_scale_);
} else if (type_ == WebInputEvent::kGestureTapDown) {
......@@ -128,6 +129,7 @@ void WebGestureEvent::FlattenTransform() {
break;
case WebInputEvent::kGestureTap:
case WebInputEvent::kGestureTapUnconfirmed:
case WebInputEvent::kGestureDoubleTap:
data.tap.width /= frame_scale_;
data.tap.height /= frame_scale_;
break;
......
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