Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 30bf0f961d694189c96d527c0a0c86fe3a656c5d
https://github.com/WebKit/WebKit/commit/30bf0f961d694189c96d527c0a0c86fe3a656c5d
Author: Darin Adler <[email protected]>
Date: 2022-10-23 (Sun, 23 Oct 2022)
Changed paths:
M LayoutTests/TestExpectations
M LayoutTests/fast/text/font-face-javascript-expected.txt
M LayoutTests/fast/text/font-face-javascript.html
M LayoutTests/fast/text/font-loading-font-display-expected.txt
M LayoutTests/fast/text/font-loading-font-display.html
M LayoutTests/fast/text/font-selection-font-face-parse-expected.txt
M LayoutTests/fast/text/font-selection-font-face-parse.html
M LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt
M LayoutTests/fast/text/font-selection-font-loading-api-parse.html
M
LayoutTests/fast/text/variations/font-loading-api-parse-ranges-expected.txt
M LayoutTests/fast/text/variations/font-loading-api-parse-ranges.html
M
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/font-face-range-order-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/at-font-face-font-matching-expected.txt
M
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight-expected.txt
R
LayoutTests/platform/gtk/fast/text/font-selection-font-loading-api-parse-expected.txt
R
LayoutTests/platform/ios/fast/text/font-selection-font-face-parse-expected.txt
R
LayoutTests/platform/ios/fast/text/font-selection-font-loading-api-parse-expected.txt
M LayoutTests/platform/mac/TestExpectations
R
LayoutTests/platform/mac/fast/text/font-selection-font-face-parse-expected.txt
R
LayoutTests/platform/mac/fast/text/font-selection-font-loading-api-parse-expected.txt
R
LayoutTests/platform/wpe/fast/text/font-selection-font-face-parse-expected.txt
R
LayoutTests/platform/wpe/fast/text/font-selection-font-loading-api-parse-expected.txt
M Source/WebCore/css/CSSFontFace.cpp
M Source/WebCore/css/CSSFontFace.h
M Source/WebCore/css/CSSFontFaceSet.cpp
M Source/WebCore/css/CSSFontFaceSet.h
M Source/WebCore/css/CSSFontSelector.cpp
M Source/WebCore/css/CSSFontSelector.h
M Source/WebCore/css/CSSSegmentedFontFace.cpp
M Source/WebCore/css/FontFace.cpp
M Source/WebCore/css/FontFace.h
M Source/WebCore/css/FontFace.idl
M Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp
M Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h
M Source/WebCore/platform/graphics/FontSelectionAlgorithm.h
Log Message:
-----------
font-face must accept ranges in reverse order, and reverse them for
*computed* style
https://bugs.webkit.org/show_bug.cgi?id=246585
rdar://problem/101210777
[ Mac ] imported/w3c/web-platform-tests/server-timing/service_worker_idl.html
is flaky failing
https://bugs.webkit.org/show_bug.cgi?id=219907
rdar://problem/72351272
https://bugs.webkit.org/show_bug.cgi?id=244900
New Test(254036@main): [ iOS macOS Debug ] 3X
imported/w3c/web-platform-tests/dom/nodes/NodeList-static-length-getter-tampered-indexOf-(Layout
tests) are constant timeouts
rdar://problem/99657326
Reviewed by Tim Nguyen.
The biggest change here is to store the specified values in CSSFontFace. The
existing code was
not storing these values, and when querying it would return a computed value,
but that is not
the same thing. We store the values either in the style properties of a
StyleRuleFontFace if this
font face is connected to a CSS style rule, or in our own
MutableStyleProperties object if it is
not connected.
When it comes to tests, many of the ones we wrote for WebKit were expecting the
computed values,
but the web platform tests were expecting the specified values. The WebKit ones
needed some
updating to expect the correct behavior.
* LayoutTests/fast/text/font-face-javascript-expected.txt:
* LayoutTests/fast/text/font-face-javascript.html: Updated to expect the style
attribute to return
the specified style "oblique" rather than the computed style "italic".
* LayoutTests/fast/text/font-loading-font-display-expected.txt:
* LayoutTests/fast/text/font-loading-font-display.html: Updated to expect
font-display to get set
to "auto" when we set the display attribute on a FontFace to "auto". The old
code expected the
empty string, but a review of the specification makes it clear that was not
correct.
* LayoutTests/fast/text/font-selection-font-face-parse-expected.txt:
* LayoutTests/fast/text/font-selection-font-face-parse.html: Updated since out
of order ranges now
are parsed successfully. There was one test case each for fontWeight,
fontStretch, and fontStyle
that was affected.
* LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt:
* LayoutTests/fast/text/font-selection-font-loading-api-parse.html: Updated
since the style
attribute now returns the specified style rather than the computed style. That
means we get "400"
instead of "normal" and "700" instead of "bold", and other similar changes.
* LayoutTests/fast/text/variations/font-loading-api-parse-ranges-expected.txt:
* LayoutTests/fast/text/variations/font-loading-api-parse-ranges.html: Updated
since out of order
ranges are now parsed successfully. There was one case each for weight,
stretch, and style that
was affected.
* LayoutTests/TestExpectations: Removed expectation for simulcast-h264.html,
which has been removed.
*
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/font-face-range-order-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/at-font-face-descriptors-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/at-font-face-font-matching-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight-expected.txt:
*
LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/variations/font-style-parsing-expected.txt:
Updated expected results. These are mostly progressions. In a few cases we have
a test that is
newly failing because we are now parsing font-face correctly and matching
incorrectly. In those
cases the old version failed to parse so the test was saying PASS but that was
a false negative.
*
LayoutTests/platform/gtk/fast/text/font-selection-font-loading-api-parse-expected.txt:
Removed.
*
LayoutTests/platform/ios/fast/text/font-selection-font-face-parse-expected.txt:
Removed.
*
LayoutTests/platform/ios/fast/text/font-selection-font-loading-api-parse-expected.txt:
Removed.
*
LayoutTests/platform/mac/fast/text/font-selection-font-face-parse-expected.txt:
Removed.
*
LayoutTests/platform/mac/fast/text/font-selection-font-loading-api-parse-expected.txt:
Removed.
*
LayoutTests/platform/wpe/fast/text/font-selection-font-face-parse-expected.txt:
Removed.
*
LayoutTests/platform/wpe/fast/text/font-selection-font-loading-api-parse-expected.txt:
Removed.
* LayoutTests/platform/mac/TestExpectations: Removed expectations for
service_worker_idl.html and
NodeList-static-length-getter-tampered-indexOf-[1-3].html, which have been
removed.
* Source/WebCore/css/CSSFontFace.cpp:
(WebCore::propertiesOrCSSConnection): Added. Helper for the below. Could have
used a lambda, but then
the style checker would have gotten all confused.
(WebCore::CSSFontFace::CSSFontFace): Initialize m_propertiesOrCSSConnection.
(WebCore::CSSFontFace::properties): Added.
(WebCore::CSSFontFace::mutableProperties): Added.
(WebCore::CSSFontFace::cssConnection): Moved here from the header.
(WebCore::CSSFontFace::setFamilies): Changed argument type to CSSValueList. Use
mutableProperties.
Removed unneeded boolean return value.
(WebCore::CSSFontFace::setWeight): Use mutableProperties. Set the weight in
m_fontSelectionCapabilities directly rather than using a helper function.
(WebCore::CSSFontFace::setStretch): Use mutableProperties. Set the stretch in
m_fontSelectionCapabilities directly rather than using a helper function.
(WebCore::CSSFontFace::setStyle): Use mutableProperties. Set the slope in
m_fontSelectionCapabilities directly rather than using a helper function.
(WebCore::CSSFontFace::setUnicodeRange): Changed argument type to CSSValueList.
Use
mutableProperties. Removed unneeded boolean return value.
(WebCore::CSSFontFace::setFeatureSettings): Use mutableProperties. Renamed the
existing data member to m_parsedFeatureSettings.
(WebCore::CSSFontFace::setDisplay): Renamed from setLoadingBehavior to match
the terminology in the
specification. Use mutableProperties. Changed the argument type to
CSSPrimitiveValue.
(WebCore::CSSFontFace::family const): Added. Gets the property from the
properties object. Moved
logic here, to work around the fact that we use a list, from FontFace::family.
(WebCore::CSSFontFace::style const): Ditto.
(WebCore::CSSFontFace::weight const): Ditto.
(WebCore::CSSFontFace::stretch const): Ditto.
(WebCore::CSSFontFace::unicodeRange const): Ditto.
(WebCore::CSSFontFace::featureSettings const): Ditto.
(WebCore::CSSFontFace::display const): Ditto.
(WebCore::CSSFontFace::families const): Just a simple getter, here so the
header does not have
to include CSSValueList.h.
* Source/WebCore/css/CSSFontFace.h: Updated for the above. Removed the
functions that returned
various computed properties, and instead have functions that return the
specified properties
as strings since that is what FontFace needs for its interface. The only ones
that return computed
properties that are kept are families, ranges, and fontSelectionCapabilities;
they could probably
use names that make it clear they return computed values. Return a span instead
of a vector from
the ranges function, a pointer instead of an optional pointer from the families
function, and a
non-optional FontSelectionCapabilities from the fontSelectionCapabilities
function. Added private
member functions named properties and mutableProperties and replaced
m_cssConnection with a
private data member named m_propertiesOrCSSConnection. These store the
specified property values
in the appropriate place whether or not a CSS connection exists.
* Source/WebCore/css/CSSFontFaceSet.cpp:
(WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered): Added a
comment.
(WebCore::CSSFontFaceSet::addToFacesLookupTable): Updated for the return type
change of
CSSFontFace::families.
(WebCore::CSSFontFaceSet::remove): Ditto.
(WebCore::CSSFontFaceSet::fontFace): Updated to check the loading staus
explicitly instead of
doing it implicitly with the optional status of fontSelectionCapabilities. This
makes it more
explicit what this is doing, and perhaps might even lead us to discover the
code is unneeded later.
Updated since fontSelectionCapabilities return type is no longer optional.
* Source/WebCore/css/CSSFontFaceSet.h: Added newly-needed forward declaration.
* Source/WebCore/css/CSSFontSelector.cpp:
(WebCore::CSSFontSelector::addFontFaceRule): Updated for changes to
CSSFontFace::setFamilies,
CSSFontFace::setUnicodeRange, and CSSFontFace::setDisplay.
* Source/WebCore/css/CSSFontSelector.h: Removed unneeded forward declaration.
* Source/WebCore/css/CSSSegmentedFontFace.cpp:
(WebCore::CSSSegmentedFontFace::fontRanges): Updated for changes to
CSSFontFace::ranges and
CSSFontFace::fontSelectionCapabilities.
* Source/WebCore/css/FontFace.cpp:
(WebCore::FontFace::setFamily): Updated for change to CSSFontFace::setFamilies.
(WebCore::FontFace::setStyle): Removed unneeded special case for empty string;
the
CSSPropertyParserWorkerSafe::parseFontFaceStyle function fails to parse it.
(WebCore::FontFace::setWeight): Removed unneeded special case for empty string,
since the
CSSPropertyParserWorkerSafe::parseFontFaceWeight function fails to parse it.
(WebCore::FontFace::setStretch): Removed unneeded special case for empty
string, since the
CSSPropertyParserWorkerSafe::parseFontFaceStretch function fails to parse it.
(WebCore::FontFace::setUnicodeRange): Removed unneeded special case for empty
string, since the
CSSPropertyParserWorkerSafe::parseFontFaceUnicodeRange function fails to parse
it. Also updated
for change to CSSFontFace::setUnicodeRange.
(WebCore::FontFace::setFeatureSettings): Removed unneeded special case for
empty string, since the
CSSPropertyParserWorkerSafe::parseFontFaceFeatureSettings function fails to
parse it. Changed
the coding style to match the other surrounding functions.
(WebCore::FontFace::setDisplay): Removed unneeded special case for empty
string, since the
CSSPropertyParserWorkerSafe::parseFontFaceDisplay function fails to parse it.
Updated for the
change to CSSFontFace::setDisplay.
(WebCore::FontFace::family const): Instead of a computed value string, get the
specified value
string by calling the function on the CSSFontFace.
(WebCore::FontFace::style const): Ditto.
(WebCore::FontFace::weight const): Ditto.
(WebCore::FontFace::stretch const): Ditto.
(WebCore::FontFace::unicodeRange const): Ditto.
(WebCore::FontFace::featureSettings const): Ditto.
(WebCore::FontFace::display const): Ditto.
* Source/WebCore/css/FontFace.h: Removed ScriptExecutionContext argument from
display getter.
* Source/WebCore/css/FontFace.idl: Updated for the above.
* Source/WebCore/css/parser/CSSPropertyParserHelpers.h:
(WebCore::CSSPropertyParserHelpers::isFontStyleAngleInRange): Updated to allow
-90 and 90
degrees as specified.
* Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:
(WebCore::CSSPropertyParserWorkerSafe::parseFontFaceUnicodeRange): Return
CSSValueList.
(WebCore::CSSPropertyParserWorkerSafe::parseFontFaceDisplay): Return
CSSPrimitiveValue.
(WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStyleRange): Removed
the check that the
two angles are in order. This is now handled as part of style computation
instead.
(WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontWeightAbsoluteRange):
Removed the check
that the two weights are in order. This is now handled as part of style
computation instead.
(WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontStretchRange): Removed
the check that the
two stretches are in order. This is now handled as part of style computation
instead.
* Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h: Updated the return
types mentioned above.
* Source/WebCore/platform/graphics/FontSelectionAlgorithm.h: Change the
FontSelectionRange
constructor to sort the two values so either can be the minimum and either can
be the maximum.
This is the behavior the specification calls for. And it's required we do this
sorting as part
of the computation process, rather than when parsing the specified values.
Canonical link: https://commits.webkit.org/255893@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes