Commit 1adfaa5d authored by Scott Little's avatar Scott Little Committed by Commit Bot

Revert "Fix sending scrollend on main thread snap"

This reverts commit 0d6bba53.

Reason for revert: Broke webkit_layout_tests on WebKit Linux Leak bot:

https://ci.chromium.org/p/chromium/builders/ci/WebKit%20Linux%20Leak/2935

Original change's description:
> Fix sending scrollend on main thread snap
> 
> This CL sends scrollend event if GSE is being
> handled on the main thread after the snap (if
> the snap has started after GSE). It also takes
> care of sending scrollend event for snap after
> fling.
> 
> Bug: 907601
> Change-Id: I21aba5d098b25ddc765d78a7792ec8a2fb7987cb
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1743253
> Reviewed-by: David Bokan <bokan@chromium.org>
> Commit-Queue: Navid Zolghadr <nzolghadr@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#685217}

TBR=bokan@chromium.org,nzolghadr@chromium.org

Change-Id: Ib7901d4284565f8cd636e1e4064163750bf08d4e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 907601
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1744517Reviewed-by: default avatarScott Little <sclittle@chromium.org>
Commit-Queue: Scott Little <sclittle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#685254}
parent 1b63a4b7
......@@ -1532,6 +1532,13 @@ WebInputEventResult EventHandler::HandleGestureScrollEvent(
return scroll_manager_->HandleGestureScrollEvent(gesture_event);
}
WebInputEventResult EventHandler::HandleGestureScrollEnd(
const WebGestureEvent& gesture_event) {
if (!frame_->GetPage())
return WebInputEventResult::kNotHandled;
return scroll_manager_->HandleGestureScrollEnd(gesture_event);
}
void EventHandler::SetMouseDownMayStartAutoscroll() {
mouse_event_manager_->SetMouseDownMayStartAutoscroll();
}
......
......@@ -201,6 +201,7 @@ class CORE_EXPORT EventHandler final
// Handle the provided scroll gesture event, propagating down to child frames
// as necessary.
WebInputEventResult HandleGestureScrollEvent(const WebGestureEvent&);
WebInputEventResult HandleGestureScrollEnd(const WebGestureEvent&);
bool IsScrollbarHandlingGestures() const;
bool BestClickableNodeForHitTestResult(const HitTestLocation& location,
......
......@@ -113,15 +113,6 @@ void ScrollManager::ClearGestureScrollState() {
}
}
Node* ScrollManager::GetScrollEventTarget() {
// Send the overscroll event to the node that scrolling is latched to which
// is either previously scrolled node or the last node in the scroll chain.
Node* scroll_target = previous_gesture_scrolled_node_;
if (!scroll_target && !current_scroll_chain_.IsEmpty())
scroll_target = DOMNodeIds::NodeForId(current_scroll_chain_.front());
return scroll_target;
}
void ScrollManager::StopAutoscroll() {
if (AutoscrollController* controller = GetAutoscrollController())
controller->StopAutoscroll();
......@@ -326,12 +317,11 @@ bool ScrollManager::LogicalScroll(ScrollDirection direction,
}
ScrollableArea::ScrollCallback callback;
if (RuntimeEnabledFeatures::UpdateHoverAtBeginFrameEnabled() ||
RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
if (RuntimeEnabledFeatures::UpdateHoverAtBeginFrameEnabled()) {
callback = ScrollableArea::ScrollCallback(WTF::Bind(
[](WeakPersistent<ScrollableArea> area) {
if (area)
area->OnScrollFinished();
area->MarkHoverStateDirty();
},
WrapWeakPersistent(scrollable_area)));
}
......@@ -635,7 +625,13 @@ WebInputEventResult ScrollManager::HandleGestureScrollUpdate(
return WebInputEventResult::kHandledSystem;
if (RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
if (Node* overscroll_target = GetScrollEventTarget()) {
// Send the overscroll event to the node that scrolling is latched to which
// is either previously scrolled node or the last node in the scroll chain.
Node* overscroll_target = previous_gesture_scrolled_node_;
if (!overscroll_target && !current_scroll_chain_.IsEmpty())
overscroll_target = DOMNodeIds::NodeForId(current_scroll_chain_.front());
if (overscroll_target) {
overscroll_target->GetDocument().EnqueueOverscrollEventForNode(
overscroll_target, delta.Width(), delta.Height());
}
......@@ -696,9 +692,16 @@ WebInputEventResult ScrollManager::HandleGestureScrollEnd(
snap_at_gesture_scroll_end = SnapAtGestureScrollEnd();
NotifyScrollPhaseEndForCustomizedScroll();
if (RuntimeEnabledFeatures::OverscrollCustomizationEnabled() &&
!snap_at_gesture_scroll_end) {
if (Node* scroll_end_target = GetScrollEventTarget()) {
if (RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
// Send the scrollend event to the node that scrolling is latched to
// which is either previously scrolled node or the last node in the
// scroll chain.
DCHECK(!current_scroll_chain_.IsEmpty());
if (previous_gesture_scrolled_node_) {
previous_gesture_scrolled_node_->GetDocument()
.EnqueueScrollEndEventForNode(previous_gesture_scrolled_node_);
} else if (Node* scroll_end_target =
DOMNodeIds::NodeForId(current_scroll_chain_.front())) {
scroll_end_target->GetDocument().EnqueueScrollEndEventForNode(
scroll_end_target);
}
......@@ -792,12 +795,6 @@ gfx::Vector2dF ScrollManager::ScrollByForSnapFling(
}
void ScrollManager::ScrollEndForSnapFling() {
if (RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
if (Node* scroll_end_target = GetScrollEventTarget()) {
scroll_end_target->GetDocument().EnqueueScrollEndEventForNode(
scroll_end_target);
}
}
if (current_scroll_chain_.IsEmpty()) {
NotifyScrollPhaseEndForCustomizedScroll();
ClearGestureScrollState();
......
......@@ -119,8 +119,6 @@ class CORE_EXPORT ScrollManager
WebInputEventResult PassScrollGestureEvent(const WebGestureEvent&,
LayoutObject*);
Node* GetScrollEventTarget();
void ClearGestureScrollState();
void CustomizedScroll(ScrollState&);
......
......@@ -300,13 +300,12 @@ void ScrollableArea::ProgrammaticScrollHelper(const ScrollOffset& offset,
CancelScrollAnimation();
ScrollCallback callback = std::move(on_finish);
if (RuntimeEnabledFeatures::UpdateHoverAtBeginFrameEnabled() ||
RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
if (RuntimeEnabledFeatures::UpdateHoverAtBeginFrameEnabled()) {
callback = ScrollCallback(WTF::Bind(
[](ScrollCallback original_callback,
WeakPersistent<ScrollableArea> area) {
if (area)
area->OnScrollFinished();
area->MarkHoverStateDirty();
if (original_callback)
std::move(original_callback).Run();
},
......@@ -818,19 +817,13 @@ CompositorElementId ScrollableArea::GetScrollbarElementId(
scrollable_element_id.GetInternalValue(), element_id_namespace);
}
void ScrollableArea::OnScrollFinished() {
void ScrollableArea::MarkHoverStateDirty() {
if (GetLayoutBox()) {
if (RuntimeEnabledFeatures::OverscrollCustomizationEnabled()) {
if (Node* node = GetLayoutBox()->GetNode())
node->GetDocument().EnqueueScrollEndEventForNode(node);
}
if (RuntimeEnabledFeatures::UpdateHoverAtBeginFrameEnabled()) {
GetLayoutBox()
->GetFrame()
->LocalFrameRoot()
.GetEventHandler()
.MarkHoverStateDirty();
}
GetLayoutBox()
->GetFrame()
->LocalFrameRoot()
.GetEventHandler()
.MarkHoverStateDirty();
}
}
......
......@@ -416,7 +416,7 @@ class CORE_EXPORT ScrollableArea : public GarbageCollectedMixin {
virtual ScrollbarTheme& GetPageScrollbarTheme() const = 0;
void OnScrollFinished();
virtual void MarkHoverStateDirty();
float ScrollStep(ScrollGranularity, ScrollbarOrientation) const;
......
......@@ -242,6 +242,11 @@ crbug.com/857490 virtual/scroll_customization/fast/events/touch/gesture/pad-gest
crbug.com/857490 virtual/scroll_customization/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ]
crbug.com/857490 virtual/scroll_customization/fast/scroll-behavior/scroll-customization/touch-scroll-customization.html [ Skip ]
# Currently on main thread scrolling path, scrollend gets fired without waiting for scroll/fling snap animation. (The virtual/threaded version of the test passes.)
crbug.com/907601 fast/scrolling/events/scrollend-event-fired-after-snap.html [ Skip ]
crbug.com/907601 virtual/scroll_customization/fast/scrolling/events/scrollend-event-fired-after-snap.html [ Skip ]
crbug.com/907601 external/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html [ Skip ]
crbug.com/980969 [ Mac ] http/tests/input/discard-events-to-unstable-iframe.html [ Pass Failure ]
# Display locking, run highlight-display-locked.js only with display locking.
......
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