Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 918b43fcb7463e13f68137b9632551a9e1d0d1d6
https://github.com/WebKit/WebKit/commit/918b43fcb7463e13f68137b9632551a9e1d0d1d6
Author: Lily Spiniolas <[email protected]>
Date: 2026-06-01 (Mon, 01 Jun 2026)
Changed paths:
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WTF/wtf/PlatformEnableCocoa.h
M Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.h
M Source/WebCore/page/Chrome.cpp
M Source/WebCore/page/Chrome.h
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/page/LocalFrameView.cpp
M Source/WebCore/page/LocalFrameView.h
M Source/WebCore/platform/BoxSides.h
M Source/WebCore/platform/ScrollableArea.cpp
M Source/WebCore/platform/ScrollableArea.h
M Source/WebKit/Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm
M Source/WebKit/Shared/WebPreferencesDefaultValues.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
M Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm
A Source/WebKit/UIProcess/Cocoa/TransientZoomState.h
M Source/WebKit/UIProcess/PageClient.h
M
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeDrawingAreaProxyMac.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/UIProcess/mac/PageClientImplMac.h
M Source/WebKit/UIProcess/mac/PageClientImplMac.mm
M Source/WebKit/UIProcess/mac/WebViewImpl.h
M Source/WebKit/UIProcess/mac/WebViewImpl.mm
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ObscuredContentInsets.mm
Log Message:
-----------
[macOS] Page colors & content should not be visible in horizontal obscured
content inset areas if banner view overlays installed
https://bugs.webkit.org/show_bug.cgi?id=315494
rdar://175474208
Reviewed by Aditya Keerthi.
When horizontal banner view overlays are installed on the page (more on this in
a later change), we don't want any page content or colors to display in the
leading obscured content inset area on page load; we only want the system
background
color. While a page initially shouldn't have content or colors visible in the
leading
inset area, if the user scrolls horizontally or pinches to zoom in a manner
which
causes content to scroll underneath the leading inset area, then we should show
colors or content.
To achieve this when horizontal banner view overlays are detected, we install
two new
color extensions on the left and right of the page which always use the system
background color. They move based on the scroll position of the web page to
allow
content to display under inset areas when appropriate. We resize and relocate
the top
scroll pocket in the same manner so that any sampled header colors don't display
in the horizontal inset areas until other page content or colors do as well.
Finally,
sampled color extensions for left or right fixed elements now start with size
zero
on the leading side on page load. After scrolling or zooming, the color
extension
grows in order to stay aligned to the scroll pocket.
Test: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ObscuredContentInsets.mm
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WTF/wtf/PlatformEnableCocoa.h:
* Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.h:
* Source/WebCore/page/Chrome.cpp:
(WebCore::Chrome::scrollOriginDidChange const):
* Source/WebCore/page/Chrome.h:
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::scrollOriginDidChange const):
* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::scrollOriginDidChange):
* Source/WebCore/page/LocalFrameView.h:
* Source/WebCore/platform/BoxSides.h:
(WebCore::nameForBoxSide):
* Source/WebCore/platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::setScrollOrigin):
* Source/WebCore/platform/ScrollableArea.h:
(WebCore::ScrollableArea::scrollOriginDidChange):
* Source/WebKit/Shared/Cocoa/WebPreferencesDefaultValuesCocoa.mm:
(WebKit::defaultHorizontalBannerViewOverlaysEnabled):
* Source/WebKit/Shared/WebPreferencesDefaultValues.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _initializeWithConfiguration:]):
(-[WKWebView _updateFixedColorExtensionViews]):
(-[WKWebView _updateFixedColorExtensionViewFrames]):
(-[WKWebView _hasDetectedHorizontalBannerViewOverlays]):
(-[WKWebView _updateAppearanceForSystemBackgroundColorExtensionViews]):
(-[WKWebView _shouldAdjustColorExtensionsForHorizontalBannerViewOverlays]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView
_enableColorExtensionBehaviorForHorizontalBannerViewOverlaysForTesting]):
(-[WKWebView
_disableColorExtensionBehaviorForHorizontalBannerViewOverlaysForTesting]):
(-[WKWebView
_clearColorExtensionBehaviorOverridesForHorizontalBannerViewOverlaysForTesting]):
(-[WKWebView _cancelFixedColorExtensionFadeAnimationsForTesting]):
* Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm:
(-[WKWebView viewDidChangeEffectiveAppearance]):
* Source/WebKit/UIProcess/Cocoa/TransientZoomState.h: Added.
* Source/WebKit/UIProcess/PageClient.h:
(WebKit::PageClient::didUpdateTransientZoomStateForScrollPocket):
(WebKit::PageClient::pageDidScroll):
*
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeDrawingAreaProxyMac.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxyMac::applyTransientZoomToLayer):
(WebKit::RemoteLayerTreeDrawingAreaProxyMac::removeTransientZoomFromLayer):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::pageDidScroll):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/mac/PageClientImplMac.h:
* Source/WebKit/UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::pageDidScroll):
(WebKit::PageClientImpl::didUpdateTransientZoomStateForScrollPocket):
* Source/WebKit/UIProcess/mac/WebViewImpl.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::setFrameSize):
(WebKit::WebViewImpl::setObscuredContentInsets):
(WebKit::WebViewImpl::pageDidScroll):
(WebKit::WebViewImpl::didChangeContentSize):
(WebKit::WebViewImpl::didUpdateTransientZoomStateForScrollPocket):
(WebKit::WebViewImpl::updateWebContentDistancesFromEdges):
(WebKit::WebViewImpl::updateScrollPocket):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::scrollOriginDidChange const):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::pageDidScroll):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/ObscuredContentInsets.mm:
(TestWebKitAPI::TEST(ObscuredContentInsets,
ResizeScrollPocketWithoutHorizontalBannerView)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
ResizeScrollPocketWithHorizontalBannerView)):
(TestWebKitAPI::HorizontalBannerOverlays::setUpWebView):
(TestWebKitAPI::HorizontalBannerOverlays::capturePageState):
(TestWebKitAPI::HorizontalBannerOverlays::scrollTo):
(TestWebKitAPI::HorizontalBannerOverlays::computeExpectedFrames):
(TestWebKitAPI::HorizontalBannerOverlays::expectFrameEqualWithTolerance):
(TestWebKitAPI::HorizontalBannerOverlays::verifyFrames):
(TestWebKitAPI::HorizontalBannerOverlays::runSubcases):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysNoOverflow)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysLeftToRightOverflow)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysLeftToRightOverflowWithFixedHeader)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysLeftToRightOverflowWithFixedHeaderAndSidebar)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysRightToLeftOverflow)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysRightToLeftOverflowWithFixedHeader)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysRightToLeftOverflowWithFixedHeaderAndSidebar)):
(TestWebKitAPI::TEST(ObscuredContentInsets,
HorizontalBannerOverlaysSystemBackgroundColorTracksAppearance)):
(TestWebKitAPI::TEST(ObscuredContentInsets, ResizeScrollPocket)):
Canonical link: https://commits.webkit.org/314338@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications