Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6cb05bb86a71c80c239b1169001cfc0c540a59f6
      
https://github.com/WebKit/WebKit/commit/6cb05bb86a71c80c239b1169001cfc0c540a59f6
  Author: Antti Koivisto <[email protected]>
  Date:   2026-10-08 (Thu, 08 Oct 2026)

  Changed paths:
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001.html
    M Source/WebCore/accessibility/AXFormActivityMonitor.cpp
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXUtilities.h
    M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityScrollView.cpp
    M Source/WebCore/css/CSSProperties.json
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/html/HTMLSelectElement.cpp
    M Source/WebCore/html/SearchInputType.cpp
    M Source/WebCore/html/shadow/TextControlInnerElements.cpp
    M 
Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBoxInlines.h
    M 
Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContentPainter.cpp
    M Source/WebCore/page/ElementTargetingController.cpp
    M Source/WebCore/page/LocalFrame.cpp
    M Source/WebCore/page/LocalFrameView.cpp
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/cocoa/ContentChangeObserver.cpp
    M Source/WebCore/page/text-extraction/TextExtraction.cpp
    M Source/WebCore/rendering/HitTestRequest.cpp
    M Source/WebCore/rendering/HitTestRequest.h
    M Source/WebCore/rendering/InlineBoxPainter.cpp
    M Source/WebCore/rendering/RenderBlock.cpp
    M Source/WebCore/rendering/RenderBlockFlow.cpp
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderElement.cpp
    M Source/WebCore/rendering/RenderElement.h
    M Source/WebCore/rendering/RenderElementInlines.h
    M Source/WebCore/rendering/RenderElementStyleInlines.h
    M Source/WebCore/rendering/RenderFileUploadControl.cpp
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderLayerCompositor.cpp
    M Source/WebCore/rendering/RenderLayerModelObject.cpp
    M Source/WebCore/rendering/RenderLayerScrollableArea.cpp
    M Source/WebCore/rendering/RenderListBox.cpp
    M Source/WebCore/rendering/RenderListOutsideMarker.cpp
    M Source/WebCore/rendering/RenderMedia.cpp
    M Source/WebCore/rendering/RenderObject.h
    M Source/WebCore/rendering/RenderReplaced.cpp
    M Source/WebCore/rendering/RenderSearchField.cpp
    M Source/WebCore/rendering/RenderTable.cpp
    M Source/WebCore/rendering/RenderTableCell.cpp
    M Source/WebCore/rendering/RenderTableRow.cpp
    M Source/WebCore/rendering/RenderTableSection.cpp
    M Source/WebCore/rendering/RenderView.cpp
    M Source/WebCore/rendering/RenderViewTransitionCapture.cpp
    M Source/WebCore/rendering/RenderWidget.cpp
    M Source/WebCore/rendering/cocoa/RenderThemeCocoa.mm
    M Source/WebCore/rendering/mathml/MathOperator.cpp
    M Source/WebCore/rendering/mathml/MathOperator.h
    M Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
    M Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp
    M Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
    M Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
    M Source/WebCore/rendering/mathml/RenderMathMLToken.cpp
    M Source/WebCore/rendering/style/RenderStyleConstants.cpp
    M Source/WebCore/rendering/style/RenderStyleConstants.h
    M Source/WebCore/rendering/style/UsedStyle.h
    M Source/WebCore/rendering/svg/RenderSVGContainer.cpp
    M Source/WebCore/rendering/svg/RenderSVGImage.cpp
    M Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
    M Source/WebCore/rendering/svg/RenderSVGRoot.cpp
    M Source/WebCore/rendering/svg/RenderSVGShape.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.cpp
    M Source/WebCore/rendering/svg/SVGTextBoxPainter.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGContainer.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp
    M Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
    M Source/WebCore/style/AnchorPositionEvaluator.cpp
    M Source/WebCore/style/StyleDifference.cpp
    M Source/WebCore/style/computed/StyleComputedStyle+GettersInlines.h
    M Source/WebCore/style/computed/StyleComputedStyle.h
    M Source/WebCore/svg/SVGClipPathElement.cpp
    M Source/WebCore/svg/SVGUseElement.cpp
    M Source/WebKitLegacy/mac/WebView/WebHTMLRepresentation.mm

  Log Message:
  -----------
  Move used visibility to UsedStyle
