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