Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 32267a41143df67780edfd3edf5b600aac60053b
https://github.com/WebKit/WebKit/commit/32267a41143df67780edfd3edf5b600aac60053b
Author: Ahmad Saleem <[email protected]>
Date: 2026-05-20 (Wed, 20 May 2026)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-clipped-rect-target-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-container-element-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-group-target-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-image-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-intersection-with-fractional-bounds-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-rect-target-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-stroke-change-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-target-changes-position-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-transformed-rect-target-expected.txt
M Source/WebCore/page/IntersectionObserver.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.cpp
M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.h
Log Message:
-----------
IntersectionObserver reports incorrect bounds for SVG element targets
https://bugs.webkit.org/show_bug.cgi?id=314966
rdar://177260411
Reviewed by Simon Fraser.
IntersectionObserver::computeIntersectionState() returned an empty
LayoutRect for SVG renderers ("FIXME: Implement for SVG etc."), so
boundingClientRect / intersectionRect for SVG <rect>, <g>, <image>, etc.
were anchored at the document origin instead of the element's actual
position.
On the legacy SVG path, LegacyRenderSVGModelObject inherited
RenderObject's computeVisibleRectsInContainer, which walks parents
without applying SVG transforms or the SVG viewport clip. As a result,
intersectionRect was reported in SVG userspace coordinates instead of
CSS pixels when the <svg> had a viewBox with a non-1:1 scale.
Modern (LBSE) RenderSVGModelObject already overrides
computeVisibleRectsInContainer through computeVisibleRectsInSVGContainer,
which applies the layer transform of the anonymous viewport container
(carrying the viewBox->viewport scale via m_supplementalLayerTransform),
so the LBSE rect-walking path is correct once the local target bounds
are populated.
* Source/WebCore/page/IntersectionObserver.cpp:
(WebCore::IntersectionObserver::computeIntersectionState):
Compute localTargetBounds for SVG renderers using
borderBoxRectEquivalent() (modern) or strokeBoundingBox() (legacy),
matching the local rect that absoluteQuads() already feeds to
localToAbsoluteQuad() on those renderers.
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.h:
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGModelObject.cpp:
(WebCore::LegacyRenderSVGModelObject::computeVisibleRectsInContainer):
Override to delegate to computeFloatVisibleRectInContainer, which
already walks the SVG transform chain through SVGRenderSupport. Mirrors
the pattern in RenderSVGBlock::computeVisibleRectsInContainer for its
non-LBSE branch.
> Progressions:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-clipped-rect-target-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-container-element-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-group-target-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-image-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-intersection-with-fractional-bounds-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-rect-target-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-stroke-change-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-target-changes-position-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/intersection-observer/svg-transformed-rect-target-expected.txt:
Canonical link: https://commits.webkit.org/313596@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications