WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
scrollend-userscroll-on-Mac-for-ews
scrollend-mac-ews.diff (text/plain), 115.01 KB, created by
cathiechen
on 2020-03-18 05:41:29 PDT
(
hide
)
Description:
scrollend-userscroll-on-Mac-for-ews
Filename:
MIME Type:
Creator:
cathiechen
Created:
2020-03-18 05:41:29 PDT
Size:
115.01 KB
patch
obsolete
>diff --git a/ChangeLog b/ChangeLog >index cbff477b58..14f4295d71 100644 >--- a/ChangeLog >+++ b/ChangeLog >@@ -1,3 +1,16 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add ENABLE_OVERSCROLL_EVENTS which is off by default. >+ >+ * Source/cmake/WebKitFeatures.cmake: >+ > 2020-03-16 Keith Rollin <krollin@apple.com> > > Remove support for WebKitSystemInterface >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index d8f24dc9b5..b3e3d62785 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,16 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add ENABLE_OVERSCROLL_EVENTS. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2020-03-16 Yusuke Suzuki <ysuzuki@apple.com> > > [JSC] JSMapIterator and JSSetIterator are CellType >diff --git a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index b467a47b3c..4493aeb712 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,122 @@ >+2020-03-18 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for scrollend event on Mac >+ https://bugs.webkit.org/show_bug.cgi?id=208813 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch deals with the user scrolling on Mac: wheel scrolling, keyboard scrolling, autoscroll(drag scrolling). >+ Wheel scrolling: Besides user scroll, it might generate momentum scrolling, RubberBand, and scrollSnap. So add >+ m_detectScrollendTimer to detect when does the scrolling end. >+ Keyboard scrolling: Handled by ScrollAnimatorMac. For FrameView, the scrolling is animated, so save the position first, >+ then check the position when it actually scrolls. For RenderLayer, it is instant, so notify scroll end. >+ Autoscroll: Notify scroll end when autoscroll timer is stopped. >+ >+ * page/scrolling/AsyncScrollingCoordinator.cpp: >+ (WebCore::AsyncScrollingCoordinator::notifyScrollDidEnd): Notify the current scrolling ends. >+ * page/scrolling/AsyncScrollingCoordinator.h: >+ * page/scrolling/ScrollingCoordinator.h: >+ (WebCore::ScrollingCoordinator::notifyScrollDidEnd): Ditto. >+ * page/scrolling/ScrollingTree.h: >+ (WebCore::ScrollingTree::notifyScrollDidEnd): Ditto. >+ * page/scrolling/ThreadedScrollingTree.cpp: >+ (WebCore::ThreadedScrollingTree::notifyScrollDidEnd): Ditto. >+ * page/scrolling/ThreadedScrollingTree.h: >+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h: >+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm: >+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::notifyScrollDidEnd): Ditto. >+ * platform/ScrollAnimator.cpp: >+ (WebCore::ScrollAnimator::saveScrollendEventPosition const): Save the scroll position to fire scrollend event. >+ * platform/ScrollAnimator.h: >+ * platform/cocoa/ScrollController.h: >+ (WebCore::ScrollControllerClient::notifyScrollDidEnd): Ditto. >+ * platform/cocoa/ScrollController.mm: >+ (WebCore::ScrollController::ScrollController): Add m_detectScrollendTimer to detect when the wheel scrolling ends. >+ (WebCore::ScrollController::handleWheelEvent): Start the timer at PlatformWheelEventPhaseEnded phrase, and stop it >+ at PlatformWheelEventPhaseBegan phrase. >+ (WebCore::ScrollController::processWheelEventForScrollSnap): During ScrollSnap, start the timer at UserScrollEnd >+ status, and stop it at UserScrollBegin or UserScrolling status. >+ (WebCore::ScrollController::startDetectScrollendTimer): Start the timer, repeating 1/60 s >+ (WebCore::ScrollController::stopDetectScrollendTimer): Stop the timer and notifyScrollDidEnd. >+ (WebCore::ScrollController::detectScrollendTimerFired): If RubberBand, momentumScroll and scrollSnap is not in progress, stop the timer. >+ * platform/mac/ScrollAnimatorMac.h: >+ * platform/mac/ScrollAnimatorMac.mm: >+ (WebCore::ScrollAnimatorMac::scroll): For keyboard scrolling, if it's instant scrolling notifyScrollDidEnd, if it's >+ animated scrolling saveScrollendEventPosition. >+ (WebCore::ScrollAnimatorMac::notifyScrollDidEnd): Ditto. >+ * rendering/RenderBox.cpp: >+ (WebCore::RenderBox::stopAutoscroll): Put the target to the list when autoscroll stops. >+ * rendering/RenderBox.h: >+ (WebCore::RenderBox::stopAutoscroll): Deleted. >+ >+2020-03-17 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for scrollend event of programmatic scrolling >+ https://bugs.webkit.org/show_bug.cgi?id=209134 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support scrollend event for programmatic scrolling. Save the scroll position when starting >+ a scroll (instant / animated). Compare the current scroll position with the save one, when >+ RenderLayer/ScrollView actually scrolls. If they are same, put the target to a list in document. >+ The targets in the list would dispatch scrollend events. >+ >+ * dom/Document.cpp: >+ (WebCore::Document::commonTeardown): >+ (WebCore::Document::addPendingScrollendEventTarget): Append the targets to m_pendingScrollendEventTargetList. >+ (WebCore::Document::runScrollSteps): Dispatch scrollend event for each target. >+ * dom/Document.h: Add m_pendingScrollendEventTargetList which keeps the scrollend event targets. >+ * page/FrameView.cpp: >+ (WebCore::FrameView::setScrollPosition): Add saveScrollendPosition to indicate the position should be saved for scrollend event or not. >+ (WebCore::FrameView::scrollToOffsetWithAnimation): checkScrollendEventPosition if the scroll position don't change. >+ (WebCore::FrameView::saveScrollendEventPosition): Save the scroll position, a scrollend event would be fired at this position. >+ (WebCore::FrameView::checkScrollendEventPosition): If position is equal to the saved one, add the target to the scrollend list. >+ (WebCore::FrameView::forceScrollend): Add the target to the list without checking its scroll position. >+ * page/FrameView.h: >+ * platform/ScrollAnimationSmooth.cpp: >+ (WebCore::ScrollAnimationSmooth::stop): If the animation is interrupted, call forceScrollend() to fire scrollend event without checking the position. >+ (WebCore::ScrollAnimationSmooth::animationTimerFired): When the animation ends natural, call checkScrollendEventPosition. >+ * platform/ScrollView.cpp: >+ (WebCore::ScrollView::scrollTo): checkScrollendEventPosition when scrollPosition changed. >+ (WebCore::ScrollView::setScrollPosition): saveScrollendEventPosition for programmatic scrolling. checkScrollendEventPosition when the position doesn't change. >+ * platform/ScrollView.h: Add saveScrollendPosition flag. >+ * platform/ScrollableArea.h: >+ (WebCore::ScrollableArea::saveScrollendEventPosition): Ditto. >+ (WebCore::ScrollableArea::checkScrollendEventPosition): Ditto. >+ (WebCore::ScrollableArea::forceScrollend): Ditto. >+ * rendering/RenderBox.cpp: >+ (WebCore::RenderBox::setScrollPosition): >+ * rendering/RenderLayer.cpp: >+ (WebCore::RenderLayer::scrollToXPosition): >+ (WebCore::RenderLayer::scrollToYPosition): >+ (WebCore::RenderLayer::setScrollPosition): Replace scrollToPosition with setScrollPosition to consistent with FrameView interfaces. saveScrollendEventPosition for programmatic scrolling. >+ (WebCore::RenderLayer::scrollToOffset): checkScrollendEventPosition when scroll position doesn't change. >+ (WebCore::RenderLayer::scrollToOffsetWithAnimation): Ditto. >+ (WebCore::RenderLayer::scrollTo): checkScrollendEventPosition when the scrollPosition changed. >+ (WebCore::RenderLayer::scrollRectToVisible): AutoscrollStatus is available by eventHandler, so no need to add a function variable for it. >+ (WebCore::RenderLayer::autoscroll): >+ (WebCore::RenderLayer::scrollToPosition): Deleted. Replaced by scrollToPosition. >+ * rendering/RenderLayer.h: >+ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Parse onoverscroll/scrollend attribute and overscroll/overscroll event name. >+ >+ * bindings/js/WebCoreBuiltinNames.h: >+ * dom/EventNames.h: >+ * dom/GlobalEventHandlers.idl: >+ * html/HTMLAttributeNames.in: >+ * html/HTMLElement.cpp: >+ (WebCore::HTMLElement::createEventHandlerNameMap): >+ * page/Settings.yaml: >+ > 2020-03-17 youenn fablet <youenn@apple.com> > > Safari doesn't insert mDNS candidates to SDP >diff --git a/Source/WebCore/Configurations/FeatureDefines.xcconfig b/Source/WebCore/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Source/WebCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 7f85a0cfa8..da9496e19c 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,16 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add ENABLE_OVERSCROLL_EVENTS. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2020-03-16 Alex Christensen <achristensen@webkit.org> > > Build fix. >diff --git a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/bindings/js/WebCoreBuiltinNames.h b/Source/WebCore/bindings/js/WebCoreBuiltinNames.h >index 1882a9effe..37e80132ba 100644 >--- a/Source/WebCore/bindings/js/WebCoreBuiltinNames.h >+++ b/Source/WebCore/bindings/js/WebCoreBuiltinNames.h >@@ -304,6 +304,8 @@ namespace WebCore { > macro(matchingElementInFlatTree) \ > macro(mediaStreamTrackConstraints) \ > macro(openDatabase) \ >+ macro(onoverscroll) \ >+ macro(onscrollend) \ > macro(ontouchcancel) \ > macro(ontouchend) \ > macro(ontouchmove) \ >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index 61dba74b3d..5be4b80baa 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -799,6 +799,10 @@ void Document::commonTeardown() > > m_pendingScrollEventTargetList = nullptr; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ m_pendingScrollendEventTargetList = nullptr; >+#endif >+ > while (!m_timelines.computesEmpty()) > m_timelines.begin()->detachFromDocument(); > m_timeline = nullptr; >@@ -4066,6 +4070,23 @@ void Document::addPendingScrollEventTarget(ContainerNode& target) > targets.append(target); > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void Document::addPendingScrollendEventTarget(ContainerNode& target) >+{ >+ if (!m_pendingScrollendEventTargetList) >+ m_pendingScrollendEventTargetList = makeUnique<PendingScrollEventTargetList>(); >+ >+ auto& targets = m_pendingScrollendEventTargetList->targets; >+ if (targets.findMatching([&] (auto& entry) { return entry.ptr() == ⌖ }) != notFound) >+ return; >+ >+ if (targets.isEmpty()) >+ scheduleTimedRenderingUpdate(); >+ >+ targets.append(target); >+} >+#endif >+ > void Document::setNeedsVisualViewportScrollEvent() > { > if (!m_needsVisualViewportScrollEvent) >@@ -4091,6 +4112,18 @@ void Document::runScrollSteps() > if (auto* window = domWindow()) > window->visualViewport().dispatchEvent(Event::create(eventNames().scrollEvent, Event::CanBubble::No, Event::IsCancelable::No)); > } >+ >+#if ENABLE(OVERSCROLL_EVENTS) >+ // Deal with scrollend event. >+ if (m_pendingScrollendEventTargetList && !m_pendingScrollendEventTargetList->targets.isEmpty()) { >+ LOG_WITH_STREAM(Events, stream << "Document" << this << "sending scrollend events to pending scroll event targets"); >+ auto currentScrollendTargets = WTFMove(m_pendingScrollendEventTargetList->targets); >+ for (auto& target : currentScrollendTargets) { >+ auto bubbles = target->isDocumentNode() ? Event::CanBubble::Yes : Event::CanBubble::No; >+ target->dispatchEvent(Event::create(eventNames().scrollendEvent, bubbles, Event::IsCancelable::No)); >+ } >+ } >+#endif > } > > void Document::addAudioProducer(MediaProducer& audioProducer) >diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h >index 559a9838b6..9242d54162 100644 >--- a/Source/WebCore/dom/Document.h >+++ b/Source/WebCore/dom/Document.h >@@ -1360,6 +1360,9 @@ public: > void runResizeSteps(); > > void addPendingScrollEventTarget(ContainerNode&); >+#if ENABLE(OVERSCROLL_EVENTS) >+ void addPendingScrollendEventTarget(ContainerNode&); >+#endif > void setNeedsVisualViewportScrollEvent(); > void runScrollSteps(); > >@@ -2039,6 +2042,9 @@ private: > > struct PendingScrollEventTargetList; > std::unique_ptr<PendingScrollEventTargetList> m_pendingScrollEventTargetList; >+#if ENABLE(OVERSCROLL_EVENTS) >+ std::unique_ptr<PendingScrollEventTargetList> m_pendingScrollendEventTargetList; >+#endif > > #if ENABLE(MEDIA_STREAM) > HashSet<HTMLMediaElement*> m_mediaStreamStateChangeElements; >diff --git a/Source/WebCore/dom/EventNames.h b/Source/WebCore/dom/EventNames.h >index 5ceee6f681..e4df4c4b7d 100644 >--- a/Source/WebCore/dom/EventNames.h >+++ b/Source/WebCore/dom/EventNames.h >@@ -191,6 +191,7 @@ namespace WebCore { > macro(orientationchange) \ > macro(overconstrained) \ > macro(overflowchanged) \ >+ macro(overscroll) \ > macro(pagehide) \ > macro(pageshow) \ > macro(paste) \ >@@ -227,6 +228,7 @@ namespace WebCore { > macro(result) \ > macro(resume) \ > macro(scroll) \ >+ macro(scrollend) \ > macro(search) \ > macro(securitypolicyviolation) \ > macro(seeked) \ >diff --git a/Source/WebCore/dom/GlobalEventHandlers.idl b/Source/WebCore/dom/GlobalEventHandlers.idl >index 770aa9c3a7..1f276534f7 100644 >--- a/Source/WebCore/dom/GlobalEventHandlers.idl >+++ b/Source/WebCore/dom/GlobalEventHandlers.idl >@@ -132,4 +132,8 @@ > [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown; > [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin; > [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup; >+ >+ // Event handlers from Overscroll Events API (https://wicg.github.io/overscroll-scrollend-events/) >+ [NotEnumerable, Conditional=OVERSCROLL_EVENTS, EnabledBySetting=OverscrollEvents] attribute EventHandler onoverscroll; >+ [NotEnumerable, Conditional=OVERSCROLL_EVENTS, EnabledBySetting=OverscrollEvents] attribute EventHandler onscrollend; > }; >diff --git a/Source/WebCore/html/HTMLAttributeNames.in b/Source/WebCore/html/HTMLAttributeNames.in >index dcd8378d95..099ffb8225 100644 >--- a/Source/WebCore/html/HTMLAttributeNames.in >+++ b/Source/WebCore/html/HTMLAttributeNames.in >@@ -267,6 +267,7 @@ onmousewheel > ononline > onoffline > onorientationchange >+onoverscroll > onpagehide > onpageshow > onpaste >@@ -287,6 +288,7 @@ onratechange > onreset > onresize > onscroll >+onscrollend > onsearch > onseeked > onseeking >diff --git a/Source/WebCore/html/HTMLElement.cpp b/Source/WebCore/html/HTMLElement.cpp >index 32ed4ad31b..ae59ac12f8 100644 >--- a/Source/WebCore/html/HTMLElement.cpp >+++ b/Source/WebCore/html/HTMLElement.cpp >@@ -284,6 +284,7 @@ HTMLElement::EventHandlerNameMap HTMLElement::createEventHandlerNameMap() > &onmouseoverAttr.get(), > &onmouseupAttr.get(), > &onmousewheelAttr.get(), >+ &onoverscrollAttr.get(), > &onpasteAttr.get(), > &onpauseAttr.get(), > &onplayAttr.get(), >@@ -301,6 +302,7 @@ HTMLElement::EventHandlerNameMap HTMLElement::createEventHandlerNameMap() > &onresetAttr.get(), > &onresizeAttr.get(), > &onscrollAttr.get(), >+ &onscrollendAttr.get(), > &onsearchAttr.get(), > &onseekedAttr.get(), > &onseekingAttr.get(), >diff --git a/Source/WebCore/loader/HistoryController.cpp b/Source/WebCore/loader/HistoryController.cpp >index ab255dd0b7..93a7127680 100644 >--- a/Source/WebCore/loader/HistoryController.cpp >+++ b/Source/WebCore/loader/HistoryController.cpp >@@ -164,7 +164,7 @@ void HistoryController::restoreScrollPositionAndViewState() > if (page && m_frame.isMainFrame() && m_currentItem->pageScaleFactor()) > page->setPageScaleFactor(m_currentItem->pageScaleFactor() * page->viewScaleFactor(), desiredScrollPosition); > else >- view->setScrollPosition(desiredScrollPosition); >+ view->setScrollPosition(desiredScrollPosition, ScrollClamping::Clamped, false, false); > > // If the scroll position doesn't have to be clamped, consider it successfully restored. > if (m_frame.isMainFrame()) { >diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp >index 53f1798e8c..2dad294518 100644 >--- a/Source/WebCore/page/FrameView.cpp >+++ b/Source/WebCore/page/FrameView.cpp >@@ -2275,7 +2275,7 @@ void FrameView::scrollElementToRect(const Element& element, const IntRect& rect) > setScrollPosition(IntPoint(bounds.x() - centeringOffsetX - rect.x(), bounds.y() - centeringOffsetY - rect.y())); > } > >-void FrameView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollClamping clamping, bool animated) >+void FrameView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollClamping clamping, bool animated, bool saveScrollendPosition) > { > LOG_WITH_STREAM(Scrolling, stream << "FrameView::setScrollPosition " << scrollPosition << " , clearing anchor"); > >@@ -2291,7 +2291,7 @@ void FrameView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollCl > if (animated) > scrollToOffsetWithAnimation(scrollOffsetFromPosition(scrollPosition), currentScrollType(), clamping); > else >- ScrollView::setScrollPosition(scrollPosition, clamping); >+ ScrollView::setScrollPosition(scrollPosition, clamping, animated, saveScrollendPosition); > > setCurrentScrollType(oldScrollType); > } >@@ -3614,12 +3614,48 @@ void FrameView::scrollToOffsetWithAnimation(const ScrollOffset& offset, ScrollTy > > if (currentScrollBehaviorStatus() == ScrollBehaviorStatus::InNonNativeAnimation) > scrollAnimator().cancelAnimations(); >+ >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (offset == this->scrollOffset()) >+ checkScrollendEventPosition(scrollPositionFromOffset(offset)); >+#endif >+ > if (offset != this->scrollOffset()) > ScrollableArea::scrollToOffsetWithAnimation(offset); > > setCurrentScrollType(previousScrollType); > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void FrameView::saveScrollendEventPosition(const ScrollPosition& position) >+{ >+ if (!frame().settings().overscrollEventsEnabled()) >+ return; >+ >+ m_fireScrollendEventAtPosition = position; >+} >+ >+void FrameView::checkScrollendEventPosition(const ScrollPosition& position) >+{ >+ if (!m_fireScrollendEventAtPosition || m_fireScrollendEventAtPosition.value() != position) >+ return; >+ >+ if (Document* document = frame().document()) >+ document->addPendingScrollendEventTarget(*document); >+ >+ m_fireScrollendEventAtPosition = WTF::nullopt; >+} >+ >+void FrameView::forceScrollend() >+{ >+ if (!frame().settings().overscrollEventsEnabled()) >+ return; >+ >+ if (Document* document = frame().document()) >+ document->addPendingScrollendEventTarget(*document); >+} >+#endif >+ > float FrameView::adjustScrollStepForFixedContent(float step, ScrollbarOrientation orientation, ScrollGranularity granularity) > { > if (granularity != ScrollByPage || orientation == HorizontalScrollbar) >diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h >index c22e4e58c1..d5d038bb4a 100644 >--- a/Source/WebCore/page/FrameView.h >+++ b/Source/WebCore/page/FrameView.h >@@ -225,7 +225,7 @@ public: > #if USE(COORDINATED_GRAPHICS) > WEBCORE_EXPORT void setFixedVisibleContentRect(const IntRect&) final; > #endif >- WEBCORE_EXPORT void setScrollPosition(const ScrollPosition&, ScrollClamping = ScrollClamping::Clamped, bool animated = false) final; >+ WEBCORE_EXPORT void setScrollPosition(const ScrollPosition&, ScrollClamping = ScrollClamping::Clamped, bool animated = false, bool saveScrollendPosition = true) final; > void restoreScrollbar(); > void scheduleScrollToFocusedElement(SelectionRevealMode); > void scrollToFocusedElementImmediatelyIfNeeded(); >@@ -658,6 +658,12 @@ public: > > bool inUpdateEmbeddedObjects() const { return m_inUpdateEmbeddedObjects; } > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void saveScrollendEventPosition(const ScrollPosition&) final; >+ void checkScrollendEventPosition(const ScrollPosition&) final; >+ void forceScrollend() final; >+#endif >+ > protected: > bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) final; > void scrollContentsSlowPath(const IntRect& updateRect) final; >@@ -893,6 +899,10 @@ private: > > Pagination m_pagination; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ Optional<ScrollPosition> m_fireScrollendEventAtPosition; >+#endif >+ > enum class ViewportRendererType : uint8_t { None, Document, Body }; > ViewportRendererType m_viewportRendererType { ViewportRendererType::None }; > ScrollPinningBehavior m_scrollPinningBehavior { DoNotPin }; >diff --git a/Source/WebCore/page/Settings.yaml b/Source/WebCore/page/Settings.yaml >index 25a8eabd47..07e516e57b 100644 >--- a/Source/WebCore/page/Settings.yaml >+++ b/Source/WebCore/page/Settings.yaml >@@ -916,6 +916,10 @@ isLoggedInAPIEnabled: > enterKeyHintEnabled: > initial: false > >+overscrollEventsEnabled: >+ initial: false >+ conditional: OVERSCROLL_EVENTS >+ > legacyGetUserMediaEnabled: > initial: false > conditional: MEDIA_STREAM >diff --git a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp >index ed72036743..f728c84b9c 100644 >--- a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp >+++ b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp >@@ -880,6 +880,29 @@ void AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged(Monoton > m_page->performanceLoggingClient()->logScrollingEvent(PerformanceLoggingClient::ScrollingEvent::SwitchedScrollingMode, timestamp, reasons.toRaw()); > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void AsyncScrollingCoordinator::notifyScrollDidEnd(ScrollingNodeID scrollingNodeID) >+{ >+ ASSERT(isMainThread()); >+ >+ if (!m_page) >+ return; >+ >+ auto* frameView = frameViewForScrollingNode(scrollingNodeID); >+ if (!frameView) >+ return; >+ >+ if (scrollingNodeID == frameView->scrollingNodeID()) { >+ frameView->forceScrollend(); >+ return; >+ } >+ >+ // Overflow-scroll area. >+ if (auto* scrollableArea = frameView->scrollableAreaForScrollLayerID(scrollingNodeID)) >+ scrollableArea->forceScrollend(); >+} >+#endif >+ > } // namespace WebCore > > #endif // ENABLE(ASYNC_SCROLLING) >diff --git a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h >index 6da2e83146..b68e6e7671 100644 >--- a/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h >+++ b/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h >@@ -68,6 +68,10 @@ public: > void reportExposedUnfilledArea(MonotonicTime, unsigned unfilledArea); > void reportSynchronousScrollingReasonsChanged(MonotonicTime, OptionSet<SynchronousScrollingReason>); > >+#if ENABLE(OVERSCROLL_EVENTS) >+ WEBCORE_EXPORT void notifyScrollDidEnd(ScrollingNodeID) override; >+#endif >+ > protected: > WEBCORE_EXPORT AsyncScrollingCoordinator(Page*); > >diff --git a/Source/WebCore/page/scrolling/ScrollingCoordinator.h b/Source/WebCore/page/scrolling/ScrollingCoordinator.h >index 0513fe7876..f5a7c3b0e3 100644 >--- a/Source/WebCore/page/scrolling/ScrollingCoordinator.h >+++ b/Source/WebCore/page/scrolling/ScrollingCoordinator.h >@@ -116,6 +116,10 @@ public: > void handleWheelEventPhase(PlatformWheelEventPhase); > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ WEBCORE_EXPORT virtual void notifyScrollDidEnd(ScrollingNodeID) { } >+#endif >+ > // Force all scroll layer position updates to happen on the main thread. > WEBCORE_EXPORT void setForceSynchronousScrollLayerPositionUpdates(bool); > >diff --git a/Source/WebCore/page/scrolling/ScrollingTree.h b/Source/WebCore/page/scrolling/ScrollingTree.h >index 7191a37623..59ce92d1b9 100644 >--- a/Source/WebCore/page/scrolling/ScrollingTree.h >+++ b/Source/WebCore/page/scrolling/ScrollingTree.h >@@ -111,6 +111,10 @@ public: > virtual void removeWheelEventTestCompletionDeferralForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) { } > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ virtual void notifyScrollDidEnd(ScrollingNodeID) { } >+#endif >+ > #if PLATFORM(COCOA) > WEBCORE_EXPORT virtual void currentSnapPointIndicesDidChange(ScrollingNodeID, unsigned horizontal, unsigned vertical) = 0; > #endif >diff --git a/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp b/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp >index 810afd4431..1ab6f0ce76 100644 >--- a/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp >+++ b/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp >@@ -225,6 +225,18 @@ void ThreadedScrollingTree::removeWheelEventTestCompletionDeferralForReason(Whee > > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+void ThreadedScrollingTree::notifyScrollDidEnd(ScrollingNodeID nodeID) >+{ >+ if (!m_scrollingCoordinator) >+ return; >+ >+ RunLoop::main().dispatch([scrollingCoordinator = m_scrollingCoordinator, nodeID] { >+ scrollingCoordinator->notifyScrollDidEnd(nodeID); >+ }); >+} >+#endif >+ > } // namespace WebCore > > #endif // ENABLE(ASYNC_SCROLLING) && ENABLE(SCROLLING_THREAD) >diff --git a/Source/WebCore/page/scrolling/ThreadedScrollingTree.h b/Source/WebCore/page/scrolling/ThreadedScrollingTree.h >index 05ddc5cd03..321d1d76a6 100644 >--- a/Source/WebCore/page/scrolling/ThreadedScrollingTree.h >+++ b/Source/WebCore/page/scrolling/ThreadedScrollingTree.h >@@ -70,6 +70,10 @@ protected: > void removeWheelEventTestCompletionDeferralForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) override; > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void notifyScrollDidEnd(ScrollingNodeID) override; >+#endif >+ > #if PLATFORM(COCOA) > void currentSnapPointIndicesDidChange(ScrollingNodeID, unsigned horizontal, unsigned vertical) override; > #endif >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >index f5d4de587f..6d15bc6b16 100644 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h >@@ -79,6 +79,10 @@ private: > void stopSnapRubberbandTimer() override; > void adjustScrollPositionToBoundsIfNecessary() override; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void notifyScrollDidEnd() override; >+#endif >+ > #if ENABLE(CSS_SCROLL_SNAP) > FloatPoint scrollOffset() const override; > void immediateScrollOnAxis(ScrollEventAxis, float delta) override; >diff --git a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >index 8d48e6d448..353e9b253c 100644 >--- a/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >+++ b/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm >@@ -253,6 +253,13 @@ void ScrollingTreeScrollingNodeDelegateMac::adjustScrollPositionToBoundsIfNecess > immediateScrollBy(constrainedPosition - scrollPosition); > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void ScrollingTreeScrollingNodeDelegateMac::notifyScrollDidEnd() >+{ >+ scrollingTree().notifyScrollDidEnd(scrollingNode().scrollingNodeID()); >+} >+#endif >+ > #if ENABLE(CSS_SCROLL_SNAP) > FloatPoint ScrollingTreeScrollingNodeDelegateMac::scrollOffset() const > { >diff --git a/Source/WebCore/platform/ScrollAnimationSmooth.cpp b/Source/WebCore/platform/ScrollAnimationSmooth.cpp >index 2ca578a30f..925d4c0eb1 100644 >--- a/Source/WebCore/platform/ScrollAnimationSmooth.cpp >+++ b/Source/WebCore/platform/ScrollAnimationSmooth.cpp >@@ -80,6 +80,11 @@ void ScrollAnimationSmooth::scroll(const FloatPoint& position) > > void ScrollAnimationSmooth::stop() > { >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (m_animationTimer.isActive()) >+ m_scrollableArea.forceScrollend(); >+#endif >+ > m_animationTimer.stop(); > m_scrollableArea.setScrollBehaviorStatus(ScrollBehaviorStatus::NotInAnimation); > } >@@ -410,8 +415,12 @@ void ScrollAnimationSmooth::animationTimerFired() > > if (continueAnimation) > startNextTimer(std::max(minimumTimerInterval, deltaToNextFrame)); >- else >+ else { > m_scrollableArea.setScrollBehaviorStatus(ScrollBehaviorStatus::NotInAnimation); >+#if ENABLE(OVERSCROLL_EVENTS) >+ m_scrollableArea.checkScrollendEventPosition(m_scrollableArea.scrollPosition()); >+#endif >+ } > > m_notifyPositionChangedFunction(FloatPoint(m_horizontalData.currentPosition, m_verticalData.currentPosition)); > } >diff --git a/Source/WebCore/platform/ScrollAnimator.cpp b/Source/WebCore/platform/ScrollAnimator.cpp >index 0fc729e912..b962805165 100644 >--- a/Source/WebCore/platform/ScrollAnimator.cpp >+++ b/Source/WebCore/platform/ScrollAnimator.cpp >@@ -188,6 +188,13 @@ void ScrollAnimator::setCurrentPosition(const FloatPoint& position) > updateActiveScrollSnapIndexForOffset(); > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void ScrollAnimator::saveScrollendEventPosition(const FloatPoint& position) const >+{ >+ m_scrollableArea.saveScrollendEventPosition(roundedIntPoint(position)); >+} >+#endif >+ > void ScrollAnimator::updateActiveScrollSnapIndexForOffset() > { > #if ENABLE(CSS_SCROLL_SNAP) >diff --git a/Source/WebCore/platform/ScrollAnimator.h b/Source/WebCore/platform/ScrollAnimator.h >index 9b7c09b690..9418b2a12e 100644 >--- a/Source/WebCore/platform/ScrollAnimator.h >+++ b/Source/WebCore/platform/ScrollAnimator.h >@@ -87,6 +87,10 @@ public: > void setCurrentPosition(const FloatPoint&); > const FloatPoint& currentPosition() const { return m_currentPosition; } > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void saveScrollendEventPosition(const FloatPoint&) const; >+#endif >+ > virtual void cancelAnimations(); > virtual void serviceScrollAnimations(); > >diff --git a/Source/WebCore/platform/ScrollView.cpp b/Source/WebCore/platform/ScrollView.cpp >index 2fd15f7b30..e018e292e2 100644 >--- a/Source/WebCore/platform/ScrollView.cpp >+++ b/Source/WebCore/platform/ScrollView.cpp >@@ -486,6 +486,10 @@ void ScrollView::scrollTo(const ScrollPosition& newPosition) > > m_scrollPosition = newPosition; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ checkScrollendEventPosition(m_scrollPosition); >+#endif >+ > if (scrollbarsSuppressed()) > return; > >@@ -513,7 +517,7 @@ void ScrollView::completeUpdatesAfterScrollTo(const IntSize& scrollDelta) > updateCompositingLayersAfterScrolling(); > } > >-void ScrollView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollClamping clamping, bool/* animated*/) >+void ScrollView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollClamping clamping, bool/* animated*/, bool saveScrollendPosition) > { > LOG_WITH_STREAM(Scrolling, stream << "ScrollView::setScrollPosition " << scrollPosition); > >@@ -525,13 +529,23 @@ void ScrollView::setScrollPosition(const ScrollPosition& scrollPosition, ScrollC > return; > } > >+ if (currentScrollBehaviorStatus() == ScrollBehaviorStatus::InNonNativeAnimation) >+ scrollAnimator().cancelAnimations(); >+ > ScrollPosition newScrollPosition = (!delegatesScrolling() && clamping == ScrollClamping::Clamped) ? adjustScrollPositionWithinRange(scrollPosition) : scrollPosition; >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (saveScrollendPosition) >+ saveScrollendEventPosition(newScrollPosition); >+#else >+ UNUSED_PARAM(saveScrollendPosition); >+#endif > >- if ((!delegatesScrolling() || currentScrollType() == ScrollType::User) && currentScrollBehaviorStatus() == ScrollBehaviorStatus::NotInAnimation && newScrollPosition == this->scrollPosition()) >+ if ((!delegatesScrolling() || currentScrollType() == ScrollType::User) && currentScrollBehaviorStatus() == ScrollBehaviorStatus::NotInAnimation && newScrollPosition == this->scrollPosition()) { >+#if ENABLE(OVERSCROLL_EVENTS) >+ checkScrollendEventPosition(newScrollPosition); >+#endif > return; >- >- if (currentScrollBehaviorStatus() == ScrollBehaviorStatus::InNonNativeAnimation) >- scrollAnimator().cancelAnimations(); >+ } > > if (!requestScrollPositionUpdate(newScrollPosition, currentScrollType(), clamping)) > updateScrollbars(newScrollPosition); >diff --git a/Source/WebCore/platform/ScrollView.h b/Source/WebCore/platform/ScrollView.h >index 4cc2bb4c0b..deacbb1d3f 100644 >--- a/Source/WebCore/platform/ScrollView.h >+++ b/Source/WebCore/platform/ScrollView.h >@@ -261,7 +261,7 @@ public: > ScrollPosition cachedScrollPosition() const { return m_cachedScrollPosition; } > > // Functions for scrolling the view. >- virtual void setScrollPosition(const ScrollPosition&, ScrollClamping = ScrollClamping::Clamped, bool animated = false); >+ virtual void setScrollPosition(const ScrollPosition&, ScrollClamping = ScrollClamping::Clamped, bool animated = false, bool saveScrollendPosition = true); > > void scrollBy(const IntSize& s) { return setScrollPosition(scrollPosition() + s); } > >diff --git a/Source/WebCore/platform/ScrollableArea.h b/Source/WebCore/platform/ScrollableArea.h >index fdddf2f9be..fab8cbb33f 100644 >--- a/Source/WebCore/platform/ScrollableArea.h >+++ b/Source/WebCore/platform/ScrollableArea.h >@@ -343,6 +343,12 @@ public: > > virtual bool shouldPlaceBlockDirectionScrollbarOnLeft() const = 0; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ virtual void saveScrollendEventPosition(const ScrollPosition&) { } >+ virtual void checkScrollendEventPosition(const ScrollPosition&) { } >+ virtual void forceScrollend() { } >+#endif >+ > protected: > WEBCORE_EXPORT ScrollableArea(); > WEBCORE_EXPORT virtual ~ScrollableArea(); >diff --git a/Source/WebCore/platform/cocoa/ScrollController.h b/Source/WebCore/platform/cocoa/ScrollController.h >index 69607cdca9..942f9d5c55 100644 >--- a/Source/WebCore/platform/cocoa/ScrollController.h >+++ b/Source/WebCore/platform/cocoa/ScrollController.h >@@ -78,6 +78,10 @@ public: > virtual void adjustScrollPositionToBoundsIfNecessary() = 0; > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ virtual void notifyScrollDidEnd() {} >+#endif >+ > virtual void deferWheelEventTestCompletionForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) const { /* Do nothing */ } > virtual void removeWheelEventTestCompletionDeferralForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) const { /* Do nothing */ } > >@@ -172,6 +176,11 @@ private: > #endif > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void startDetectScrollendTimer(); >+ void stopDetectScrollendTimer(); >+ void detectScrollendTimerFired(); >+#endif > ScrollControllerClient& m_client; > > #if PLATFORM(MAC) >@@ -198,6 +207,10 @@ private: > #endif > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+ RunLoop::Timer<ScrollController> m_detectScrollendTimer; >+#endif >+ > #if PLATFORM(MAC) > bool m_inScrollGesture { false }; > bool m_momentumScrollInProgress { false }; >diff --git a/Source/WebCore/platform/cocoa/ScrollController.mm b/Source/WebCore/platform/cocoa/ScrollController.mm >index 3560babf29..33de73ad4d 100644 >--- a/Source/WebCore/platform/cocoa/ScrollController.mm >+++ b/Source/WebCore/platform/cocoa/ScrollController.mm >@@ -93,6 +93,9 @@ ScrollController::ScrollController(ScrollControllerClient& client) > , m_statelessSnapTransitionTimer(RunLoop::current(), this, &ScrollController::statelessSnapTransitionTimerFired) > , m_scrollSnapTimer(RunLoop::current(), this, &ScrollController::scrollSnapTimerFired) > #endif >+#if ENABLE(OVERSCROLL_EVENTS) >+ , m_detectScrollendTimer(RunLoop::current(), this, &ScrollController::detectScrollendTimerFired) >+#endif > { > } > >@@ -121,12 +124,17 @@ bool ScrollController::handleWheelEvent(const PlatformWheelEvent& wheelEvent) > m_overflowScrollDelta = FloatSize(); > > stopSnapRubberbandTimer(); >- >+#if ENABLE(OVERSCROLL_EVENTS) >+ stopDetectScrollendTimer(); >+#endif > return true; > } > > if (wheelEvent.phase() == PlatformWheelEventPhaseEnded) { > snapRubberBand(); >+#if ENABLE(OVERSCROLL_EVENTS) >+ startDetectScrollendTimer(); >+#endif > return true; > } > >@@ -529,12 +537,18 @@ bool ScrollController::processWheelEventForScrollSnap(const PlatformWheelEvent& > case WheelEventStatus::UserScrollBegin: > case WheelEventStatus::UserScrolling: > stopScrollSnapTimer(); >+#if ENABLE(OVERSCROLL_EVENTS) >+ stopDetectScrollendTimer(); >+#endif > m_scrollSnapState->transitionToUserInteractionState(); > m_dragEndedScrollingVelocity = -wheelEvent.scrollingVelocity(); > break; > case WheelEventStatus::UserScrollEnd: > m_scrollSnapState->transitionToSnapAnimationState(m_client.scrollExtent(), m_client.viewportSize(), m_client.pageScaleFactor(), m_client.scrollOffset()); > startScrollSnapTimer(); >+#if ENABLE(OVERSCROLL_EVENTS) >+ startDetectScrollendTimer(); >+#endif > break; > case WheelEventStatus::InertialScrollBegin: > m_scrollSnapState->transitionToGlideAnimationState(m_client.scrollExtent(), m_client.viewportSize(), m_client.pageScaleFactor(), m_client.scrollOffset(), m_dragEndedScrollingVelocity, FloatSize(-wheelEvent.deltaX(), -wheelEvent.deltaY())); >@@ -679,6 +693,42 @@ void ScrollController::setActiveScrollSnapIndicesForOffset(int x, int y) > } > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) >+void ScrollController::startDetectScrollendTimer() >+{ >+ if (m_detectScrollendTimer.isActive()) >+ return; >+ >+ m_detectScrollendTimer.startRepeating(1_s / 60.); >+} >+ >+void ScrollController::stopDetectScrollendTimer() >+{ >+ if (!m_detectScrollendTimer.isActive()) >+ return; >+ >+ m_client.notifyScrollDidEnd(); >+ m_detectScrollendTimer.stop(); >+} >+ >+void ScrollController::detectScrollendTimerFired() >+{ >+ if (isRubberBandInProgress()) >+ return; >+ >+#if PLATFORM(MAC) >+ if (m_momentumScrollInProgress) >+ return; >+#if ENABLE(CSS_SCROLL_SNAP) >+ if (m_scrollSnapTimer.isActive()) >+ return; >+#endif >+#endif >+ >+ stopDetectScrollendTimer(); >+} >+#endif >+ > } // namespace WebCore > > #endif // ENABLE(RUBBER_BANDING) >diff --git a/Source/WebCore/platform/mac/ScrollAnimatorMac.h b/Source/WebCore/platform/mac/ScrollAnimatorMac.h >index 8795cf815a..fbc9f15278 100644 >--- a/Source/WebCore/platform/mac/ScrollAnimatorMac.h >+++ b/Source/WebCore/platform/mac/ScrollAnimatorMac.h >@@ -64,6 +64,10 @@ public: > > bool scrollbarsCanBeActive() const final; > >+#if ENABLE(OVERSCROLL_EVENTS) >+ //void scrollableAreaDidScroll(const FloatPoint& newPosition) final; >+#endif >+ > private: > RetainPtr<id> m_scrollAnimationHelper; > RetainPtr<WebScrollAnimationHelperDelegate> m_scrollAnimationHelperDelegate; >@@ -154,9 +158,16 @@ private: > bool isAlreadyPinnedInDirectionOfGesture(const PlatformWheelEvent&, ScrollEventAxis) const; > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) && (ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)) >+ void notifyScrollDidEnd() override; >+#endif >+ > bool m_haveScrolledSincePageLoad; > bool m_needsScrollerStyleUpdate; > IntRect m_visibleScrollerThumbRect; >+#if ENABLE(OVERSCROLL_EVENTS) >+ //Optional<FloatPoint> m_requiringPosition; >+#endif > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/mac/ScrollAnimatorMac.mm b/Source/WebCore/platform/mac/ScrollAnimatorMac.mm >index a41525420c..e1491a4c26 100644 >--- a/Source/WebCore/platform/mac/ScrollAnimatorMac.mm >+++ b/Source/WebCore/platform/mac/ScrollAnimatorMac.mm >@@ -761,11 +761,16 @@ bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranulari > { > m_haveScrolledSincePageLoad = true; > >- if (!scrollAnimationEnabledForSystem() || !m_scrollableArea.scrollAnimatorEnabled()) >- return ScrollAnimator::scroll(orientation, granularity, step, multiplier); >- >- if (granularity == ScrollByPixel) >- return ScrollAnimator::scroll(orientation, granularity, step, multiplier); >+ if (!scrollAnimationEnabledForSystem() || !m_scrollableArea.scrollAnimatorEnabled() || granularity == ScrollByPixel) { >+ if (ScrollAnimator::scroll(orientation, granularity, step, multiplier)) { >+#if ENABLE(OVERSCROLL_EVENTS) >+ // Send srollend event if the scroll applied immediately. >+ notifyScrollDidEnd(); >+#endif >+ return true; >+ } >+ return false; >+ } > > FloatPoint currentPosition = this->currentPosition(); > FloatSize delta; >@@ -775,8 +780,12 @@ bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranulari > delta.setHeight(step * multiplier); > > FloatPoint newPosition = FloatPoint(currentPosition + delta).constrainedBetween(m_scrollableArea.minimumScrollPosition(), m_scrollableArea.maximumScrollPosition()); >- if (currentPosition == newPosition) >+ if (currentPosition == newPosition) { >+#if ENABLE(OVERSCROLL_EVENTS) >+ notifyScrollDidEnd(); >+#endif > return false; >+ } > > if ([m_scrollAnimationHelper _isAnimating]) { > NSPoint targetOrigin = [m_scrollAnimationHelper targetOrigin]; >@@ -787,6 +796,9 @@ bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranulari > } > > LOG_WITH_STREAM(Scrolling, stream << "ScrollAnimatorMac::scroll " << " from " << currentPosition << " to " << newPosition); >+#if ENABLE(OVERSCROLL_EVENTS) >+ ScrollAnimator::saveScrollendEventPosition(newPosition); >+#endif > [m_scrollAnimationHelper scrollToPoint:newPosition]; > return true; > } >@@ -1369,6 +1381,13 @@ void ScrollAnimatorMac::immediateScrollBy(const FloatSize& delta) > } > #endif > >+#if ENABLE(OVERSCROLL_EVENTS) && (ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)) >+void ScrollAnimatorMac::notifyScrollDidEnd() >+{ >+ m_scrollableArea.forceScrollend(); >+} >+#endif >+ > void ScrollAnimatorMac::updateScrollerStyle() > { > if ([m_scrollerImpPair overlayScrollerStateIsLocked]) { >diff --git a/Source/WebCore/rendering/RenderBox.cpp b/Source/WebCore/rendering/RenderBox.cpp >index 40ba1ae217..abb2bf0dfe 100644 >--- a/Source/WebCore/rendering/RenderBox.cpp >+++ b/Source/WebCore/rendering/RenderBox.cpp >@@ -602,7 +602,7 @@ void RenderBox::setScrollPosition(const ScrollPosition& position, ScrollType scr > if (!hasOverflowClip() || !layer()) > return; > setupWheelEventMonitor(*layer()); >- layer()->scrollToPosition(position, scrollType, clamping, animated); >+ layer()->setScrollPosition(position, scrollType, clamping, animated); > } > > void RenderBox::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumulatedOffset) const >@@ -957,6 +957,16 @@ RenderBox* RenderBox::findAutoscrollable(RenderObject* renderer) > return is<RenderBox>(renderer) ? downcast<RenderBox>(renderer) : nullptr; > } > >+void RenderBox::stopAutoscroll() >+{ >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (isRenderView() && frame().view()) >+ frame().view()->forceScrollend(); >+ else if (layer()) >+ layer()->forceScrollend(); >+#endif >+} >+ > void RenderBox::panScroll(const IntPoint& source) > { > if (layer()) >diff --git a/Source/WebCore/rendering/RenderBox.h b/Source/WebCore/rendering/RenderBox.h >index c66ea5e773..1944b769a8 100644 >--- a/Source/WebCore/rendering/RenderBox.h >+++ b/Source/WebCore/rendering/RenderBox.h >@@ -471,7 +471,7 @@ override; > bool canAutoscroll() const; > IntSize calculateAutoscrollDirection(const IntPoint& windowPoint) const; > static RenderBox* findAutoscrollable(RenderObject*); >- virtual void stopAutoscroll() { } >+ virtual void stopAutoscroll(); > virtual void panScroll(const IntPoint&); > > bool hasVerticalScrollbarWithAutoBehavior() const; >diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp >index fbf3609c00..4e72962fb9 100644 >--- a/Source/WebCore/rendering/RenderLayer.cpp >+++ b/Source/WebCore/rendering/RenderLayer.cpp >@@ -2603,21 +2603,30 @@ void RenderLayer::applyPostLayoutScrollPositionIfNeeded() > void RenderLayer::scrollToXPosition(int x, ScrollType scrollType, ScrollClamping clamping, bool animated) > { > ScrollPosition position(x, m_scrollPosition.y()); >- scrollToPosition(position, scrollType, clamping, animated); >+ setScrollPosition(position, scrollType, clamping, animated); > } > > void RenderLayer::scrollToYPosition(int y, ScrollType scrollType, ScrollClamping clamping, bool animated) > { > ScrollPosition position(m_scrollPosition.x(), y); >- scrollToPosition(position, scrollType, clamping, animated); >+ setScrollPosition(position, scrollType, clamping, animated); > } > >-void RenderLayer::scrollToPosition(const ScrollPosition& position, ScrollType scrollType, ScrollClamping clamping, bool animated) >+void RenderLayer::setScrollPosition(const ScrollPosition& position, ScrollType scrollType, ScrollClamping clamping, bool animated, bool saveScrollendPosition) > { >+ auto offset = scrollOffsetFromPosition(position); >+ ScrollOffset newScrollOffset = clamping == ScrollClamping::Clamped ? clampScrollOffset(offset) : offset; >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (saveScrollendPosition) >+ saveScrollendEventPosition(scrollPositionFromOffset(newScrollOffset)); >+#else >+ UNUSED_PARAM(saveScrollendPosition); >+#endif >+ > if (animated) >- scrollToOffsetWithAnimation(scrollOffsetFromPosition(position), scrollType, clamping); >+ scrollToOffsetWithAnimation(newScrollOffset, scrollType, clamping); > else >- scrollToOffset(scrollOffsetFromPosition(position), scrollType, clamping); >+ scrollToOffset(newScrollOffset, scrollType, clamping); > } > > ScrollOffset RenderLayer::clampScrollOffset(const ScrollOffset& scrollOffset) const >@@ -2640,13 +2649,18 @@ void RenderLayer::scrollToOffset(const ScrollOffset& scrollOffset, ScrollType sc > scrollAnimator().cancelAnimations(); > > ScrollOffset clampedScrollOffset = clamping == ScrollClamping::Clamped ? clampScrollOffset(scrollOffset) : scrollOffset; >- if (clampedScrollOffset == this->scrollOffset()) >+ ScrollPosition clampedScrollPosition = scrollPositionFromOffset(clampedScrollOffset); >+ if (clampedScrollOffset == this->scrollOffset()) { >+#if ENABLE(OVERSCROLL_EVENTS) >+ checkScrollendEventPosition(clampedScrollPosition); >+#endif > return; >+ } > > auto previousScrollType = currentScrollType(); > setCurrentScrollType(scrollType); > >- if (!requestScrollPositionUpdate(scrollPositionFromOffset(clampedScrollOffset), scrollType, clamping)) >+ if (!requestScrollPositionUpdate(clampedScrollPosition, scrollType, clamping)) > scrollToOffsetWithoutAnimation(clampedScrollOffset, clamping); > setScrollBehaviorStatus(ScrollBehaviorStatus::NotInAnimation); > >@@ -2661,6 +2675,12 @@ void RenderLayer::scrollToOffsetWithAnimation(const ScrollOffset& offset, Scroll > ScrollOffset newScrollOffset = clamping == ScrollClamping::Clamped ? clampScrollOffset(offset) : offset; > if (currentScrollBehaviorStatus() == ScrollBehaviorStatus::InNonNativeAnimation) > scrollAnimator().cancelAnimations(); >+ >+#if ENABLE(OVERSCROLL_EVENTS) >+ if (newScrollOffset == this->scrollOffset()) >+ checkScrollendEventPosition(newScrollOffset); >+#endif >+ > if (newScrollOffset != this->scrollOffset()) > ScrollableArea::scrollToOffsetWithAnimation(newScrollOffset); > >@@ -2770,6 +2790,10 @@ void RenderLayer::scrollTo(const ScrollPosition& position) > if (Element* element = renderer().element()) > element->document().addPendingScrollEventTarget(*element); > >+#if ENABLE(OVERSCROLL_EVENTS) >+ checkScrollendEventPosition(m_scrollPosition); >+#endif >+ > if (scrollsOverflow()) > view.frameView().didChangeScrollOffset(); > >@@ -2815,12 +2839,13 @@ bool RenderLayer::allowsCurrentScroll() const > return box->hasHorizontalOverflow() || box->hasVerticalOverflow(); > } > >-void RenderLayer::scrollRectToVisible(const LayoutRect& absoluteRect, bool insideFixed, const ScrollRectToVisibleOptions& options, AutoscrollStatus autoscrollStatus) >+void RenderLayer::scrollRectToVisible(const LayoutRect& absoluteRect, bool insideFixed, const ScrollRectToVisibleOptions& options) > { > LOG_WITH_STREAM(Scrolling, stream << "Layer " << this << " scrollRectToVisible " << absoluteRect); > > RenderLayer* parentLayer = nullptr; > LayoutRect newRect = absoluteRect; >+ bool autoscrollNotInProgress = !renderer().frame().eventHandler().autoscrollInProgress(); > > // We may end up propagating a scroll event. It is important that we suspend events until > // the end of the function since they could delete the layer or the layer's renderer(). >@@ -2846,8 +2871,8 @@ void RenderLayer::scrollRectToVisible(const LayoutRect& absoluteRect, bool insid > ScrollOffset clampedScrollOffset = clampScrollOffset(scrollOffset() + toIntSize(roundedIntRect(revealRect).location())); > if (clampedScrollOffset != scrollOffset() || currentScrollBehaviorStatus() != ScrollBehaviorStatus::NotInAnimation) { > ScrollOffset oldScrollOffset = scrollOffset(); >- bool animated = autoscrollStatus == AutoscrollStatus::NotInProgress && useSmoothScrolling(options.behavior, box->element()); >- scrollToPosition(scrollPositionFromOffset(clampedScrollOffset), ScrollType::Programmatic, ScrollClamping::Clamped, animated); >+ bool animated = autoscrollNotInProgress && useSmoothScrolling(options.behavior, box->element()); >+ setScrollPosition(scrollPositionFromOffset(clampedScrollOffset), ScrollType::Programmatic, ScrollClamping::Clamped, animated, autoscrollNotInProgress); > IntSize scrollOffsetDifference = clampedScrollOffset - oldScrollOffset; > localExposeRect.move(-scrollOffsetDifference); > newRect = LayoutRect(box->localToAbsoluteQuad(FloatQuad(FloatRect(localExposeRect)), UseTransforms).boundingBox()); >@@ -2873,8 +2898,8 @@ void RenderLayer::scrollRectToVisible(const LayoutRect& absoluteRect, bool insid > scrollPosition = scrollPosition.constrainedBetween(IntPoint(), IntPoint(frameView.contentsSize())); > // FIXME: Should we use contentDocument()->scrollingElement()? > // See https://bugs.webkit.org/show_bug.cgi?id=205059 >- bool animated = autoscrollStatus == AutoscrollStatus::NotInProgress && ownerElement->contentDocument() && useSmoothScrolling(options.behavior, ownerElement->contentDocument()->documentElement()); >- frameView.setScrollPosition(scrollPosition, ScrollClamping::Clamped, animated); >+ bool animated = autoscrollNotInProgress && ownerElement->contentDocument() && useSmoothScrolling(options.behavior, ownerElement->contentDocument()->documentElement()); >+ frameView.setScrollPosition(scrollPosition, ScrollClamping::Clamped, animated, autoscrollNotInProgress); > > if (options.shouldAllowCrossOriginScrolling == ShouldAllowCrossOriginScrolling::Yes || frameView.safeToPropagateScrollToParent()) { > parentLayer = ownerElement->renderer()->enclosingLayer(); >@@ -2915,8 +2940,8 @@ void RenderLayer::scrollRectToVisible(const LayoutRect& absoluteRect, bool insid > ScrollOffset clampedScrollPosition = roundedIntPoint(revealRect.location()).constrainedBetween(minScrollPosition, maxScrollPosition); > // FIXME: Should we use document()->scrollingElement()? > // See https://bugs.webkit.org/show_bug.cgi?id=205059 >- bool animated = autoscrollStatus == AutoscrollStatus::NotInProgress && useSmoothScrolling(options.behavior, renderer().document().documentElement()); >- frameView.setScrollPosition(clampedScrollPosition, ScrollClamping::Clamped, animated); >+ bool animated = autoscrollNotInProgress && useSmoothScrolling(options.behavior, renderer().document().documentElement()); >+ frameView.setScrollPosition(clampedScrollPosition, ScrollClamping::Clamped, animated, autoscrollNotInProgress); > } > > // This is the outermost view of a web page, so after scrolling this view we >@@ -3055,7 +3080,7 @@ LayoutRect RenderLayer::getRectToExpose(const LayoutRect& visibleRect, const Lay > void RenderLayer::autoscroll(const IntPoint& positionInWindow) > { > IntPoint currentDocumentPosition = renderer().view().frameView().windowToContents(positionInWindow); >- scrollRectToVisible(LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), false, { SelectionRevealMode::Reveal, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded, ShouldAllowCrossOriginScrolling::Yes }, AutoscrollStatus::InProgress); >+ scrollRectToVisible(LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), false, { SelectionRevealMode::Reveal, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded, ShouldAllowCrossOriginScrolling::Yes }); > } > > bool RenderLayer::canResize() const >@@ -7010,6 +7035,36 @@ void RenderLayer::invalidateEventRegion() > #endif > } > >+#if ENABLE(OVERSCROLL_EVENTS) >+void RenderLayer::saveScrollendEventPosition(const ScrollPosition& position) >+{ >+ if (!renderer().settings().overscrollEventsEnabled()) >+ return; >+ >+ m_fireScrollendEventAtPosition = position; >+} >+ >+void RenderLayer::checkScrollendEventPosition(const ScrollPosition& position) >+{ >+ if (!m_fireScrollendEventAtPosition || m_fireScrollendEventAtPosition.value() != position) >+ return; >+ >+ if (Element* element = renderer().element()) >+ element->document().addPendingScrollendEventTarget(*element); >+ >+ m_fireScrollendEventAtPosition = WTF::nullopt; >+} >+ >+void RenderLayer::forceScrollend() >+{ >+ if (!renderer().settings().overscrollEventsEnabled()) >+ return; >+ >+ if (Element* element = renderer().element()) >+ element->document().addPendingScrollendEventTarget(*element); >+} >+#endif >+ > TextStream& operator<<(WTF::TextStream& ts, ClipRectsType clipRectsType) > { > switch (clipRectsType) { >diff --git a/Source/WebCore/rendering/RenderLayer.h b/Source/WebCore/rendering/RenderLayer.h >index 96d39ef4bf..7cde86ed03 100644 >--- a/Source/WebCore/rendering/RenderLayer.h >+++ b/Source/WebCore/rendering/RenderLayer.h >@@ -451,7 +451,7 @@ public: > > void scrollToXPosition(int x, ScrollType, ScrollClamping = ScrollClamping::Clamped, bool animated = false); > void scrollToYPosition(int y, ScrollType, ScrollClamping = ScrollClamping::Clamped, bool animated = false); >- void scrollToPosition(const ScrollPosition&, ScrollType, ScrollClamping = ScrollClamping::Clamped, bool animated = false); >+ void setScrollPosition(const ScrollPosition&, ScrollType, ScrollClamping = ScrollClamping::Clamped, bool animated = false, bool saveScrollendPosition = true); > > // These are only used by marquee. > void scrollToXOffset(int x) { scrollToOffset(ScrollOffset(x, scrollOffset().y()), ScrollType::Programmatic, ScrollClamping::Unclamped); } >@@ -462,9 +462,8 @@ public: > > void availableContentSizeChanged(AvailableSizeChangeReason) override; > >- enum AutoscrollStatus { NotInProgress, InProgress }; > // "absoluteRect" is in scaled document coordinates. >- void scrollRectToVisible(const LayoutRect& absoluteRect, bool insideFixed, const ScrollRectToVisibleOptions&, AutoscrollStatus = AutoscrollStatus::NotInProgress); >+ void scrollRectToVisible(const LayoutRect& absoluteRect, bool insideFixed, const ScrollRectToVisibleOptions&); > > bool scrollsOverflow() const; > bool hasScrollableHorizontalOverflow() const; >@@ -923,6 +922,12 @@ public: > > void invalidateEventRegion(); > >+#if ENABLE(OVERSCROLL_EVENTS) >+ void saveScrollendEventPosition(const ScrollPosition&) final; >+ void checkScrollendEventPosition(const ScrollPosition&) final; >+ void forceScrollend() final; >+#endif >+ > private: > > void setNextSibling(RenderLayer* next) { m_next = next; } >@@ -1353,6 +1358,10 @@ private: > > std::unique_ptr<RenderLayerFilters> m_filters; > std::unique_ptr<RenderLayerBacking> m_backing; >+ >+#if ENABLE(OVERSCROLL_EVENTS) >+ Optional<ScrollPosition> m_fireScrollendEventAtPosition; >+#endif > > PaintFrequencyTracker m_paintFrequencyTracker; > }; >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 417f690cca..77871ece54 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,17 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add ENABLE_OVERSCROLL_EVENTS. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ * Shared/WebPreferences.yaml: >+ > 2020-03-16 Simon Fraser <simon.fraser@apple.com> > > Add a bit more UIHitTesting logging, and make it possible to dump EventRegions from WebKit >diff --git a/Source/WebKit/Configurations/FeatureDefines.xcconfig b/Source/WebKit/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Source/WebKit/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKit/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebKit/Shared/WebPreferences.yaml b/Source/WebKit/Shared/WebPreferences.yaml >index 3c9ab033ab..6459ad10e7 100644 >--- a/Source/WebKit/Shared/WebPreferences.yaml >+++ b/Source/WebKit/Shared/WebPreferences.yaml >@@ -1564,6 +1564,14 @@ AspectRatioOfImgFromWidthAndHeightEnabled: > humanReadableDescription: "Map HTML attributes width/height to the default aspect ratio of <img>" > category: experimental > >+OverscrollEventsEnabled: >+ type: bool >+ defaultValue: false >+ humanReadableName: "Overscroll events" >+ humanReadableDescription: "Enable the onscrollend and scrollend events" >+ category: experimental >+ condition: ENABLE(OVERSCROLL_EVENTS) >+ > # For internal features: > # The type should be boolean. > # You must provide a humanReadableName and humanReadableDescription for all debug features. They >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 409f944e0a..0e66cf10de 100644 >--- a/Source/WebKitLegacy/mac/ChangeLog >+++ b/Source/WebKitLegacy/mac/ChangeLog >@@ -1,3 +1,23 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add overscrollEventsEnabled WebPreference setting. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ * WebView/WebPreferenceKeysPrivate.h: >+ * WebView/WebPreferences.mm: >+ (+[WebPreferences initialize]): >+ (-[WebPreferences overscrollEventsEnabled]): >+ (-[WebPreferences setOverscrollEventsEnabled:]): >+ * WebView/WebPreferencesPrivate.h: >+ * WebView/WebView.mm: >+ > 2020-03-15 Darin Adler <darin@apple.com> > > Move most of TextIterator off of live ranges >diff --git a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h b/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h >index 77b3989502..85f13565e8 100644 >--- a/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h >+++ b/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h >@@ -210,6 +210,7 @@ > #define WebKitCSSShadowPartsEnabledPreferenceKey @"WebKitCSSShadowPartsEnabled" > #define WebKitLayoutFormattingContextIntegrationEnabledPreferenceKey @"WebKitLayoutFormattingContextIntegrationEnabled" > #define WebKitWebSQLEnabledPreferenceKey @"WebKitWebSQLEnabled" >+#define WebKitOverscrollEventsEnabledPreferenceKey @"WebKitOverscrollEventsEnabled" > > #if !TARGET_OS_IPHONE > // These are private both because callers should be using the cover methods and because the >diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferences.mm b/Source/WebKitLegacy/mac/WebView/WebPreferences.mm >index 0279394308..c47aa1c03c 100644 >--- a/Source/WebKitLegacy/mac/WebView/WebPreferences.mm >+++ b/Source/WebKitLegacy/mac/WebView/WebPreferences.mm >@@ -714,6 +714,9 @@ public: > @NO, WebKitAspectRatioOfImgFromWidthAndHeightEnabledPreferenceKey, > @NO, WebKitWebSQLEnabledPreferenceKey, > @YES, WebKitDebugNeedsInAppBrowserPrivacyQuirksPreferenceKey, >+#if ENABLE(OVERSCROLL_EVENTS) >+ @NO, WebKitOverscrollEventsEnabledPreferenceKey, >+#endif > nil]; > > #if !PLATFORM(IOS_FAMILY) >@@ -3680,6 +3683,16 @@ static NSString *classIBCreatorID = nil; > [self _setBoolValue:webSQLEnabled forKey:WebKitWebSQLEnabledPreferenceKey]; > } > >+- (BOOL)overscrollEventsEnabled >+{ >+ return [self _boolValueForKey:WebKitOverscrollEventsEnabledPreferenceKey]; >+} >+ >+- (void)setOverscrollEventsEnabled:(BOOL)flag >+{ >+ [self _setBoolValue:flag forKey:WebKitOverscrollEventsEnabledPreferenceKey]; >+} >+ > @end > > @implementation WebPreferences (WebInternal) >diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h b/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h >index a84549d4ab..7ff7319d87 100644 >--- a/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h >+++ b/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h >@@ -688,6 +688,7 @@ extern NSString *WebPreferencesCacheModelChangedInternalNotification WEBKIT_DEPR > @property (nonatomic) BOOL asyncClipboardAPIEnabled; > @property (nonatomic) BOOL linkPreloadResponsiveImagesEnabled; > @property (nonatomic) BOOL aspectRatioOfImgFromWidthAndHeightEnabled; >+@property (nonatomic) BOOL overscrollEventsEnabled; > > #if TARGET_OS_IPHONE > @property (nonatomic) BOOL quickLookDocumentSavingEnabled; >diff --git a/Source/WebKitLegacy/mac/WebView/WebView.mm b/Source/WebKitLegacy/mac/WebView/WebView.mm >index 4d89d36b18..8794214b42 100644 >--- a/Source/WebKitLegacy/mac/WebView/WebView.mm >+++ b/Source/WebKitLegacy/mac/WebView/WebView.mm >@@ -3006,6 +3006,9 @@ static bool needsSelfRetainWhileLoadingQuirk() > settings.setCSSOMViewScrollingAPIEnabled([preferences CSSOMViewScrollingAPIEnabled]); > settings.setCSSOMViewSmoothScrollingEnabled([preferences CSSOMViewSmoothScrollingEnabled]); > settings.setMediaContentTypesRequiringHardwareSupport([preferences mediaContentTypesRequiringHardwareSupport]); >+#if ENABLE(OVERSCROLL_EVENTS) >+ settings.setOverscrollEventsEnabled([preferences overscrollEventsEnabled]); >+#endif > > switch ([preferences storageBlockingPolicy]) { > case WebAllowAllStorage: >diff --git a/Source/WebKitLegacy/win/ChangeLog b/Source/WebKitLegacy/win/ChangeLog >index f9898062ef..0e9b89f022 100644 >--- a/Source/WebKitLegacy/win/ChangeLog >+++ b/Source/WebKitLegacy/win/ChangeLog >@@ -1,3 +1,24 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Add overscrollEventsEnabled WebPreference setting. >+ >+ * Interfaces/IWebPreferencesPrivate.idl: >+ * WebPreferenceKeysPrivate.h: >+ * WebPreferences.cpp: >+ (WebPreferences::initializeDefaultSettings): >+ (WebPreferences::overscrollEventsEnabled): >+ (WebPreferences::setOverscrollEventsEnabled): >+ * WebPreferences.h: >+ * WebView.cpp: >+ (WebView::notifyPreferencesChanged): >+ > 2020-03-12 youenn fablet <youenn@apple.com> > > Make sure a preflight fails if response headers are invalid >diff --git a/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl b/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl >index dffd94dd86..65cf3ad97f 100644 >--- a/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl >+++ b/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl >@@ -265,4 +265,7 @@ interface IWebPreferencesPrivate8 : IWebPreferencesPrivate7 > { > HRESULT allowTopNavigationToDataURLs([out, retval] BOOL* enabled); > HRESULT setAllowTopNavigationToDataURLs([in] BOOL enabled); >+ HRESULT overscrollEventsEnabled([out, retval] BOOL*); >+ HRESULT setOverscrollEventsEnabled([in] BOOL enabled); >+ > } >diff --git a/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h b/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h >index 17bcf9be18..04aeb6c7ba 100644 >--- a/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h >+++ b/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h >@@ -227,3 +227,5 @@ > #define WebKitAspectRatioOfImgFromWidthAndHeightEnabledPreferenceKey "WebKitAspectRatioOfImgFromWidthAndHeightEnabled" > > #define WebKitWebSQLEnabledPreferenceKey "WebKitWebSQLEnabled" >+ >+#define WebKitOverscrollEventsEnabledPreferenceKey "WebKitOverscrollEventsEnabled" >diff --git a/Source/WebKitLegacy/win/WebPreferences.cpp b/Source/WebKitLegacy/win/WebPreferences.cpp >index dd29e9236c..184b2c8b8d 100644 >--- a/Source/WebKitLegacy/win/WebPreferences.cpp >+++ b/Source/WebKitLegacy/win/WebPreferences.cpp >@@ -354,6 +354,8 @@ void WebPreferences::initializeDefaultSettings() > > CFDictionaryAddValue(defaults, CFSTR(WebKitWebSQLEnabledPreferenceKey), kCFBooleanFalse); > >+ CFDictionaryAddValue(defaults, CFSTR(WebKitOverscrollEventsEnabledPreferenceKey), kCFBooleanFalse); >+ > defaultSettings = defaults; > #endif > } >@@ -2470,6 +2472,20 @@ HRESULT WebPreferences::setWebSQLEnabled(BOOL enabled) > return S_OK; > } > >+HRESULT WebPreferences::overscrollEventsEnabled(_Out_ BOOL* enabled) >+{ >+ if (!enabled) >+ return E_POINTER; >+ *enabled = boolValueForKey(WebKitOverscrollEventsEnabledPreferenceKey); >+ return S_OK; >+} >+ >+HRESULT WebPreferences::setOverscrollEventsEnabled(BOOL enabled) >+{ >+ setBoolValue(WebKitOverscrollEventsEnabledPreferenceKey, enabled); >+ return S_OK; >+} >+ > HRESULT WebPreferences::allowTopNavigationToDataURLs(_Out_ BOOL* allowAccess) > { > if (!allowAccess) >diff --git a/Source/WebKitLegacy/win/WebPreferences.h b/Source/WebKitLegacy/win/WebPreferences.h >index a31ba03a82..7098ee1192 100644 >--- a/Source/WebKitLegacy/win/WebPreferences.h >+++ b/Source/WebKitLegacy/win/WebPreferences.h >@@ -307,6 +307,8 @@ public: > // IWebPreferencesPrivate8 > virtual HRESULT STDMETHODCALLTYPE allowTopNavigationToDataURLs(_Out_ BOOL*); > virtual HRESULT STDMETHODCALLTYPE setAllowTopNavigationToDataURLs(BOOL); >+ virtual HRESULT STDMETHODCALLTYPE overscrollEventsEnabled(_Out_ BOOL*); >+ virtual HRESULT STDMETHODCALLTYPE setOverscrollEventsEnabled(BOOL); > > // WebPreferences > >diff --git a/Source/WebKitLegacy/win/WebView.cpp b/Source/WebKitLegacy/win/WebView.cpp >index d7053ec320..1e86ce45b6 100644 >--- a/Source/WebKitLegacy/win/WebView.cpp >+++ b/Source/WebKitLegacy/win/WebView.cpp >@@ -5668,6 +5668,11 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification) > return hr; > settings.setAspectRatioOfImgFromWidthAndHeightEnabled(!!enabled); > >+ hr = prefsPrivate->overscrollEventsEnabled(&enabled); >+ if (FAILED(hr)) >+ return hr; >+ settings.setOverscrollEventsEnabled(!!enabled); >+ > return S_OK; > } > >diff --git a/Source/cmake/WebKitFeatures.cmake b/Source/cmake/WebKitFeatures.cmake >index b591965119..93665a17f8 100644 >--- a/Source/cmake/WebKitFeatures.cmake >+++ b/Source/cmake/WebKitFeatures.cmake >@@ -181,6 +181,7 @@ macro(WEBKIT_OPTION_BEGIN) > WEBKIT_OPTION_DEFINE(ENABLE_OFFSCREEN_CANVAS "Toggle OffscreenCanvas support" PRIVATE OFF) > WEBKIT_OPTION_DEFINE(ENABLE_ORIENTATION_EVENTS "Toggle Orientation Events support" PRIVATE OFF) > WEBKIT_OPTION_DEFINE(ENABLE_OVERFLOW_SCROLLING_TOUCH "Toggle accelerated scrolling support" PRIVATE OFF) >+ WEBKIT_OPTION_DEFINE(ENABLE_OVERSCROLL_EVENTS "Toggle overscroll events" PRIVATE ON) > WEBKIT_OPTION_DEFINE(ENABLE_PAYMENT_REQUEST "Toggle Payment Request support" PRIVATE OFF) > WEBKIT_OPTION_DEFINE(ENABLE_PDFKIT_PLUGIN "Toggle PDFKit plugin support" PRIVATE OFF) > WEBKIT_OPTION_DEFINE(ENABLE_PICTURE_IN_PICTURE_API "Toggle Picture-in-Picture API support" PRIVATE OFF) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 467d837a9f..a6519e97e9 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,23 @@ >+2020-03-09 Cathie Chen <cathiechen@igalia.com> >+ >+ Add support for overscroll events parsing >+ https://bugs.webkit.org/show_bug.cgi?id=208802 >+ >+ Reviewed by Frédéric Wang. >+ >+ Based on Frédéric Wang's patch. >+ >+ Deal with overscrollEventsEnabled. >+ >+ * DumpRenderTree/TestOptions.cpp: >+ (TestOptions::TestOptions): >+ * DumpRenderTree/TestOptions.h: >+ * DumpRenderTree/mac/DumpRenderTree.mm: >+ (enableExperimentalFeatures): >+ (setWebPreferencesForTestOptions): >+ * Scripts/webkitperl/FeatureList.pm: >+ * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: >+ > 2020-03-16 Justin Michaud <justin_michaud@apple.com> > > Add personal email to Tools/Scripts/webkitpy/common/config/contributors.json >diff --git a/Tools/DumpRenderTree/TestOptions.cpp b/Tools/DumpRenderTree/TestOptions.cpp >index 290606a255..a312215ad3 100644 >--- a/Tools/DumpRenderTree/TestOptions.cpp >+++ b/Tools/DumpRenderTree/TestOptions.cpp >@@ -156,6 +156,8 @@ TestOptions::TestOptions(const std::string& pathOrURL, const std::string& absolu > enableAspectRatioOfImgFromWidthAndHeight = parseBooleanTestHeaderValue(value); > else if (key == "allowTopNavigationToDataURLs") > allowTopNavigationToDataURLs = parseBooleanTestHeaderValue(value); >+ else if (key == "experimental:OverscrollEventsEnabled") >+ enableOverscrollEvents = parseBooleanTestHeaderValue(value); > pairStart = pairEnd + 1; > } > } >diff --git a/Tools/DumpRenderTree/TestOptions.h b/Tools/DumpRenderTree/TestOptions.h >index ae4ba4ad5d..01cf3460a0 100644 >--- a/Tools/DumpRenderTree/TestOptions.h >+++ b/Tools/DumpRenderTree/TestOptions.h >@@ -58,6 +58,7 @@ struct TestOptions { > bool enableAspectRatioOfImgFromWidthAndHeight { false }; > bool enableWebSQL { true }; > bool allowTopNavigationToDataURLs { true }; >+ bool enableOverscrollEvents { false }; > std::string jscOptions; > std::string additionalSupportedImageTypes; > >diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >index b6fe2a5796..bc8f02c19d 100644 >--- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm >+++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >@@ -886,6 +886,7 @@ static void enableExperimentalFeatures(WebPreferences* preferences) > [preferences setCSSShadowPartsEnabled:YES]; > [preferences setAspectRatioOfImgFromWidthAndHeightEnabled:YES]; > [preferences setCSSOMViewSmoothScrollingEnabled:YES]; >+ [preferences setOverscrollEventsEnabled:YES]; > } > > // Called before each test. >@@ -1044,6 +1045,7 @@ static void setWebPreferencesForTestOptions(const TestOptions& options) > preferences.layoutFormattingContextIntegrationEnabled = options.layoutFormattingContextIntegrationEnabled; > preferences.aspectRatioOfImgFromWidthAndHeightEnabled = options.enableAspectRatioOfImgFromWidthAndHeight; > preferences.allowTopNavigationToDataURLs = options.allowTopNavigationToDataURLs; >+ preferences.overscrollEventsEnabled = options.enableOverscrollEvents; > } > > // Called once on DumpRenderTree startup. >diff --git a/Tools/Scripts/webkitperl/FeatureList.pm b/Tools/Scripts/webkitperl/FeatureList.pm >index 763aa2e832..34814c33b6 100644 >--- a/Tools/Scripts/webkitperl/FeatureList.pm >+++ b/Tools/Scripts/webkitperl/FeatureList.pm >@@ -138,6 +138,7 @@ my ( > $offscreenCanvasSupport, > $orientationEventsSupport, > $overflowScrollingTouchSupport, >+ $overscrollEventsSupport, > $paymentRequestSupport, > $pdfkitPluginSupport, > $pictureInPictureAPISupport, >@@ -464,6 +465,9 @@ my @features = ( > { option => "overflow-scrolling-touch", desc => "Toggle accelerated scrolling support", > define => "ENABLE_OVERFLOW_SCROLLING_TOUCH", value => \$overflowScrollingTouchSupport }, > >+ { option => "overscroll-events", desc => "Enable Overscroll Events support", >+ define => "ENABLE_OVERSCROLL_EVENTS", value => \$overscrollEventsSupport }, >+ > { option => "payment-request", desc => "Toggle Payment Request support", > define => "ENABLE_PAYMENT_REQUEST", value => \$paymentRequestSupport }, > >diff --git a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >index cfbb729513..106b5c4a0a 100644 >--- a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >+++ b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >@@ -296,6 +296,8 @@ ENABLE_OFFSCREEN_CANVAS = ; > ENABLE_OVERFLOW_SCROLLING_TOUCH = $(ENABLE_OVERFLOW_SCROLLING_TOUCH_$(WK_COCOA_TOUCH)); > ENABLE_OVERFLOW_SCROLLING_TOUCH_cocoatouch = ENABLE_OVERFLOW_SCROLLING_TOUCH; > >+ENABLE_OVERSCROLL_EVENTS = ENABLE_OVERSCROLL_EVENTS; >+ > ENABLE_PAYMENT_REQUEST = ENABLE_PAYMENT_REQUEST; > > ENABLE_PICTURE_IN_PICTURE_API = $(ENABLE_PICTURE_IN_PICTURE_API_$(WK_PLATFORM_NAME)); >@@ -416,4 +418,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCESSIBILITY_ISOLATED_TREE) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLE_PAY_SESSION_V4) $(ENABLE_APPLE_PAY_SESSION_V9) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_CONIC_GRADIENTS) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_PAINTING_API) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CSS_TYPED_OM) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_C_LOOP) $(ENABLE_DARK_MODE_CSS) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXPERIMENTAL_FEATURES) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FULLSCREEN_API) $(ENABLE_PICTURE_IN_PICTURE_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_GPU_PROCESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) $(ENABLE_INSPECTOR_TELEMETRY) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_MEMORY_SAMPLER) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION) $(ENABLE_NETWORK_CACHE_STALE_WHILE_REVALIDATE) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFSCREEN_CANVAS) $(ENABLE_OVERFLOW_SCROLLING_TOUCH) $(ENABLE_OVERSCROLL_EVENTS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESIZE_OBSERVER) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_LOAD_STATISTICS) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SANDBOX_EXTENSIONS) $(ENABLE_SERVER_PRECONNECT) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SHAREABLE_RESOURCE) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USERSELECT_ALL) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS) $(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS) $(ENABLE_WEBDRIVER_TOUCH_INTERACTIONS) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WEBXR) $(ENABLE_WEB_API_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_CRYPTO) $(ENABLE_WEB_RTC) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 208813
:
393835
|
393836
|
393839
|
393841
|
404830
|
404831
|
405452
|
405454