https://bugs.webkit.org/show_bug.cgi?id=326791
rdar://189496450

Reviewed by Alan Baradlay.

Test: 
imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001.html

Replace ComputedStyle::usedVisibility() with UsedStyle::visibility() so that 
all clients asking
whether a box is visible get the same answer. Used visibility can depend on 
renderer state, for
example line-clamp invisible boxes, which a ComputedStyle accessor can't see.

UsedStyle::visibility() returns a two-valued UsedVisibility. Outside table and 
flex layout,
visibility: collapse is the same as hidden. Clients comparing against 
Visibility::Hidden treated
collapse as visible, so collapsed SVG shapes and images were painted. Code 
without a box reads the
computed style fields directly.

* 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001-expected.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/svg/painting/reftests/visibility-collapse-001.html:
 Added.
* Source/WebCore/accessibility/AXFormActivityMonitor.cpp:
(WebCore::renderedTextColor):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::isNodeAccessible):
(WebCore::AXObjectCache::onInertOrVisibilityChange):
(WebCore::messageIsEmpty):
(WebCore::isVisibilityHidden):
(WebCore::isRenderHidden):

Add RenderObject overloads. The style overloads remain for elements without a 
renderer and for comparing styles.

* Source/WebCore/accessibility/AXUtilities.h:
* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::textUnderElement const):
(WebCore::accessibleNameForNode):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::selectedOptionCheckmark const):
(WebCore::AccessibilityObject::defaultObjectInclusion const):
(WebCore::AccessibilityObject::isWithinHiddenWebArea const):
* Source/WebCore/accessibility/AccessibilityScrollView.cpp:
(WebCore::AccessibilityScrollView::isHostingFrameRenderHidden const):
* Source/WebCore/css/CSSProperties.json:

Mark visibility as a custom used-style property.

* Source/WebCore/dom/Document.cpp:
(WebCore::Document::isPageBoxVisible):

The page box has no renderer.

* Source/WebCore/html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::menuListDefaultEventHandler):
* Source/WebCore/html/SearchInputType.cpp:
(WebCore::SearchInputType::menuStyle const):
* Source/WebCore/html/shadow/TextControlInnerElements.cpp:
(WebCore::SearchFieldCancelButtonElement::resolveCustomStyle):

This runs during style resolution, before there is a renderer.

* 
Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBoxInlines.h:
(WebCore::InlineDisplay::Box::isVisible const):

Display boxes read the style directly. Line-clamp is handled by truncation here.

* 
Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContentPainter.cpp:
(WebCore::LayoutIntegration::InlineContentPainter::paintEllipsis):
* Source/WebCore/page/ElementTargetingController.cpp:
(WebCore::elementAndAncestorsAreOnlyRenderedChildren):
* Source/WebCore/page/LocalFrame.cpp:
(WebCore::LocalFrame::searchForLabelsAboveCell):
(WebCore::LocalFrame::searchForLabelsBeforeElement):
* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::adjustVerticalPageScrollStepForFixedContent):
(WebCore::LocalFrameView::checkAndDispatchDidReachVisuallyNonEmptyState):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::updateFixedContainerEdges):
* Source/WebCore/page/cocoa/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::isVisuallyHidden):
* Source/WebCore/page/text-extraction/TextExtraction.cpp:
(WebCore::TextExtraction::visibleAssociatedLabelBounds):
(WebCore::TextExtraction::paintsVisibleContent):
(WebCore::TextExtraction::extractItemData):
(WebCore::TextExtraction::extractRenderedTokens):
(WebCore::TextExtraction::resolveMouseTarget):
* Source/WebCore/rendering/HitTestRequest.cpp:
(WebCore::HitTestRequest::isVisibleForStyle const):

Script-initiated hit testing keeps reading the computed value so the visibility 
adjustment UI feature stays unobservable.

