Simplify some callsites of WheelEventTestMonitor
https://bugs.webkit.org/show_bug.cgi?id=219416
Reviewed by Daniel Bates.
Migrate towards more usage of WheelEventTestMonitorCompletionDeferrer, using a pattern
where we WTFMove() one into a completion handler to pair the defer/undefer pairs,
rather than having manual deferral/undeferral.
To make this work, WheelEventTestMonitorCompletionDeferrer gains a move constructor,
that nullifies the m_monitor in the source to prevent double firing.
Remove the WheelEventTestMonitor::RequestedScrollPosition deferral, since that code path
is now synchronous.
* page/EventHandler.cpp:
(WebCore::EventHandler::handleWheelEventInternal):
* page/FrameView.cpp:
(WebCore::FrameView::scrollOffsetChangedViaPlatformWidgetImpl):
* page/WheelEventTestMonitor.cpp:
(WebCore::WheelEventTestMonitor::removeDeferralForReason):
* page/WheelEventTestMonitor.h:
(WebCore::WheelEventTestMonitorCompletionDeferrer::WheelEventTestMonitorCompletionDeferrer):
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
(WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
(WebCore::AsyncScrollingCoordinator::applyPendingScrollUpdates):
(WebCore::AsyncScrollingCoordinator::applyScrollUpdate):
(WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
(WebCore::AsyncScrollingCoordinator::noteScrollingThreadSyncCompleteForNode): Deleted.
* page/scrolling/AsyncScrollingCoordinator.h:
* page/scrolling/ScrollingTree.h:
(WebCore::ScrollingTree::wheelEventTestMonitor):
* page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
(WebCore::ThreadedScrollingTree::setActiveScrollSnapIndices):
(WebCore::ThreadedScrollingTree::scrollingTreeNodeRequestsScroll): Deleted.
* page/scrolling/ThreadedScrollingTree.h:
* page/scrolling/mac/ScrollingCoordinatorMac.mm:
(WebCore::ScrollingCoordinatorMac::wheelEventWasProcessedByMainThread):
* page/scrolling/mac/ScrollingTreeMac.h:
* page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
(WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@270338 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 2fe4099..1d918bf 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,49 @@
+2020-12-01 Simon Fraser <simon.fraser@apple.com>
+
+ Simplify some callsites of WheelEventTestMonitor
+ https://bugs.webkit.org/show_bug.cgi?id=219416
+
+ Reviewed by Daniel Bates.
+
+ Migrate towards more usage of WheelEventTestMonitorCompletionDeferrer, using a pattern
+ where we WTFMove() one into a completion handler to pair the defer/undefer pairs,
+ rather than having manual deferral/undeferral.
+
+ To make this work, WheelEventTestMonitorCompletionDeferrer gains a move constructor,
+ that nullifies the m_monitor in the source to prevent double firing.
+
+ Remove the WheelEventTestMonitor::RequestedScrollPosition deferral, since that code path
+ is now synchronous.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleWheelEventInternal):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::scrollOffsetChangedViaPlatformWidgetImpl):
+ * page/WheelEventTestMonitor.cpp:
+ (WebCore::WheelEventTestMonitor::removeDeferralForReason):
+ * page/WheelEventTestMonitor.h:
+ (WebCore::WheelEventTestMonitorCompletionDeferrer::WheelEventTestMonitorCompletionDeferrer):
+ * page/scrolling/AsyncScrollingCoordinator.cpp:
+ (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
+ (WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
+ (WebCore::AsyncScrollingCoordinator::applyPendingScrollUpdates):
+ (WebCore::AsyncScrollingCoordinator::applyScrollUpdate):
+ (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
+ (WebCore::AsyncScrollingCoordinator::noteScrollingThreadSyncCompleteForNode): Deleted.
+ * page/scrolling/AsyncScrollingCoordinator.h:
+ * page/scrolling/ScrollingTree.h:
+ (WebCore::ScrollingTree::wheelEventTestMonitor):
+ * page/scrolling/ThreadedScrollingTree.cpp:
+ (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
+ (WebCore::ThreadedScrollingTree::setActiveScrollSnapIndices):
+ (WebCore::ThreadedScrollingTree::scrollingTreeNodeRequestsScroll): Deleted.
+ * page/scrolling/ThreadedScrollingTree.h:
+ * page/scrolling/mac/ScrollingCoordinatorMac.mm:
+ (WebCore::ScrollingCoordinatorMac::wheelEventWasProcessedByMainThread):
+ * page/scrolling/mac/ScrollingTreeMac.h:
+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
+
2020-12-01 Peng Liu <peng.liu6@apple.com>
[Media In GPU Process][MSE] Add the support to forward initialization segment from the GPU Process to Web processes
diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp
index 51adb00..b854bcd 100644
--- a/Source/WebCore/page/EventHandler.cpp
+++ b/Source/WebCore/page/EventHandler.cpp
@@ -2899,10 +2899,11 @@
#if PLATFORM(COCOA)
LOG_WITH_STREAM(Scrolling, stream << "EventHandler::handleWheelEvent " << event << " processing steps " << processingSteps);
- if (auto monitor = m_frame.page()->wheelEventTestMonitor())
+ auto monitor = m_frame.page()->wheelEventTestMonitor();
+ if (monitor)
monitor->receivedWheelEvent(event);
- WheelEventTestMonitorCompletionDeferrer deferrer(m_frame.page()->wheelEventTestMonitor().get(), this, WheelEventTestMonitor::DeferReason::HandlingWheelEventOnMainThread);
+ auto deferrer = WheelEventTestMonitorCompletionDeferrer { monitor.get(), this, WheelEventTestMonitor::DeferReason::HandlingWheelEventOnMainThread };
#endif
m_isHandlingWheelEvent = true;
diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp
index 74f30ea..39599c9 100644
--- a/Source/WebCore/page/FrameView.cpp
+++ b/Source/WebCore/page/FrameView.cpp
@@ -2484,7 +2484,7 @@
void FrameView::scrollOffsetChangedViaPlatformWidgetImpl(const ScrollOffset& oldOffset, const ScrollOffset& newOffset)
{
#if PLATFORM(COCOA)
- WheelEventTestMonitorCompletionDeferrer deferrer(frame().page()->wheelEventTestMonitor().get(), this, WheelEventTestMonitor::DeferReason::ContentScrollInProgress);
+ auto deferrer = WheelEventTestMonitorCompletionDeferrer { frame().page()->wheelEventTestMonitor().get(), this, WheelEventTestMonitor::DeferReason::ContentScrollInProgress };
#endif
updateLayerPositionsAfterScrolling();
diff --git a/Source/WebCore/page/WheelEventTestMonitor.cpp b/Source/WebCore/page/WheelEventTestMonitor.cpp
index 6377202..f65250e 100644
--- a/Source/WebCore/page/WheelEventTestMonitor.cpp
+++ b/Source/WebCore/page/WheelEventTestMonitor.cpp
@@ -95,8 +95,10 @@
LockHolder lock(m_mutex);
auto it = m_deferCompletionReasons.find(identifier);
- if (it == m_deferCompletionReasons.end())
+ if (it == m_deferCompletionReasons.end()) {
+ LOG_WITH_STREAM(WheelEventTestMonitor, stream << " (=) WheelEventTestMonitor::removeDeferralForReason: failed to find defer for id=" << identifier << ", reason=" << reason);
return;
+ }
LOG_WITH_STREAM(WheelEventTestMonitor, stream << " (=) WheelEventTestMonitor::removeDeferralForReason: id=" << identifier << ", reason=" << reason);
it->value.remove(reason);
diff --git a/Source/WebCore/page/WheelEventTestMonitor.h b/Source/WebCore/page/WheelEventTestMonitor.h
index 92077e9..ff8d77c 100644
--- a/Source/WebCore/page/WheelEventTestMonitor.h
+++ b/Source/WebCore/page/WheelEventTestMonitor.h
@@ -93,6 +93,13 @@
m_monitor->deferForReason(m_identifier, m_reason);
}
+ WheelEventTestMonitorCompletionDeferrer(WheelEventTestMonitorCompletionDeferrer&& other)
+ : m_monitor(WTFMove(other.m_monitor))
+ , m_identifier(other.m_identifier)
+ , m_reason(other.m_reason)
+ {
+ }
+
~WheelEventTestMonitorCompletionDeferrer()
{
if (m_monitor)
diff --git a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp
index a960296..de5405e 100644
--- a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp
+++ b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp
@@ -270,7 +270,7 @@
bool inBackForwardCache = frameView->frame().document()->backForwardCacheState() != Document::NotInBackForwardCache;
bool inProgrammaticScroll = scrollableArea.currentScrollType() == ScrollType::Programmatic;
if (inProgrammaticScroll || inBackForwardCache)
- applyScrollUpdate(scrollingNodeID, scrollPosition, { }, ScrollType::Programmatic, ScrollingLayerPositionAction::Set, InformWheelEventMonitor::No);
+ applyScrollUpdate(scrollingNodeID, scrollPosition, { }, ScrollType::Programmatic, ScrollingLayerPositionAction::Set);
ASSERT(inProgrammaticScroll == (scrollType == ScrollType::Programmatic));
@@ -283,13 +283,6 @@
if (!stateNode)
return false;
-#if PLATFORM(MAC)
- if (m_page && m_page->isMonitoringWheelEvents()) {
- LOG_WITH_STREAM(WheelEventTestMonitor, stream << " (!) AsyncScrollingCoordinator::requestScrollPositionUpdate: Adding deferral on " << scrollingNodeID << " for reason " << WheelEventTestMonitor::RequestedScrollPosition);
- m_page->wheelEventTestMonitor()->deferForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(scrollingNodeID), WheelEventTestMonitor::RequestedScrollPosition);
- }
-#endif
-
stateNode->setRequestedScrollData({ scrollPosition, scrollType, clamping });
commitTreeStateIfNeeded();
return true;
@@ -308,23 +301,11 @@
m_scrollingTree->traverseScrollingTree([&](ScrollingNodeID nodeID, ScrollingNodeType, Optional<FloatPoint> scrollPosition, Optional<FloatPoint> layoutViewportOrigin, bool scrolledSinceLastCommit) {
if (scrollPosition && scrolledSinceLastCommit) {
LOG_WITH_STREAM(Scrolling, stream << "AsyncScrollingCoordinator::synchronizeStateFromScrollingTree - node " << nodeID << " scroll position " << scrollPosition);
- updateScrollPositionAfterAsyncScroll(nodeID, scrollPosition.value(), layoutViewportOrigin, ScrollType::User, ScrollingLayerPositionAction::Set, InformWheelEventMonitor::No);
+ updateScrollPositionAfterAsyncScroll(nodeID, scrollPosition.value(), layoutViewportOrigin, ScrollType::User, ScrollingLayerPositionAction::Set);
}
});
}
-void AsyncScrollingCoordinator::noteScrollingThreadSyncCompleteForNode(ScrollingNodeID nodeID)
-{
-#if PLATFORM(MAC)
- if (m_page && m_page->isMonitoringWheelEvents()) {
- LOG_WITH_STREAM(WheelEventTestMonitor, stream << " (!) AsyncScrollingCoordinator::noteScrollingThreadSyncCompleteForNode: Removing deferral on " << nodeID << " for reason " << WheelEventTestMonitor::ScrollingThreadSyncNeeded);
- m_page->wheelEventTestMonitor()->removeDeferralForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(nodeID), WheelEventTestMonitor::ScrollingThreadSyncNeeded);
- }
-#else
- UNUSED_PARAM(nodeID);
-#endif
-}
-
void AsyncScrollingCoordinator::applyPendingScrollUpdates()
{
if (!m_scrollingTree)
@@ -333,7 +314,7 @@
auto scrollUpdates = m_scrollingTree->takePendingScrollUpdates();
for (auto& update : scrollUpdates) {
LOG_WITH_STREAM(Scrolling, stream << "AsyncScrollingCoordinator::applyPendingScrollUpdates - node " << update.nodeID << " scroll position " << update.scrollPosition);
- updateScrollPositionAfterAsyncScroll(update.nodeID, update.scrollPosition, update.layoutViewportOrigin, ScrollType::User, update.updateLayerPositionAction, InformWheelEventMonitor::Yes);
+ updateScrollPositionAfterAsyncScroll(update.nodeID, update.scrollPosition, update.layoutViewportOrigin, ScrollType::User, update.updateLayerPositionAction);
}
}
@@ -369,19 +350,16 @@
return nullptr;
}
-void AsyncScrollingCoordinator::applyScrollUpdate(ScrollingNodeID scrollingNodeID, const FloatPoint& scrollPosition, Optional<FloatPoint> layoutViewportOrigin, ScrollType scrollType, ScrollingLayerPositionAction scrollingLayerPositionAction, InformWheelEventMonitor informWheelEventMonitor)
+void AsyncScrollingCoordinator::applyScrollUpdate(ScrollingNodeID scrollingNodeID, const FloatPoint& scrollPosition, Optional<FloatPoint> layoutViewportOrigin, ScrollType scrollType, ScrollingLayerPositionAction scrollingLayerPositionAction)
{
applyPendingScrollUpdates();
- updateScrollPositionAfterAsyncScroll(scrollingNodeID, scrollPosition, layoutViewportOrigin, scrollType, scrollingLayerPositionAction, informWheelEventMonitor);
+ updateScrollPositionAfterAsyncScroll(scrollingNodeID, scrollPosition, layoutViewportOrigin, scrollType, scrollingLayerPositionAction);
}
-void AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll(ScrollingNodeID scrollingNodeID, const FloatPoint& scrollPosition, Optional<FloatPoint> layoutViewportOrigin, ScrollType scrollType, ScrollingLayerPositionAction scrollingLayerPositionAction, InformWheelEventMonitor informWheelEventMonitor)
+void AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll(ScrollingNodeID scrollingNodeID, const FloatPoint& scrollPosition, Optional<FloatPoint> layoutViewportOrigin, ScrollType scrollType, ScrollingLayerPositionAction scrollingLayerPositionAction)
{
ASSERT(isMainThread());
- if (informWheelEventMonitor == InformWheelEventMonitor::Yes)
- noteScrollingThreadSyncCompleteForNode(scrollingNodeID);
-
if (!m_page)
return;
diff --git a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h
index 0027df8..9e1210b 100644
--- a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h
+++ b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h
@@ -53,8 +53,7 @@
void applyPendingScrollUpdates();
- enum class InformWheelEventMonitor { Yes, No };
- WEBCORE_EXPORT void applyScrollUpdate(ScrollingNodeID, const FloatPoint&, Optional<FloatPoint> layoutViewportOrigin, ScrollType, ScrollingLayerPositionAction, InformWheelEventMonitor = InformWheelEventMonitor::Yes);
+ WEBCORE_EXPORT void applyScrollUpdate(ScrollingNodeID, const FloatPoint&, Optional<FloatPoint> layoutViewportOrigin, ScrollType, ScrollingLayerPositionAction);
#if PLATFORM(COCOA)
WEBCORE_EXPORT void handleWheelEventPhase(ScrollingNodeID, PlatformWheelEventPhase) final;
@@ -159,9 +158,7 @@
void setEventTrackingRegionsDirty();
void updateEventTrackingRegions();
- void noteScrollingThreadSyncCompleteForNode(ScrollingNodeID);
-
- void updateScrollPositionAfterAsyncScroll(ScrollingNodeID, const FloatPoint&, Optional<FloatPoint> layoutViewportOrigin, ScrollType, ScrollingLayerPositionAction, InformWheelEventMonitor);
+ void updateScrollPositionAfterAsyncScroll(ScrollingNodeID, const FloatPoint&, Optional<FloatPoint> layoutViewportOrigin, ScrollType, ScrollingLayerPositionAction);
FrameView* frameViewForScrollingNode(ScrollingNodeID) const;
diff --git a/Source/WebCore/page/scrolling/ScrollingTree.h b/Source/WebCore/page/scrolling/ScrollingTree.h
index 85ff446..b1e8147 100644
--- a/Source/WebCore/page/scrolling/ScrollingTree.h
+++ b/Source/WebCore/page/scrolling/ScrollingTree.h
@@ -145,6 +145,8 @@
WEBCORE_EXPORT TrackingType eventTrackingTypeForPoint(const AtomString& eventName, IntPoint);
+ virtual WheelEventTestMonitor* wheelEventTestMonitor() { return nullptr; }
+
#if PLATFORM(MAC)
virtual void handleWheelEventPhase(ScrollingNodeID, PlatformWheelEventPhase) = 0;
virtual void setActiveScrollSnapIndices(ScrollingNodeID, unsigned /*horizontalIndex*/, unsigned /*verticalIndex*/) { }
diff --git a/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp b/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
index d85401c..d6ed6ba 100644
--- a/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
+++ b/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
@@ -148,11 +148,6 @@
if (is<ScrollingTreeFrameScrollingNode>(node))
layoutViewportOrigin = downcast<ScrollingTreeFrameScrollingNode>(node).layoutViewport().location();
-#if PLATFORM(MAC)
- if (isMonitoringWheelEvents())
- deferWheelEventTestCompletionForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(node.scrollingNodeID()), WheelEventTestMonitor::ScrollingThreadSyncNeeded);
-#endif
-
if (RunLoop::isMain()) {
m_scrollingCoordinator->applyScrollUpdate(node.scrollingNodeID(), scrollPosition, layoutViewportOrigin, ScrollType::User, scrollingLayerPositionAction);
return;
@@ -163,7 +158,8 @@
auto scrollUpdate = ScrollUpdate { node.scrollingNodeID(), scrollPosition, layoutViewportOrigin, scrollingLayerPositionAction };
addPendingScrollUpdate(WTFMove(scrollUpdate));
- RunLoop::main().dispatch([strongThis = makeRef(*this)] {
+ auto deferrer = WheelEventTestMonitorCompletionDeferrer { wheelEventTestMonitor(), reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(node.scrollingNodeID()), WheelEventTestMonitor::ScrollingThreadSyncNeeded };
+ RunLoop::main().dispatch([strongThis = makeRef(*this), deferrer = WTFMove(deferrer)] {
if (auto* scrollingCoordinator = strongThis->m_scrollingCoordinator.get())
scrollingCoordinator->applyPendingScrollUpdates();
});
@@ -215,11 +211,6 @@
scrollingCoordinator->setActiveScrollSnapIndices(nodeID, horizontalIndex, verticalIndex);
});
}
-
-void ThreadedScrollingTree::scrollingTreeNodeRequestsScroll(ScrollingNodeID nodeID, const FloatPoint& /*scrollPosition*/, ScrollType, ScrollClamping)
-{
- removeWheelEventTestCompletionDeferralForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(nodeID), WheelEventTestMonitor::RequestedScrollPosition);
-}
#endif
void ThreadedScrollingTree::willStartRenderingUpdate()
diff --git a/Source/WebCore/page/scrolling/ThreadedScrollingTree.h b/Source/WebCore/page/scrolling/ThreadedScrollingTree.h
index 5a70ca5..ef11399 100644
--- a/Source/WebCore/page/scrolling/ThreadedScrollingTree.h
+++ b/Source/WebCore/page/scrolling/ThreadedScrollingTree.h
@@ -68,7 +68,6 @@
#if PLATFORM(MAC)
void handleWheelEventPhase(ScrollingNodeID, PlatformWheelEventPhase) override;
void setActiveScrollSnapIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex) override;
- void scrollingTreeNodeRequestsScroll(ScrollingNodeID, const FloatPoint& /*scrollPosition*/, ScrollType, ScrollClamping) override;
#endif
#if PLATFORM(COCOA)
diff --git a/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
index 22001ed..ffc23be 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
+++ b/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
@@ -98,18 +98,11 @@
void ScrollingCoordinatorMac::wheelEventWasProcessedByMainThread(const PlatformWheelEvent& wheelEvent, OptionSet<EventHandling> defaultHandling)
{
- uint64_t deferIdentifier = 0;
- if (m_page && m_page->isMonitoringWheelEvents()) {
- deferIdentifier = nextDeferIdentifier();
- m_page->wheelEventTestMonitor()->deferForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(deferIdentifier), WheelEventTestMonitor::ReportDOMEventHandling);
- }
+ auto deferrer = WheelEventTestMonitorCompletionDeferrer { m_page->wheelEventTestMonitor().get(), reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(nextDeferIdentifier()), WheelEventTestMonitor::ReportDOMEventHandling };
RefPtr<ThreadedScrollingTree> threadedScrollingTree = downcast<ThreadedScrollingTree>(scrollingTree());
- ScrollingThread::dispatch([threadedScrollingTree, wheelEvent, defaultHandling, deferIdentifier] {
+ ScrollingThread::dispatch([threadedScrollingTree, wheelEvent, defaultHandling, deferrer = WTFMove(deferrer)] {
threadedScrollingTree->wheelEventWasProcessedByMainThread(wheelEvent, defaultHandling);
-
- if (threadedScrollingTree->isMonitoringWheelEvents())
- threadedScrollingTree->removeWheelEventTestCompletionDeferralForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(deferIdentifier), WheelEventTestMonitor::ReportDOMEventHandling);
});
}
diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeMac.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeMac.h
index 4c4f17c..b42bf41 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeMac.h
+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeMac.h
@@ -48,6 +48,7 @@
#endif
void setWheelEventTestMonitor(RefPtr<WheelEventTestMonitor>&&) final;
+ WheelEventTestMonitor* wheelEventTestMonitor() final { return m_wheelEventTestMonitor.get(); }
void receivedWheelEvent(const PlatformWheelEvent&) final;
diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm
index 56fe9c3..8fdc3e5 100644
--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm
+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm
@@ -135,8 +135,7 @@
}
#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
- if (scrollingTree().isMonitoringWheelEvents())
- deferWheelEventTestCompletionForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(scrollingNode().scrollingNodeID()), WheelEventTestMonitor::HandlingWheelEvent);
+ auto deferrer = WheelEventTestMonitorCompletionDeferrer { scrollingTree().wheelEventTestMonitor(), reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(scrollingNode().scrollingNodeID()), WheelEventTestMonitor::HandlingWheelEvent };
#endif
bool wasInUserScroll = m_scrollController.isUserScrollInProgress();
@@ -150,14 +149,7 @@
if (wheelEvent.phase() == PlatformWheelEventPhase::MayBegin)
return true;
- auto handled = m_scrollController.handleWheelEvent(wheelEvent);
-
-#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
- if (scrollingTree().isMonitoringWheelEvents())
- removeWheelEventTestCompletionDeferralForReason(reinterpret_cast<WheelEventTestMonitor::ScrollableAreaIdentifier>(scrollingNode().scrollingNodeID()), WheelEventTestMonitor::HandlingWheelEvent);
-#endif
-
- return handled;
+ return m_scrollController.handleWheelEvent(wheelEvent);
}
void ScrollingTreeScrollingNodeDelegateMac::willDoProgrammaticScroll(const FloatPoint& targetPosition)