[webkit-changes] [WebKit/WebKit] 7ea701: [css-anchor-position-1] Restart anchor resolution ...
Kiet Ho
noreply at github.com
Fri Oct 25 14:53:16 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 7ea7016e8f1762c542f93faa186a69debb1b81ea
https://github.com/WebKit/WebKit/commit/7ea7016e8f1762c542f93faa186a69debb1b81ea
Author: Kiet Ho <kiet.ho at apple.com>
Date: 2024-10-25 (Fri, 25 Oct 2024)
Changed paths:
A LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-in-css-min-max-function-expected.html
A LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-in-css-min-max-function.html
A LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/reference/anchor-in-css-min-max-function-ref.html
M Source/WebCore/style/AnchorPositionEvaluator.cpp
Log Message:
-----------
[css-anchor-position-1] Restart anchor resolution if a new anchor reference is discovered after anchor resolution has concluded
rdar://137628927
https://bugs.webkit.org/show_bug.cgi?id=281169
Reviewed by Antti Koivisto.
It's possible for new anchor name references to be picked up after anchor resolution
has completed. Consider this CSS expression:
top: max(anchor(--a1 top),
anchor(--a2 top),
anchor(--a3 top))
min() and max() does short-circuit evaluation: the first argument is always evaluated,
and if any arguments from the second one evaluate to NaN, the overall result is NaN,
and the remaining arguments are not evaluated.
Dring the first pass of style/layout interleaving, only anchor(--a1 top) and
anchor(--a2 top) are evaluated. We learn that resolving this depends on anchor --a1 and
--a2, and we return NaN because there's no layout information to fully resolve. HOWEVER,
anchor(--a3 top) is not evaluated, and we don't pick up the dependency on --a3.
On the second pass of style/layout interleaving, anchor(--a1 top) and anchor(--a2 top)
evaluate to non-NaN, and only here is anchor(--a3 top) evaluated. BUT, at this point,
the anchor resolution process has already finished. If we request evaluation of anchor
--a3, it'll assume it's an invalid anchor reference, and not a anchor reference that we
have to resolve.
Fix this by setting the anchor resolution stage to the initial stage if we see
a new anchor reference. This forces anchor resolution to rerun and pick up new
references.
* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-in-css-min-max-function-expected.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-in-css-min-max-function.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/reference/anchor-in-css-min-max-function-ref.html: Added.
* Source/WebCore/style/AnchorPositionEvaluator.cpp:
(WebCore::Style::AnchorPositionEvaluator::evaluate):
Canonical link: https://commits.webkit.org/285714@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list