* Source/WebCore/rendering/HitTestRequest.h:
* Source/WebCore/rendering/InlineBoxPainter.cpp:
(WebCore::InlineBoxPainter::paint):
(WebCore::InlineBoxPainter::paintMask):
(WebCore::InlineBoxPainter::paintDecorations):
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::paint):
(WebCore::RenderBlock::paintObject):
(WebCore::RenderBlock::shouldPaintSelectionGaps const):
(WebCore::isChildHitTestCandidate):
* Source/WebCore/rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::layoutBlock):
(WebCore::RenderBlockFlow::inlineSelectionGaps):
(WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint):
(WebCore::RenderBlockFlow::adjustFontSizes):
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::isCandidateForOpaquenessTest):
(WebCore::RenderBox::paintMask):
(WebCore::RenderBox::paintClippingMask):
(WebCore::RenderBox::positionForPoint):
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::visibilityIncludingForceHidden):

Style comparisons read the computed fields.

(WebCore::RenderElement::repaintBeforeStyleChange):
(WebCore::RenderElement::styleWillChange):
(WebCore::RenderElement::insertedIntoTree):
(WebCore::RenderElement::willBeRemovedFromTree):
(WebCore::RenderElement::isVisibleIgnoringGeometry const):
(WebCore::RenderElement::isInsideEntirelyHiddenLayer const):
* Source/WebCore/rendering/RenderElement.h:

Add a bit for line-clamp invisible boxes. Nothing sets it yet.

(WebCore::RenderElement::isHiddenByLineClamp const):
(WebCore::RenderElement::setIsHiddenByLineClamp):
* Source/WebCore/rendering/RenderElementInlines.h:
(WebCore::RenderObject::usedStyle const):

Text renderers use the parent view, like RenderObject::style().

* Source/WebCore/rendering/RenderElementStyleInlines.h:
(WebCore::RenderElement::visibleToHitTesting const):
* Source/WebCore/rendering/RenderFileUploadControl.cpp:
(WebCore::RenderFileUploadControl::paintObject):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::removeChild):
(WebCore::RenderLayer::dirtyVisibleContentStatusIncludingAncestors):
(WebCore::RenderLayer::computeHasVisibleContent const):
(WebCore::RenderLayer::calculateClipRects const):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateAfterDescendants):
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::layerStyleChanged):
(WebCore::RenderLayerCompositor::attachWidgetContentLayersIfNecessary):
(WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
(WebCore::RenderLayerCompositor::requiresCompositingForFrame const):
* Source/WebCore/rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::shouldPaintSVGRenderer const):
(WebCore::RenderLayerModelObject::paintSVGClippingMask const):
(WebCore::RenderLayerModelObject::paintSVGEventRegion):
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::canUseCompositedScrolling const):
* Source/WebCore/rendering/RenderListBox.cpp:
(WebCore::RenderListBox::paintObject):
(WebCore::RenderListBox::paintItemForeground):
(WebCore::RenderListBox::paintItemBackground):

Option items have no renderers.

