Commit e92bc3ca authored by François Doray's avatar François Doray Committed by Commit Bot

Revert "Experiment with sending click as PointerEvent"

This reverts commit fef9e5a5.

Reason for revert: Speculative revert for crbug.com/1000686

Original change's description:
> Experiment with sending click as PointerEvent
> 
> This CL adds a runtime flag that sends the
> click and auxclick events as PointerEvents.
> 
> There are more cases to fix such as context menu
> events and click from other paths such as
> touch and pointerlock.
> 
> Bug: 989958
> Change-Id: I0e440ceef29e6cad202bc7f07150c7f3b6b35da0
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1762792
> Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
> Reviewed-by: Navid Zolghadr <nzolghadr@chromium.org>
> Reviewed-by: Mustaq Ahmed <mustaq@chromium.org>
> Reviewed-by: Ella Ge <eirage@chromium.org>
> Commit-Queue: Navid Zolghadr <nzolghadr@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#693152}

TBR=dtapuska@chromium.org,mustaq@chromium.org,nzolghadr@chromium.org,eirage@chromium.org

Change-Id: Id81618db899ea3dd004d2b5ca882fac31c209e1d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 989958, 1000686
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1784839Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#693200}
parent 3879246c
......@@ -12,14 +12,8 @@ namespace blink {
PointerEvent::PointerEvent(const AtomicString& type,
const PointerEventInit* initializer,
base::TimeTicks platform_time_stamp,
MouseEvent::SyntheticEventType synthetic_event_type,
WebMenuSourceType menu_source_type)
: MouseEvent(type,
initializer,
platform_time_stamp,
synthetic_event_type,
menu_source_type),
base::TimeTicks platform_time_stamp)
: MouseEvent(type, initializer, platform_time_stamp),
pointer_id_(0),
width_(0),
height_(0),
......@@ -62,13 +56,6 @@ PointerEvent::PointerEvent(const AtomicString& type,
}
bool PointerEvent::IsMouseEvent() const {
if (RuntimeEnabledFeatures::ClickPointerEventEnabled() &&
(type() == event_type_names::kClick ||
type() == event_type_names::kAuxclick ||
type() == event_type_names::kContextmenu)) {
return true;
}
return false;
}
......@@ -142,13 +129,6 @@ DispatchEventResult PointerEvent::DispatchEvent(EventDispatcher& dispatcher) {
if (type().IsEmpty())
return DispatchEventResult::kNotCanceled; // Shouldn't happen.
if (RuntimeEnabledFeatures::ClickPointerEventEnabled() &&
type() == event_type_names::kClick) {
// The MouseEvent::DispatchEvent will take care of sending dblclick event if
// needed.
return MouseEvent::DispatchEvent(dispatcher);
}
DCHECK(!target() || target() != relatedTarget());
GetEventPath().AdjustForRelatedTarget(dispatcher.GetNode(), relatedTarget());
......
......@@ -14,16 +14,11 @@ class CORE_EXPORT PointerEvent final : public MouseEvent {
DEFINE_WRAPPERTYPEINFO();
public:
static PointerEvent* Create(
const AtomicString& type,
static PointerEvent* Create(const AtomicString& type,
const PointerEventInit* initializer,
base::TimeTicks platform_time_stamp,
MouseEvent::SyntheticEventType synthetic_event_type =
kRealOrIndistinguishable,
WebMenuSourceType menu_source_type = kMenuSourceNone) {
return MakeGarbageCollected<PointerEvent>(
type, initializer, platform_time_stamp, synthetic_event_type,
menu_source_type);
base::TimeTicks platform_time_stamp) {
return MakeGarbageCollected<PointerEvent>(type, initializer,
platform_time_stamp);
}
static PointerEvent* Create(const AtomicString& type,
const PointerEventInit* initializer) {
......@@ -32,9 +27,7 @@ class CORE_EXPORT PointerEvent final : public MouseEvent {
PointerEvent(const AtomicString&,
const PointerEventInit*,
base::TimeTicks platform_time_stamp,
MouseEvent::SyntheticEventType synthetic_event_type,
WebMenuSourceType menu_source_type);
base::TimeTicks platform_time_stamp);
PointerId pointerId() const { return pointer_id_; }
double width() const { return width_; }
......
......@@ -96,45 +96,6 @@ void UpdateMouseMovementXY(const WebMouseEvent& mouse_event,
}
}
void SetMouseEventAttributes(MouseEventInit* initializer,
Node* target_node,
const AtomicString& mouse_event_type,
const WebMouseEvent& mouse_event,
const String& canvas_region_id,
const FloatPoint* last_position,
EventTarget* related_target,
int click_count) {
bool is_mouse_enter_or_leave =
mouse_event_type == event_type_names::kMouseenter ||
mouse_event_type == event_type_names::kMouseleave;
initializer->setBubbles(!is_mouse_enter_or_leave);
initializer->setCancelable(!is_mouse_enter_or_leave);
MouseEvent::SetCoordinatesFromWebPointerProperties(
mouse_event.FlattenTransform(), target_node->GetDocument().domWindow(),
initializer);
UpdateMouseMovementXY(mouse_event, last_position,
target_node->GetDocument().domWindow(), initializer);
initializer->setButton(static_cast<int16_t>(mouse_event.button));
initializer->setButtons(
MouseEvent::WebInputEventModifiersToButtons(mouse_event.GetModifiers()));
initializer->setView(target_node->GetDocument().domWindow());
initializer->setComposed(true);
initializer->setDetail(click_count);
initializer->setRegion(canvas_region_id);
initializer->setRelatedTarget(related_target);
UIEventWithKeyState::SetFromWebInputEventModifiers(
initializer,
static_cast<WebInputEvent::Modifiers>(mouse_event.GetModifiers()));
initializer->setSourceCapabilities(
target_node->GetDocument().domWindow()
? target_node->GetDocument()
.domWindow()
->GetInputDeviceCapabilities()
->FiresTouchEvents(mouse_event.FromTouch())
: nullptr);
}
// The amount of time to wait before sending a fake mouse event triggered
// during a scroll.
constexpr base::TimeDelta kFakeMouseMoveIntervalDuringScroll =
......@@ -287,20 +248,7 @@ WebInputEventResult MouseEventManager::DispatchMouseEvent(
const String& canvas_region_id,
const FloatPoint* last_position,
EventTarget* related_target,
bool check_for_listener,
const PointerId& pointer_id,
const String& pointer_type) {
DCHECK(mouse_event_type == event_type_names::kMouseup ||
mouse_event_type == event_type_names::kMousedown ||
mouse_event_type == event_type_names::kMousemove ||
mouse_event_type == event_type_names::kMouseout ||
mouse_event_type == event_type_names::kMouseover ||
mouse_event_type == event_type_names::kMouseleave ||
mouse_event_type == event_type_names::kMouseenter ||
mouse_event_type == event_type_names::kContextmenu ||
mouse_event_type == event_type_names::kClick ||
mouse_event_type == event_type_names::kAuxclick);
bool check_for_listener) {
if (target && target->ToNode() &&
(!check_for_listener || target->HasEventListeners(mouse_event_type))) {
Node* target_node = target->ToNode();
......@@ -308,42 +256,47 @@ WebInputEventResult MouseEventManager::DispatchMouseEvent(
if (mouse_event_type == event_type_names::kMouseup ||
mouse_event_type == event_type_names::kMousedown ||
mouse_event_type == event_type_names::kClick ||
mouse_event_type == event_type_names::kAuxclick) {
mouse_event_type == event_type_names::kAuxclick ||
mouse_event_type == event_type_names::kDblclick) {
click_count = click_count_;
}
DispatchEventResult dispatch_result;
if (RuntimeEnabledFeatures::ClickPointerEventEnabled() &&
(mouse_event_type == event_type_names::kContextmenu ||
mouse_event_type == event_type_names::kClick ||
mouse_event_type == event_type_names::kAuxclick)) {
PointerEventInit* initializer = PointerEventInit::Create();
SetMouseEventAttributes(initializer, target_node, mouse_event_type,
mouse_event, canvas_region_id, last_position,
related_target, click_count);
initializer->setPointerId(pointer_id);
initializer->setPointerType(pointer_type);
PointerEvent* event = PointerEvent::Create(
mouse_event_type, initializer, mouse_event.TimeStamp(),
mouse_event.FromTouch() ? MouseEvent::kFromTouch
: MouseEvent::kRealOrIndistinguishable,
mouse_event.menu_source_type);
dispatch_result = target->DispatchEvent(*event);
} else {
bool is_mouse_enter_or_leave =
mouse_event_type == event_type_names::kMouseenter ||
mouse_event_type == event_type_names::kMouseleave;
MouseEventInit* initializer = MouseEventInit::Create();
SetMouseEventAttributes(initializer, target_node, mouse_event_type,
mouse_event, canvas_region_id, last_position,
related_target, click_count);
initializer->setBubbles(!is_mouse_enter_or_leave);
initializer->setCancelable(!is_mouse_enter_or_leave);
MouseEvent::SetCoordinatesFromWebPointerProperties(
mouse_event.FlattenTransform(), target_node->GetDocument().domWindow(),
initializer);
UpdateMouseMovementXY(mouse_event, last_position,
target_node->GetDocument().domWindow(), initializer);
initializer->setButton(static_cast<int16_t>(mouse_event.button));
initializer->setButtons(MouseEvent::WebInputEventModifiersToButtons(
mouse_event.GetModifiers()));
initializer->setView(target_node->GetDocument().domWindow());
initializer->setComposed(true);
initializer->setDetail(click_count);
initializer->setRegion(canvas_region_id);
initializer->setRelatedTarget(related_target);
UIEventWithKeyState::SetFromWebInputEventModifiers(
initializer,
static_cast<WebInputEvent::Modifiers>(mouse_event.GetModifiers()));
initializer->setSourceCapabilities(
target_node->GetDocument().domWindow()
? target_node->GetDocument()
.domWindow()
->GetInputDeviceCapabilities()
->FiresTouchEvents(mouse_event.FromTouch())
: nullptr);
MouseEvent* event = MouseEvent::Create(
mouse_event_type, initializer, mouse_event.TimeStamp(),
mouse_event.FromTouch() ? MouseEvent::kFromTouch
: MouseEvent::kRealOrIndistinguishable,
mouse_event.menu_source_type);
dispatch_result = target->DispatchEvent(*event);
}
DispatchEventResult dispatch_result = target->DispatchEvent(*event);
return event_handling_util::ToWebInputEventResult(dispatch_result);
}
return WebInputEventResult::kNotHandled;
......@@ -362,9 +315,7 @@ WebInputEventResult MouseEventManager::SetMousePositionAndDispatchMouseEvent(
WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
Element* mouse_release_target,
const WebMouseEvent& mouse_event,
const String& canvas_region_id,
const PointerId& pointer_id,
const String& pointer_type) {
const String& canvas_region_id) {
// We only prevent click event when the click may cause contextmenu to popup.
// However, we always send auxclick.
bool context_menu_event = false;
......@@ -431,8 +382,7 @@ WebInputEventResult MouseEventManager::DispatchMouseClickIfNeeded(
(mouse_event.button == WebPointerProperties::Button::kLeft)
? event_type_names::kClick
: event_type_names::kAuxclick,
mouse_event, canvas_region_id, nullptr, nullptr, false, pointer_id,
pointer_type);
mouse_event, canvas_region_id, nullptr, nullptr);
}
return WebInputEventResult::kNotHandled;
......
......@@ -50,9 +50,7 @@ class CORE_EXPORT MouseEventManager final
const String& canvas_region_id,
const FloatPoint* last_position,
EventTarget* related_target,
bool check_for_listener = false,
const PointerId& pointer_id = 0,
const String& pointer_type = "");
bool check_for_listener = false);
WebInputEventResult SetMousePositionAndDispatchMouseEvent(
Element* target_element,
......@@ -63,9 +61,7 @@ class CORE_EXPORT MouseEventManager final
WebInputEventResult DispatchMouseClickIfNeeded(
Element* mouse_release_target,
const WebMouseEvent& mouse_event,
const String& canvas_region_id,
const PointerId& pointer_id,
const String& pointer_type);
const String& canvas_region_id);
WebInputEventResult DispatchDragSrcEvent(const AtomicString& event_type,
const WebMouseEvent&);
......
......@@ -828,8 +828,7 @@ WebInputEventResult PointerEventManager::SendMousePointerEvent(
if (!skip_click_dispatch && mouse_target &&
event_type == WebInputEvent::kPointerUp) {
mouse_event_manager_->DispatchMouseClickIfNeeded(
mouse_target, mouse_event, canvas_region_id,
pointer_event->pointerId(), pointer_event->pointerType());
mouse_target, mouse_event, canvas_region_id);
}
}
......
......@@ -267,10 +267,6 @@
name: "CanvasImageSmoothing",
status: "experimental",
},
{
name: "ClickPointerEvent",
status: "experimental",
},
{
name: "ClickRetargetting",
status: "experimental",
......
......@@ -5,10 +5,10 @@ PASS event.pageX is 100
PASS event.pageY is 100
Just zoomed
FAIL event.clientX should be 83. Was 83.33332824707031.
FAIL event.clientY should be 83. Was 83.33332824707031.
FAIL event.pageX should be 83. Was 83.33332824707031.
FAIL event.pageY should be 83. Was 83.33332824707031.
PASS event.clientX is 83
PASS event.clientY is 83
PASS event.pageX is 83
PASS event.pageY is 83
Just scrolled
PASS event.clientX is 100
......@@ -17,10 +17,10 @@ PASS event.pageX is 150
PASS event.pageY is 150
Zoomed and scrolled
FAIL event.clientX should be 83. Was 83.33332824707031.
FAIL event.clientY should be 83. Was 83.33332824707031.
FAIL event.pageX should be 133. Was 133.33332443237305.
FAIL event.pageY should be 133. Was 133.33332443237305.
PASS event.clientX is 83
PASS event.clientY is 83
PASS event.pageX is 133
PASS event.pageY is 133
RTL and scrolled
PASS event.clientX is 100
......
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