* Source/WebCore/rendering/RenderListOutsideMarker.cpp:
(WebCore::RenderListOutsideMarker::paint):
* Source/WebCore/rendering/RenderMedia.cpp:
(WebCore::RenderMedia::styleDidChange):
* Source/WebCore/rendering/RenderObject.h:
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
(WebCore::RenderReplaced::shouldPaint):
* Source/WebCore/rendering/RenderSearchField.cpp:
(WebCore::RenderSearchField::updateCancelButtonVisibility const):
(WebCore::RenderSearchField::visibilityForCancelButton const):
* Source/WebCore/rendering/RenderTable.cpp:
(WebCore::RenderTable::paintObject):
(WebCore::RenderTable::paintMask):
* Source/WebCore/rendering/RenderTableCell.cpp:
(WebCore::RenderTableCell::paintCollapsedBorders):
(WebCore::RenderTableCell::paintBackgroundsBehindCell):
(WebCore::RenderTableCell::paintMask):
* Source/WebCore/rendering/RenderTableRow.cpp:
(WebCore::RenderTableRow::paintOutlineForRowIfNeeded):
* Source/WebCore/rendering/RenderTableSection.cpp:
(WebCore::RenderTableSection::paint):
* Source/WebCore/rendering/RenderView.cpp:
(WebCore::rendererObscuresBackground):
* Source/WebCore/rendering/RenderViewTransitionCapture.cpp:
(WebCore::RenderViewTransitionCapture::styleDidChange):
* Source/WebCore/rendering/RenderWidget.cpp:
(WebCore::RenderWidget::setWidget):
(WebCore::RenderWidget::styleDidChange):
* Source/WebCore/rendering/cocoa/RenderThemeCocoa.mm:
(WebCore::hasVisibleSliderThumbDescendant):
* Source/WebCore/rendering/mathml/MathOperator.cpp:
(WebCore::MathOperator::paint):
* Source/WebCore/rendering/mathml/MathOperator.h:
* Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp:
(WebCore::RenderMathMLFraction::paint):
* Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp:
(WebCore::RenderMathMLMenclose::paint):
* Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:
(WebCore::RenderMathMLOperator::paint):
* Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp:
(WebCore::RenderMathMLRoot::paint):
* Source/WebCore/rendering/mathml/RenderMathMLToken.cpp:
(WebCore::RenderMathMLToken::paint):
* Source/WebCore/rendering/style/RenderStyleConstants.cpp:
(WebCore::operator<<):
* Source/WebCore/rendering/style/RenderStyleConstants.h:

Add UsedVisibility.

* Source/WebCore/rendering/style/UsedStyle.h:
(WebCore::UsedStyle::visibility const):

Hidden for line-clamp invisible boxes, forced hiding, and collapse.

* Source/WebCore/rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::paint):
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::nodeAtPoint):
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::styleDidChange):
* Source/WebCore/rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::paint):
(WebCore::RenderSVGRoot::paintObject):
* Source/WebCore/rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::nodeAtPoint):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::nodeAtFloatPoint):
(WebCore::RenderSVGText::nodeAtPoint):
(WebCore::RenderSVGText::hitTestInlineChildren):
(WebCore::RenderSVGText::paint):
* Source/WebCore/rendering/svg/SVGTextBoxPainter.cpp:
(WebCore::SVGTextBoxPainter<TextBoxPath>::paintSelectionBackground):
(WebCore::SVGTextBoxPainter<TextBoxPath>::paint):
(WebCore::SVGTextBoxPainter<TextBoxPath>::paintDecoration):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGContainer.cpp:
(WebCore::LegacyRenderSVGContainer::paint):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp:
(WebCore::LegacyRenderSVGImage::paint):
(WebCore::LegacyRenderSVGImage::nodeAtFloatPoint):

Collapsed images are no longer painted.

* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp:
(WebCore::LegacyRenderSVGResourceClipper::pathOnlyClipping):
(WebCore::LegacyRenderSVGResourceClipper::drawContentIntoMaskImage):
(WebCore::LegacyRenderSVGResourceClipper::calculateClipContentRepaintRect):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp:
(WebCore::LegacyRenderSVGShape::paint):
(WebCore::LegacyRenderSVGShape::nodeAtFloatPoint):

Collapsed shapes are no longer painted.

* Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::reportVisuallyNonEmptyContent):
* Source/WebCore/style/AnchorPositionEvaluator.cpp:
(WebCore::Style::AnchorPositionEvaluator::isDefaultAnchorInvisibleOrClippedByInterveningBoxes):
* Source/WebCore/style/StyleDifference.cpp:
(WebCore::Style::visibilityIncludingForceHidden):
* Source/WebCore/style/computed/StyleComputedStyle+GettersInlines.h:
(WebCore::Style::ComputedStyle::usedVisibility const): Deleted.
* Source/WebCore/style/computed/StyleComputedStyle.h:
* Source/WebCore/svg/SVGClipPathElement.cpp:
(WebCore::SVGClipPathElement::shouldApplyPathClipping const):
(WebCore::SVGClipPathElement::calculateClipContentRepaintRect):
* Source/WebCore/svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::visibleTargetGraphicsElement const):
* Source/WebKitLegacy/mac/WebView/WebHTMLRepresentation.mm:
(searchForLabelsBeforeElement):

Canonical link: https://commits.webkit.org/323110@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to