<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[278540] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/278540">278540</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2021-06-06 19:39:33 -0700 (Sun, 06 Jun 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Handle custom identifiers and strings separately, so we can quote strings correctly consistently
https://bugs.webkit.org/show_bug.cgi?id=226694

Reviewed by Sam Weinig.

LayoutTests/imported/w3c:

* web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt:
* web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt:
* web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt:
* web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt:
* web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt:
* web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt:
* web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt:
* web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt:
* web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt:
* web-platform-tests/css/css-transitions/transition-property-002-expected.txt:
* web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt:
* web-platform-tests/css/cssom/serialize-values-expected.txt:
Rebased to reflect progressions. In some cases the entire test passes, in other cases we still
have failures, but the string serialization part of the test has progressed.

Source/WebCore:

Progressions in a number of WPT tests.

* animation/CSSAnimation.cpp:
(WebCore::CSSAnimation::CSSAnimation): Update since Animation::name() now
returns a struct.
* animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes): Ditto.

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::OrderedNamedLinesCollector::appendLines const): Use
createCustomIdent for line names.
(WebCore::valueForGridPosition): Use createCustomIdent for grid line name.
(WebCore::createTransitionPropertyValue): Use createCustomIdent for
animation property names.
(WebCore::counterToCSSValue): Use createCustomIdent for counter names.
(WebCore::ComputedStyleExtractor::valueForPropertyInStyle): Use
createCustomIdent for list-style-type, locale, animation names if they
were created from a custom-ident, and line-grid.

* css/CSSCustomIdentValue.cpp: Emptied out this file; we can delete it soon.
* css/CSSCustomIdentValue.h: Ditto.

* css/CSSMarkup.cpp:
(WebCore::serializeCharacterAsCodePoint): Optimized to do a single
StringBuilder::append call.
(WebCore::serializeAsStringOrCustomIdent): Deleted.
* css/CSSMarkup.h: Removed serializeAsStringOrCustomIdent.

* css/CSSPrimitiveValue.cpp:
(WebCore::isValidCSSUnitTypeForDoubleConversion): Added a case for
CustomIdent. Changed CSS_IDENT to assert not reached, since it should
never be passed to this function. More cleanup of CSSUnitType is needed,
but for now mostly leaving it alone.
(WebCore::isStringType): Added a case for CustomIdent. Moved CSS_DIMENSION,
which was incorrectly returning true, to return false. Pretty sure there's
no way to create one of these with CSS_DIMENSION, but this is less peculiar.
(WebCore::CSSPrimitiveValue::primitiveType const): Added transformation
from CustomIdent to CSS_IDENT as we do with CSS_PROPERTY_ID and CSS_VALUE_ID.
(WebCore::CSSPrimitiveValue::cleanup): Added a case for CustomIdent.
Moved CSS_DIMENSION to the correct section. Pretty sure there's no way to
create one of these with CSS_DIMENSION, but this is less peculiar.
(WebCore::CSSPrimitiveValue::setFloatValue): Deleted.
(WebCore::CSSPrimitiveValue::setStringValue): Deleted.
(WebCore::CSSPrimitiveValue::getStringValue const): Deleted.
(WebCore::CSSPrimitiveValue::stringValue const): Added a case for CustomIdent.
(WebCore::CSSPrimitiveValue::unitTypeString): Added a case for CustomIdent
and an ASSERT_NOT_REACHED for invalid enumeration values.
(WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
Removed inaccurate FIXME comment for CSS_DIMENSION and changed it to do
something less wrong, but still incorrect. Pretty sure there's no way to
create one of these with CSS_DIMENSION, but this is less peculiar. Changed
CSS_STRING case to always serializeAsString. Added a CustomIdent case
that always serializes as an identifier.
(WebCore::CSSPrimitiveValue::equals const): Moved the CSS_DIMENSION to
the correct part of this switch statement. Pretty sure there's no way to
create one of these with CSS_DIMENSION, but this is less peculiar.
Added case for CustomIdent.

* css/CSSPrimitiveValue.h: Made isFontRelativeLength, isResolution,
and isViewportPercentageLength private. Made those plus isLength all
constexpr. Removed WEBCORE_EXPORT from primitiveType and getFloatValue:
those needed to be exported when this was the web-exposed class, but
that is now DeprecatedCSSOMPrimitiveValue. Deleted setFloatValue,
setStringValue, and getStringValue for the same reason: those functions
are now in DeprecatedCSSOMPrimitiveValue and don't need to be here.

* css/CSSToStyleMap.cpp:
(WebCore::CSSToStyleMap::mapAnimationName): Updated to pass a boolean
in to the animation name to keep track of whether it was created with
a string or a custom-ident so we it can properly round-trip in computed
style. This is required to pass some of the WPT tests, although I could
not find clear guidance in the specification that this behavior is required.
The same name with a string and custom-ident are equivalent in other ways.

* css/CSSUnits.cpp:
(WebCore::operator<<): Added a case for CustomIdent.
* css/CSSUnits.h: Added CustomIdent. Added some FIXME about how we can
change this in the future. It's a remnant of the past when these were part
of our web-facing API, and this can be greatly cleaned up.

* css/CSSValue.cpp:
(WebCore::CSSValue::cssText const): Removed CSSCustomIdentValue.h,
CustomIdentClass, CSSCustomIdentValue. We are not going to use a separate
class for custom-ident, just a separate type of primitive value.
(WebCore::CSSValue::destroy): Ditto.
* css/CSSValue.h: Deleted isCustomIdentValue and CustomIdentClass.

* css/CSSValueList.cpp:
(WebCore::CSSValueList::customCSSText const): Tweaked algorithm
to be slightly more efficient.

* css/CSSValuePool.h: Added createCustomIdent. Later should remove
the create function that takes a string value and a type and use
separate named functions for the few different cases, but doing the
new one this way for now.

* css/DeprecatedCSSOMPrimitiveValue.cpp:
(WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
Rewrote this to be a switch that preserves the current behavior
but no longer relies on the numeric values of CSSUnitType values.
Added a FIXME about using CSS_UNKNOWN more: some of the numbers
we are exposing to the web are doing no good.
(WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue): Moved this
function to the header.
(WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue const):
Rewrote this to be a switch as above. Preserves current behavior
but stops relying on CSSUnitType numeric values.
(WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue): Moved this
function to the header.
(WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue const):
Ditto. By putting a switch on primitiveType here, we can enforce
the desired exception behavior here, instead of getting it from
CSSPrimitiveValue, and it's better for this class to deal with
the legacy bindings issues.
(WebCore::DeprecatedCSSOMPrimitiveValue::getCounterValue const): Ditto.
(WebCore::DeprecatedCSSOMPrimitiveValue::getRectValue const): Ditto.
(WebCore::DeprecatedCSSOMPrimitiveValue::getRGBColorValue const): Ditto.

* css/DeprecatedCSSOMPrimitiveValue.h: Removed unneeded cssValueType
function. Made both setFloatValue and setStringValue simpler since
they always raise an exception and we do not intend to change that.
Also stop using protected since we have no classes derived from this.
Could do more cleanup, but this is a start.

* css/DeprecatedCSSOMValue.cpp:
(WebCore::DeprecatedCSSOMValue::cssValueType const): Put the constant
values, CSS_PRIMITIVE_VALUE and CSS_VALUE_LIST, here rather than
calling member functions.

* css/DeprecatedCSSOMValueList.cpp:
(WebCore::DeprecatedCSSOMValueList::cssText const): Tweaked to make
the code more efficient.

* css/DeprecatedCSSOMValueList.h: Removed unneeded cssValueType
function and const overload of item function. Also stop using protected
since we have no classes derived from this.

* css/MediaQueryExpression.cpp:
(WebCore::featureWithValidIdent): Fixed indentation to match WebKit style.
(WebCore::featureWithValidDensity): Ditto.
(WebCore::featureWithValidPositiveLength): Ditto.
(WebCore::featureExpectingPositiveInteger): Ditto.
(WebCore::featureWithPositiveNumber): Ditto.

* css/calc/CSSCalcCategoryMapping.cpp:
(WebCore::hasDoubleValue): Added a case for CustomIdent.

* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeWillChange): Removed comment saying we should use
CSSCustomIdentValue since using a property ID for the value is great.
(WebCore::consumeAnimationName): Removed comment saying we should use
CSSCustomIdentValue here because that would be incorrect: we need to
preserve and round-trip the fact that this was string, not custom-ident.
(WebCore::consumeTransitionProperty): Remove special case for
CSSValueAll that wasn't doing anything. Removed comment saying we should
use CSSCustomIdentValue since using a value ID for the value is great.
(WebCore::consumeAttr): Updated comment.
(WebCore::isCustomIdentValue): Updated to work with the new primitive value.

* css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
Use the new createCustomIdent and removed an outdated comment. While we
might some day want to implement custom-ident differently, we won't need
to change the code here to make that happen.

* platform/animation/Animation.cpp:
(WebCore::Animation::animationsMatch const): Update since m_name now is a
struct.
(WebCore::Animation::initialName): Update to return Name instead of String.
(WebCore::operator<<): Update since name() now returns a struct.
* platform/animation/Animation.h: Added the Name struct so we can store a
boolean to indicate whether it's a string or custom-ident for round tripping.
Update types and implementations of function and data members accordingly.

* style/StyleBuilderConverter.h:
(WebCore::Style::BuilderConverter::createGridPosition): Update code to expect
custom-ident instead of string; they used to both be the same thing.

* style/Styleable.cpp:
(WebCore::shouldConsiderAnimation): Update since Animation::name() now
returns a struct. Also got rid of unsuccessful attempt to optimize comparison
againt the string "none"; later might be good to clean out that special case.
(WebCore::Styleable::updateCSSAnimations const): Ditto.

Tools:

* TestRunnerShared/TestFeatures.cpp:
(WTR::parseTestHeader): Fixed a missing quote that made a log message read strangely.

LayoutTests:

* TestExpectations: Removed expected failures from 13 css-counter-styles tests that are not
currently failing. I had planned to work on making more of these pass, but first found I could
fix them with a corrected custom-ident implementation.

* css3/supports-expected.txt: Rebased.
* css3/supports.html: Updated to expect the value of the content property to be a quoted string,
rather than the old behavior, which was to leave the string unquoted if it happened to be a
string with all characters legal for a custom-ident. New expectation is the correct behavior.

* fast/css/alt-inherit-initial-expected.txt: Rebased.
* fast/css/alt-inherit-initial.html: Updated to expect the value of the language property to be
a custom-ident, and serialize unusual cases with custom-ident rules, not as a quoted string. New
expectation is the correct behavior.
* fast/css/content-language-comma-separated-list-expected.txt: Ditto.
* fast/css/content-language-empty-expected.txt: Ditto.
* fast/css/content-language-only-whitespace-expected.txt: Ditto.
* fast/css/content-language-with-whitespace-expected.txt: Ditto.

* fast/css/getComputedStyle/computed-style-properties-expected.txt: Rebased.
* fast/css/getComputedStyle/computed-style-properties.html: Expect content string (see above).

* fast/css/lang-mapped-to-webkit-locale-expected.txt: Rebased.
* fast/css/lang-mapped-to-webkit-locale.xhtml: Expect language custom-ident (see above).

* fast/css/nested-at-rules-expected.txt: Rebased.
* fast/css/nested-at-rules.html: Expect content string (see above).

* fast/css/parsing-text-emphasis-expected.txt: Rebased.
* fast/css/parsing-text-emphasis.html: Updated to expect strings to remaing quoted strings in
the text-emphasis property, not change into custom-ident if all characters happen to fit.

* fast/encoding/css-charset-default-expected.txt: Expect content string (see above).
* inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt: Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestscss3supportsexpectedtxt">trunk/LayoutTests/css3/supports-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3supportshtml">trunk/LayoutTests/css3/supports.html</a></li>
<li><a href="#trunkLayoutTestsfastcssaltinheritinitialexpectedtxt">trunk/LayoutTests/fast/css/alt-inherit-initial-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssaltinheritinitialhtml">trunk/LayoutTests/fast/css/alt-inherit-initial.html</a></li>
<li><a href="#trunkLayoutTestsfastcsscontentlanguagecommaseparatedlistexpectedtxt">trunk/LayoutTests/fast/css/content-language-comma-separated-list-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcsscontentlanguageemptyexpectedtxt">trunk/LayoutTests/fast/css/content-language-empty-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcsscontentlanguageonlywhitespaceexpectedtxt">trunk/LayoutTests/fast/css/content-language-only-whitespace-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcsscontentlanguagewithwhitespaceexpectedtxt">trunk/LayoutTests/fast/css/content-language-with-whitespace-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgetComputedStylecomputedstylepropertiesexpectedtxt">trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgetComputedStylecomputedstylepropertieshtml">trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties.html</a></li>
<li><a href="#trunkLayoutTestsfastcsslangmappedtowebkitlocaleexpectedtxt">trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcsslangmappedtowebkitlocalexhtml">trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale.xhtml</a></li>
<li><a href="#trunkLayoutTestsfastcssnestedatrulesexpectedtxt">trunk/LayoutTests/fast/css/nested-at-rules-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssnestedatruleshtml">trunk/LayoutTests/fast/css/nested-at-rules.html</a></li>
<li><a href="#trunkLayoutTestsfastcssparsingtextemphasisexpectedtxt">trunk/LayoutTests/fast/css/parsing-text-emphasis-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssparsingtextemphasishtml">trunk/LayoutTests/fast/css/parsing-text-emphasis.html</a></li>
<li><a href="#trunkLayoutTestsfastencodingcsscharsetdefaultexpectedtxt">trunk/LayoutTests/fast/encoding/css-charset-default-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssanimationsparsinganimationnamevalidexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylenegativesyntaxexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylepadsyntaxexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstyleprefixsuffixsyntaxexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylesymbolssyntaxexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareacomputedexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareashorthandexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareavalidexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsslistsparsingcontentinvalidexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscsstransitionstransitionproperty002expectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-property-002-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssomgetComputedStylepseudoexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestscsscssomserializevaluesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorcsspseudoelementmatchesforpseudoelementnodeexpectedtxt">trunk/LayoutTests/inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreanimationCSSAnimationcpp">trunk/Source/WebCore/animation/CSSAnimation.cpp</a></li>
<li><a href="#trunkSourceWebCoreanimationKeyframeEffectcpp">trunk/Source/WebCore/animation/KeyframeEffect.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSCustomIdentValuecpp">trunk/Source/WebCore/css/CSSCustomIdentValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSCustomIdentValueh">trunk/Source/WebCore/css/CSSCustomIdentValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSMarkupcpp">trunk/Source/WebCore/css/CSSMarkup.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSMarkuph">trunk/Source/WebCore/css/CSSMarkup.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValuecpp">trunk/Source/WebCore/css/CSSPrimitiveValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValueh">trunk/Source/WebCore/css/CSSPrimitiveValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSToStyleMapcpp">trunk/Source/WebCore/css/CSSToStyleMap.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSUnitscpp">trunk/Source/WebCore/css/CSSUnits.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSUnitsh">trunk/Source/WebCore/css/CSSUnits.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSValuecpp">trunk/Source/WebCore/css/CSSValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSValueh">trunk/Source/WebCore/css/CSSValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSValueListcpp">trunk/Source/WebCore/css/CSSValueList.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSValuePoolh">trunk/Source/WebCore/css/CSSValuePool.h</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedCSSOMPrimitiveValuecpp">trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedCSSOMPrimitiveValueh">trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.h</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedCSSOMValuecpp">trunk/Source/WebCore/css/DeprecatedCSSOMValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedCSSOMValueListcpp">trunk/Source/WebCore/css/DeprecatedCSSOMValueList.cpp</a></li>
<li><a href="#trunkSourceWebCorecssDeprecatedCSSOMValueListh">trunk/Source/WebCore/css/DeprecatedCSSOMValueList.h</a></li>
<li><a href="#trunkSourceWebCorecssMediaQueryExpressioncpp">trunk/Source/WebCore/css/MediaQueryExpression.cpp</a></li>
<li><a href="#trunkSourceWebCorecsscalcCSSCalcCategoryMappingcpp">trunk/Source/WebCore/css/calc/CSSCalcCategoryMapping.cpp</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSPropertyParsercpp">trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSPropertyParserHelperscpp">trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformanimationAnimationcpp">trunk/Source/WebCore/platform/animation/Animation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformanimationAnimationh">trunk/Source/WebCore/platform/animation/Animation.h</a></li>
<li><a href="#trunkSourceWebCorestyleStyleBuilderConverterh">trunk/Source/WebCore/style/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorestyleStyleablecpp">trunk/Source/WebCore/style/Styleable.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestRunnerSharedTestFeaturescpp">trunk/Tools/TestRunnerShared/TestFeatures.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/ChangeLog 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,3 +1,44 @@
</span><ins>+2021-06-06  Darin Adler  <darin@apple.com>
+
+        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
+        https://bugs.webkit.org/show_bug.cgi?id=226694
+
+        Reviewed by Sam Weinig.
+
+        * TestExpectations: Removed expected failures from 13 css-counter-styles tests that are not
+        currently failing. I had planned to work on making more of these pass, but first found I could
+        fix them with a corrected custom-ident implementation.
+
+        * css3/supports-expected.txt: Rebased.
+        * css3/supports.html: Updated to expect the value of the content property to be a quoted string,
+        rather than the old behavior, which was to leave the string unquoted if it happened to be a
+        string with all characters legal for a custom-ident. New expectation is the correct behavior.
+
+        * fast/css/alt-inherit-initial-expected.txt: Rebased.
+        * fast/css/alt-inherit-initial.html: Updated to expect the value of the language property to be
+        a custom-ident, and serialize unusual cases with custom-ident rules, not as a quoted string. New
+        expectation is the correct behavior.
+        * fast/css/content-language-comma-separated-list-expected.txt: Ditto.
+        * fast/css/content-language-empty-expected.txt: Ditto.
+        * fast/css/content-language-only-whitespace-expected.txt: Ditto.
+        * fast/css/content-language-with-whitespace-expected.txt: Ditto.
+
+        * fast/css/getComputedStyle/computed-style-properties-expected.txt: Rebased.
+        * fast/css/getComputedStyle/computed-style-properties.html: Expect content string (see above).
+
+        * fast/css/lang-mapped-to-webkit-locale-expected.txt: Rebased.
+        * fast/css/lang-mapped-to-webkit-locale.xhtml: Expect language custom-ident (see above).
+
+        * fast/css/nested-at-rules-expected.txt: Rebased.
+        * fast/css/nested-at-rules.html: Expect content string (see above).
+
+        * fast/css/parsing-text-emphasis-expected.txt: Rebased.
+        * fast/css/parsing-text-emphasis.html: Updated to expect strings to remaing quoted strings in
+        the text-emphasis property, not change into custom-ident if all characters happen to fit.
+
+        * fast/encoding/css-charset-default-expected.txt: Expect content string (see above).
+        * inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt: Ditto.
+
</ins><span class="cx"> 2021-06-06  Alan Bujtas  <zalan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [LFC][TFC] Adopt a less quirky fixed column width space distribution
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/TestExpectations  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -4740,10 +4740,7 @@
</span><span class="cx"> webkit.org/b/224357 imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-vertical-rl.html [ ImageOnlyFailure ]
</span><span class="cx"> 
</span><span class="cx"> # @counter-style ref tests that currently fail
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/armenian/css3-counter-styles-006.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/armenian/css3-counter-styles-007.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/armenian/css3-counter-styles-008.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/armenian/css3-counter-styles-009.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cjk-decimal/css3-counter-styles-001.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cjk-decimal/css3-counter-styles-004.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cjk-decimal/css3-counter-styles-005.html [ ImageOnlyFailure ]
</span><span class="lines">@@ -4772,10 +4769,6 @@
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cssom/cssom-system-setter-1.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cssom/cssom-system-setter-2.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/cssom/cssom-system-setter-invalid.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/georgian/css3-counter-styles-010.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/georgian/css3-counter-styles-011.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/georgian/css3-counter-styles-012.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/georgian/css3-counter-styles-014.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/hebrew/css3-counter-styles-016a.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/hiragana-iroha/css3-counter-styles-033.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/hiragana-iroha/css3-counter-styles-034.html [ ImageOnlyFailure ]
</span><span class="lines">@@ -4814,10 +4807,7 @@
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-059.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-060.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/korean-hanja-informal/css3-counter-styles-061.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/lower-armenian/css3-counter-styles-111.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/lower-armenian/css3-counter-styles-112.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/lower-armenian/css3-counter-styles-114.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/lower-armenian/css3-counter-styles-115.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/lower-roman/css3-counter-styles-019.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/lower-roman/css3-counter-styles-020.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/lower-roman/css3-counter-styles-020a.html [ ImageOnlyFailure ]
</span><span class="lines">@@ -4845,10 +4835,7 @@
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-083.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-084.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/trad-chinese-informal/css3-counter-styles-085.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/upper-armenian/css3-counter-styles-107.html [ ImageOnlyFailure ]
-imported/w3c/web-platform-tests/css/css-counter-styles/upper-armenian/css3-counter-styles-108.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/upper-armenian/css3-counter-styles-109.html [ ImageOnlyFailure ]
</span><del>-imported/w3c/web-platform-tests/css/css-counter-styles/upper-armenian/css3-counter-styles-110.html [ ImageOnlyFailure ]
</del><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/upper-roman/css3-counter-styles-023.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/upper-roman/css3-counter-styles-024.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/upper-roman/css3-counter-styles-024a.html [ ImageOnlyFailure ]
</span></span></pre></div>
<a id="trunkLayoutTestscss3supportsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/supports-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/supports-expected.txt     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/css3/supports-expected.txt        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -3,51 +3,51 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS getComputedStyle(document.getElementById('t0')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t1')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t2')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t3')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t4')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t5')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t6')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t7')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t8')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t9')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t10')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t11')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t12')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t13')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t14')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t15')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t16')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t17')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t18')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t19')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t20')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t21')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t22')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t23')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t24')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t25')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t26')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t27')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t28')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t29')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t30')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t31')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t32')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t33')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t34')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t35')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t36')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t37')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t38')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t39')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t40')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t41')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t42')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t43')).content is "UNTOUCHED"
-PASS getComputedStyle(document.getElementById('t44')).content is "UNTOUCHED"
</del><ins>+PASS getComputedStyle(document.getElementById('t0')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t1')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t2')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t3')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t4')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t5')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t6')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t7')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t8')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t9')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t10')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t11')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t12')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t13')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t14')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t15')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t16')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t17')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t18')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t19')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t20')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t21')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t22')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t23')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t24')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t25')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t26')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t27')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t28')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t29')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t30')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t31')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t32')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t33')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t34')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t35')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t36')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t37')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t38')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t39')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t40')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t41')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t42')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t43')).content is "\"UNTOUCHED\""
+PASS getComputedStyle(document.getElementById('t44')).content is "\"UNTOUCHED\""
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3supportshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/supports.html (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/supports.html     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/css3/supports.html        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx">         div.id = "t" + i;
</span><span class="cx">         div.className = "test";
</span><span class="cx">         container.appendChild(div);
</span><del>-        shouldBeEqualToString("getComputedStyle(document.getElementById('t"+i+"')).content", untouchedTests.indexOf(i) >= 0 ? "UNTOUCHED" : "APPLIED");
</del><ins>+        shouldBeEqualToString("getComputedStyle(document.getElementById('t"+i+"')).content", untouchedTests.indexOf(i) >= 0 ? '"UNTOUCHED"' : '"APPLIED"');
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     test_container.parentNode.removeChild(test_container);
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssaltinheritinitialexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/alt-inherit-initial-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/alt-inherit-initial-expected.txt      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/alt-inherit-initial-expected.txt 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -4,11 +4,11 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> PASS parentDiv.style['alt'] is ""
</span><del>-PASS window.getComputedStyle(parentDiv).getPropertyValue('alt') is "TestAlt"
</del><ins>+PASS window.getComputedStyle(parentDiv).getPropertyValue('alt') is "\"TestAlt\""
</ins><span class="cx"> PASS testDiv.style['alt'] is ""
</span><span class="cx"> testDiv.style['alt'] = 'inherit'
</span><span class="cx"> PASS testDiv.style['alt'] is "inherit"
</span><del>-PASS window.getComputedStyle(testDiv).getPropertyValue('alt') is "TestAlt"
</del><ins>+PASS window.getComputedStyle(testDiv).getPropertyValue('alt') is "\"TestAlt\""
</ins><span class="cx"> testDiv.style['alt'] = 'initial'
</span><span class="cx"> PASS testDiv.style['alt'] is "initial"
</span><span class="cx"> PASS window.getComputedStyle(testDiv).getPropertyValue('alt') is "\"\""
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssaltinheritinitialhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/alt-inherit-initial.html (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/alt-inherit-initial.html      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/alt-inherit-initial.html 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -19,13 +19,13 @@
</span><span class="cx"> var parentDiv = document.getElementById("parentDiv");
</span><span class="cx"> var testDiv = document.getElementById("testDiv");
</span><span class="cx"> shouldBeEmptyString("parentDiv.style['alt']", "");
</span><del>-shouldBeEqualToString("window.getComputedStyle(parentDiv).getPropertyValue('alt')", "TestAlt");
</del><ins>+shouldBeEqualToString("window.getComputedStyle(parentDiv).getPropertyValue('alt')", '"TestAlt"');
</ins><span class="cx"> shouldBeEmptyString("testDiv.style['alt']");
</span><span class="cx"> 
</span><span class="cx"> // Inherit.
</span><span class="cx"> evalAndLog("testDiv.style['alt'] = 'inherit'");
</span><span class="cx"> shouldBeEqualToString("testDiv.style['alt']", "inherit");
</span><del>-shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('alt')", "TestAlt");
</del><ins>+shouldBeEqualToString("window.getComputedStyle(testDiv).getPropertyValue('alt')", '"TestAlt"');
</ins><span class="cx"> 
</span><span class="cx"> // Initial.
</span><span class="cx"> evalAndLog("testDiv.style['alt'] = 'initial'");
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsscontentlanguagecommaseparatedlistexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/content-language-comma-separated-list-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/content-language-comma-separated-list-expected.txt    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/content-language-comma-separated-list-expected.txt       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Test for bug 76701: map HTTP-EQUIV content-language to -webkit-locale. This particular test tests that a comma-separated list of languages is ignored. This expectation may change, see bug. The HTML5 spec says that content-language should not have multiple languages, and decrees that a content-language containing a comma be ignored; this position has been upheld following significant debate. Firefox accepts a comma-separated list and a CSS :lang selector for any language in the list is matched. It's unclear what IE does.
</span><span class="cx"> 
</span><del>-FAIL languageOfNode('x') should be auto. Was "ja, zh_CN".
</del><ins>+FAIL languageOfNode('x') should be auto. Was ja\,\ zh_CN.
</ins><span class="cx"> PASS languageOfNode('y') is "ar"
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsscontentlanguageemptyexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/content-language-empty-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/content-language-empty-expected.txt   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/content-language-empty-expected.txt      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Test for bug 76701: map HTTP-EQUIV content-language to -webkit-locale. This particular test tests that a content-language of empty string is ignored. This expectation may change, see bug. HTML5 decrees that the meta element be ignored in case of the empty string. It's unclear what other browsers do.
</span><span class="cx"> 
</span><del>-FAIL languageOfNode('x') should be auto. Was "".
</del><ins>+FAIL languageOfNode('x') should be auto. Was .
</ins><span class="cx"> PASS languageOfNode('y') is "ar"
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsscontentlanguageonlywhitespaceexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/content-language-only-whitespace-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/content-language-only-whitespace-expected.txt 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/content-language-only-whitespace-expected.txt    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Test for bug 76701: map HTTP-EQUIV content-language to -webkit-locale. This particular test tests that a content-language with whitespace-only content is ignored. This expectation may change, see bug. HTML5 decrees that the meta element be ignored in case of whitespace only content. It's unclear what other browsers do.
</span><span class="cx"> 
</span><del>-FAIL languageOfNode('x') should be auto. Was "  \9 \a  ".
</del><ins>+FAIL languageOfNode('x') should be auto. Was \ \ \9 \a \ .
</ins><span class="cx"> PASS languageOfNode('y') is "ar"
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsscontentlanguagewithwhitespaceexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/content-language-with-whitespace-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/content-language-with-whitespace-expected.txt 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/content-language-with-whitespace-expected.txt    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Test for bug 76701: map HTTP-EQUIV content-language to -webkit-locale. This particular test tests that the the pragma-set default language is set to the first sequence of non-whitespace characters of the content-language content. This expectation may change, see bug. This expectation is as per the HTML 5 spec. It appears that Firefox does not exactly do this, but trims the leading and trailing whitespace. It's unclear what IE does.
</span><span class="cx"> 
</span><del>-FAIL languageOfNode('x') should be ja_JP. Was "  \a \9 \9 ja-JP   \9  zh_CN \9 \a \a \9 \9 ".
</del><ins>+FAIL languageOfNode('x') should be ja_JP. Was \ \ \a \9 \9 ja-JP\ \ \ \9 \ zh_CN\ \9 \a \a \9 \9 .
</ins><span class="cx"> PASS languageOfNode('y') is "ar"
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgetComputedStylecomputedstylepropertiesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties-expected.txt       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties-expected.txt  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx"> Heading B
</span><span class="cx"> 
</span><span class="cx"> PASS computedStyleFor('outline', null, 'outline-offset') is '5px'
</span><del>-PASS computedStyleFor('content', 'before', 'content') is "text"
</del><ins>+PASS computedStyleFor('content', 'before', 'content') is "\"text\""
</ins><span class="cx"> PASS computedStyleFor('content', 'after', 'content') is "\"test \" url(\"data:image/gif;base64,R0lGODlhAQABAJAAAP8AAAAAACwAAAAAAQABAAACAgQBADs=\")"
</span><span class="cx"> PASS computedStyleFor('counter', null, 'counter-reset') is "section 0"
</span><span class="cx"> PASS str.indexOf('subsection 0') != -1 is true
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgetComputedStylecomputedstylepropertieshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties.html (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties.html       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-properties.html  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> 
</span><span class="cx"> shouldBe("computedStyleFor('outline', null, 'outline-offset')", "'5px'");
</span><span class="cx"> 
</span><del>-shouldBeEqualToString("computedStyleFor('content', 'before', 'content')", "text");
</del><ins>+shouldBeEqualToString("computedStyleFor('content', 'before', 'content')", '"text"');
</ins><span class="cx"> shouldBeEqualToString("computedStyleFor('content', 'after', 'content')", `"test " url(\"data:image/gif;base64,R0lGODlhAQABAJAAAP8AAAAAACwAAAAAAQABAAACAgQBADs=\")`);
</span><span class="cx"> shouldBeEqualToString("computedStyleFor('counter', null, 'counter-reset')", "section 0");
</span><span class="cx"> var str = computedStyleFor('subcounter', null, 'counter-reset');
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsslangmappedtowebkitlocaleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale-expected.txt     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale-expected.txt        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -19,10 +19,10 @@
</span><span class="cx"> PASS languageOfNode('q3') is "auto"
</span><span class="cx"> PASS languageOfNode('q4') is "ar"
</span><span class="cx"> PASS languageOfNode('q5') is "auto"
</span><del>-PASS languageOfNode('q6') is "\"  \""
</del><ins>+PASS languageOfNode('q6') is "\\ \\ "
</ins><span class="cx"> PASS languageOfNode('q7') is "auto"
</span><span class="cx"> PASS languageOfNode('q8') is "xyzzy"
</span><del>-PASS languageOfNode('q9') is "\"][;][[\""
</del><ins>+PASS languageOfNode('q9') is "\\]\\[\\;\\]\\[\\["
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsslangmappedtowebkitlocalexhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale.xhtml (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale.xhtml    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/lang-mapped-to-webkit-locale.xhtml       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -46,10 +46,10 @@
</span><span class="cx"> shouldBeEqualToString("languageOfNode('q3')", "auto");
</span><span class="cx"> shouldBeEqualToString("languageOfNode('q4')", "ar");
</span><span class="cx"> shouldBeEqualToString("languageOfNode('q5')", "auto");
</span><del>-shouldBeEqualToString("languageOfNode('q6')", `"  "`);
</del><ins>+shouldBeEqualToString("languageOfNode('q6')", "\\ \\ ");
</ins><span class="cx"> shouldBeEqualToString("languageOfNode('q7')", "auto");
</span><span class="cx"> shouldBeEqualToString("languageOfNode('q8')", "xyzzy");
</span><del>-shouldBeEqualToString("languageOfNode('q9')", `"][;][["`);
</del><ins>+shouldBeEqualToString("languageOfNode('q9')", "\\]\\[\\;\\]\\[\\[");
</ins><span class="cx"> 
</span><span class="cx"> var successfullyParsed = true;
</span><span class="cx"> </script>
</span><span class="lines">@@ -56,4 +56,3 @@
</span><span class="cx"> <script src="../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span><del>-
</del></span></pre></div>
<a id="trunkLayoutTestsfastcssnestedatrulesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/nested-at-rules-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nested-at-rules-expected.txt  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/nested-at-rules-expected.txt     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -23,8 +23,8 @@
</span><span class="cx"> PASS rules[1].cssRules[1].cssRules.length is 2
</span><span class="cx"> PASS rules[1].cssRules[1].cssRules[1].type is CSSRule.MEDIA_RULE
</span><span class="cx"> PASS rules[1].cssRules[1].cssRules[1].cssRules[0].type is CSSRule.PAGE_RULE
</span><del>-PASS getComputedStyle(document.getElementById('t0')).content is "APPLIED"
-PASS getComputedStyle(document.getElementById('t1')).content is "UNTOUCHED"
</del><ins>+PASS getComputedStyle(document.getElementById('t0')).content is "\"APPLIED\""
+PASS getComputedStyle(document.getElementById('t1')).content is "\"UNTOUCHED\""
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssnestedatruleshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/nested-at-rules.html (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/nested-at-rules.html  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/nested-at-rules.html     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> shouldBe("rules[1].cssRules[1].cssRules[1].type", "CSSRule.MEDIA_RULE");
</span><span class="cx"> shouldBe("rules[1].cssRules[1].cssRules[1].cssRules[0].type", "CSSRule.PAGE_RULE");
</span><span class="cx"> 
</span><del>-shouldBeEqualToString("getComputedStyle(document.getElementById('t0')).content", "APPLIED");
-shouldBeEqualToString("getComputedStyle(document.getElementById('t1')).content", "UNTOUCHED");
</del><ins>+shouldBeEqualToString("getComputedStyle(document.getElementById('t0')).content", '"APPLIED"');
+shouldBeEqualToString("getComputedStyle(document.getElementById('t1')).content", '"UNTOUCHED"');
</ins><span class="cx"> </script>
</span><span class="cx"> <script src="../../resources/js-test-post.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssparsingtextemphasisexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/parsing-text-emphasis-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/parsing-text-emphasis-expected.txt    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/parsing-text-emphasis-expected.txt       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> PASS: '-webkit-text-emphasis-style: double-circle;' parsed as ['', '', 'double-circle', '']
</span><span class="cx"> PASS: '-webkit-text-emphasis-style: triangle;' parsed as ['', '', 'triangle', '']
</span><span class="cx"> PASS: '-webkit-text-emphasis-style: sesame;' parsed as ['', '', 'sesame', '']
</span><del>-PASS: '-webkit-text-emphasis-style: "cheese";' parsed as ['', '', 'cheese', '']
</del><ins>+PASS: '-webkit-text-emphasis-style: "cheese";' parsed as ['', '', '"cheese"', '']
</ins><span class="cx"> PASS: '-webkit-text-emphasis-style: 1px;' parsed as ['', '', '', '']
</span><span class="cx"> PASS: '-webkit-text-emphasis-style: red;' parsed as ['', '', '', '']
</span><span class="cx"> PASS: '-webkit-text-emphasis-style: open dot;' parsed as ['', '', 'open dot', '']
</span><span class="lines">@@ -49,9 +49,9 @@
</span><span class="cx"> PASS: '-webkit-text-emphasis: initial' parsed as ['initial', '', 'initial', 'initial']
</span><span class="cx"> PASS: '-webkit-text-emphasis: inherit' parsed as ['inherit', '', 'inherit', 'inherit']
</span><span class="cx"> PASS: '-webkit-text-emphasis: red' parsed as ['red', '', 'initial', 'red']
</span><del>-PASS: '-webkit-text-emphasis: "cheese"' parsed as ['initial', '', 'cheese', 'cheese']
-PASS: '-webkit-text-emphasis: red "cheese"' parsed as ['red', '', 'cheese', 'cheese red']
-PASS: '-webkit-text-emphasis: "cheese" red' parsed as ['red', '', 'cheese', 'cheese red']
</del><ins>+PASS: '-webkit-text-emphasis: "cheese"' parsed as ['initial', '', '"cheese"', '"cheese"']
+PASS: '-webkit-text-emphasis: red "cheese"' parsed as ['red', '', '"cheese"', '"cheese" red']
+PASS: '-webkit-text-emphasis: "cheese" red' parsed as ['red', '', '"cheese"', '"cheese" red']
</ins><span class="cx"> PASS: '-webkit-text-emphasis: filled sesame red' parsed as ['red', '', 'filled sesame', 'filled sesame red']
</span><span class="cx"> PASS: '-webkit-text-emphasis: red filled sesame' parsed as ['red', '', 'filled sesame', 'filled sesame red']
</span><span class="cx"> PASS: '-webkit-text-emphasis: filled red sesame' parsed as ['', '', '', '']
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssparsingtextemphasishtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/parsing-text-emphasis.html (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/parsing-text-emphasis.html    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/css/parsing-text-emphasis.html       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx">     test('-webkit-text-emphasis-style: double-circle;', '', '', 'double-circle');
</span><span class="cx">     test('-webkit-text-emphasis-style: triangle;', '', '', 'triangle');
</span><span class="cx">     test('-webkit-text-emphasis-style: sesame;', '', '', 'sesame');
</span><del>-    test('-webkit-text-emphasis-style: "cheese";', '', '', 'cheese');
</del><ins>+    test('-webkit-text-emphasis-style: "cheese";', '', '', '"cheese"');
</ins><span class="cx">     test('-webkit-text-emphasis-style: 1px;', '', '', '');
</span><span class="cx">     test('-webkit-text-emphasis-style: red;', '', '', '');
</span><span class="cx"> 
</span><span class="lines">@@ -80,9 +80,9 @@
</span><span class="cx">     test('-webkit-text-emphasis: initial', 'initial', '', 'initial', 'initial');
</span><span class="cx">     test('-webkit-text-emphasis: inherit', 'inherit', '', 'inherit', 'inherit');
</span><span class="cx">     test('-webkit-text-emphasis: red', 'red', '', 'initial', 'red');
</span><del>-    test('-webkit-text-emphasis: "cheese"', 'initial', '', 'cheese', 'cheese');
-    test('-webkit-text-emphasis: red "cheese"', 'red', '', 'cheese', 'cheese red');
-    test('-webkit-text-emphasis: "cheese" red', 'red', '', 'cheese', 'cheese red');
</del><ins>+    test('-webkit-text-emphasis: "cheese"', 'initial', '', '"cheese"', '"cheese"');
+    test('-webkit-text-emphasis: red "cheese"', 'red', '', '"cheese"', '"cheese" red');
+    test('-webkit-text-emphasis: "cheese" red', 'red', '', '"cheese"', '"cheese" red');
</ins><span class="cx">     test('-webkit-text-emphasis: filled sesame red', 'red', '', 'filled sesame', 'filled sesame red');
</span><span class="cx">     test('-webkit-text-emphasis: red filled sesame', 'red', '', 'filled sesame', 'filled sesame red');
</span><span class="cx">     test('-webkit-text-emphasis: filled red sesame', '', '', '');
</span></span></pre></div>
<a id="trunkLayoutTestsfastencodingcsscharsetdefaultexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/encoding/css-charset-default-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/encoding/css-charset-default-expected.txt 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/fast/encoding/css-charset-default-expected.txt    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,9 +1,9 @@
</span><span class="cx"> Test for bug 11011: External CSS is parsed as iso-8859-1 even though the main document is utf-8.
</span><span class="cx"> 
</span><del>-Stylesheet 1 (inherit document charset using xml-stylesheet processing instruction): SUССЕSS
</del><ins>+Stylesheet 1 (inherit document charset using xml-stylesheet processing instruction): "SUССЕSS"
</ins><span class="cx"> 
</span><del>-Stylesheet 2 (inherit document charset using link): SUССЕSS
</del><ins>+Stylesheet 2 (inherit document charset using link): "SUССЕSS"
</ins><span class="cx"> 
</span><del>-Stylesheet 3 (inherit referring stylesheet charset): SUССЕSS
</del><ins>+Stylesheet 3 (inherit referring stylesheet charset): "SUССЕSS"
</ins><span class="cx"> 
</span><del>-Stylesheet 4 (inherit referring inline stylesheet charset): SUССЕSS
</del><ins>+Stylesheet 4 (inherit referring inline stylesheet charset): "SUССЕSS"
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/ChangeLog    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2021-06-06  Darin Adler  <darin@apple.com>
+
+        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
+        https://bugs.webkit.org/show_bug.cgi?id=226694
+
+        Reviewed by Sam Weinig.
+
+        * web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt:
+        * web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt:
+        * web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt:
+        * web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt:
+        * web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt:
+        * web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt:
+        * web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt:
+        * web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt:
+        * web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt:
+        * web-platform-tests/css/css-transitions/transition-property-002-expected.txt:
+        * web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt:
+        * web-platform-tests/css/cssom/serialize-values-expected.txt:
+        Rebased to reflect progressions. In some cases the entire test passes, in other cases we still
+        have failures, but the string serialization part of the test has progressed.
+
</ins><span class="cx"> 2021-06-04  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Worker.constructor throws an exception when the url param is an empty string
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssanimationsparsinganimationnamevalidexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-animations/parsing/animation-name-valid-expected.txt      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -6,8 +6,8 @@
</span><span class="cx"> PASS e.style['animation-name'] = "infinite" should set the property value
</span><span class="cx"> PASS e.style['animation-name'] = "paused" should set the property value
</span><span class="cx"> PASS e.style['animation-name'] = "first, second, third" should set the property value
</span><del>-FAIL e.style['animation-name'] = "\"string\"" should set the property value assert_equals: serialization should be canonical expected "\"string\"" but got "string"
</del><ins>+PASS e.style['animation-name'] = "\"string\"" should set the property value
</ins><span class="cx"> PASS e.style['animation-name'] = "\"multi word string\"" should set the property value
</span><del>-FAIL e.style['animation-name'] = "\"initial\"" should set the property value assert_equals: serialization should be canonical expected "\"initial\"" but got "initial"
</del><ins>+PASS e.style['animation-name'] = "\"initial\"" should set the property value
</ins><span class="cx"> PASS e.style['animation-name'] = "\"---\\22---\"" should set the property value
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylenegativesyntaxexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> 
</span><del>-FAIL @counter-style 'negative: "X"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'negative: "X" "X"' is valid assert_not_equals: got disallowed value -1
</del><ins>+PASS @counter-style 'negative: "X"' is valid
+PASS @counter-style 'negative: "X" "X"' is valid
</ins><span class="cx"> PASS @counter-style 'negative: "X" "X" "X"' is invalid
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylepadsyntaxexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,9 +1,9 @@
</span><span class="cx"> 
</span><span class="cx"> PASS @counter-style 'pad: 10' is invalid
</span><span class="cx"> PASS @counter-style 'pad: "X"' is invalid
</span><del>-FAIL @counter-style 'pad: 0 "X"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'pad: 10 "X"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'pad: "X" 10' is valid assert_not_equals: got disallowed value -1
</del><ins>+PASS @counter-style 'pad: 0 "X"' is valid
+PASS @counter-style 'pad: 10 "X"' is valid
+PASS @counter-style 'pad: "X" 10' is valid
</ins><span class="cx"> PASS @counter-style 'pad: -1 "X"' is invalid
</span><span class="cx"> PASS @counter-style 'pad: "X" -1' is invalid
</span><span class="cx"> PASS @counter-style 'pad: 10 "X" "Y"' is invalid
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstyleprefixsuffixsyntaxexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,12 +1,12 @@
</span><span class="cx"> 
</span><del>-FAIL @counter-style 'prefix: "string"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'suffix: "string"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'prefix: "initial"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'suffix: "initial"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'prefix: "inherit"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'suffix: "inherit"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'prefix: "unset"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'suffix: "unset"' is valid assert_not_equals: got disallowed value -1
</del><ins>+PASS @counter-style 'prefix: "string"' is valid
+PASS @counter-style 'suffix: "string"' is valid
+PASS @counter-style 'prefix: "initial"' is valid
+PASS @counter-style 'suffix: "initial"' is valid
+PASS @counter-style 'prefix: "inherit"' is valid
+PASS @counter-style 'suffix: "inherit"' is valid
+PASS @counter-style 'prefix: "unset"' is valid
+PASS @counter-style 'suffix: "unset"' is valid
</ins><span class="cx"> PASS @counter-style 'prefix: custom-ident' is valid
</span><span class="cx"> PASS @counter-style 'suffix: custom-ident' is valid
</span><span class="cx"> PASS @counter-style 'prefix: initial' is invalid
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsscounterstylescounterstylesymbolssyntaxexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> 
</span><del>-FAIL @counter-style 'symbols: "X"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'symbols: "X" "X"' is valid assert_not_equals: got disallowed value -1
-FAIL @counter-style 'symbols: ident "X"' is valid assert_not_equals: got disallowed value -1
</del><ins>+PASS @counter-style 'symbols: "X"' is valid
+PASS @counter-style 'symbols: "X" "X"' is valid
+PASS @counter-style 'symbols: ident "X"' is valid
</ins><span class="cx"> FAIL @counter-style 'symbols: ident "X" url("foo.jpg")' is valid assert_not_equals: got disallowed value -1
</span><span class="cx"> PASS @counter-style 'symbols: ' is invalid
</span><span class="cx"> PASS @counter-style 'symbols: initial "X" "X"' is invalid
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareacomputedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-computed-expected.txt      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -26,6 +26,6 @@
</span><span class="cx"> PASS Property grid-area value 'auto / i / 2 j / span 3 k'
</span><span class="cx"> PASS Property grid-row value 'auto / i'
</span><span class="cx"> PASS Property grid-column value '2 j / span 3 k'
</span><del>-FAIL Property grid-column-end value '\31st' assert_equals: expected "\\31 st" but got "\"1st\""
-FAIL Property grid-column-end value '\31 st' assert_equals: expected "\\31 st" but got "\"1st\""
</del><ins>+PASS Property grid-column-end value '\31st'
+PASS Property grid-column-end value '\31 st'
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareashorthandexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-shorthand-expected.txt     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -4,10 +4,10 @@
</span><span class="cx"> PASS e.style['grid-area'] = "auto" should set grid-row-end
</span><span class="cx"> PASS e.style['grid-area'] = "auto" should set grid-row-start
</span><span class="cx"> PASS e.style['grid-area'] = "auto" should not set unrelated longhands
</span><del>-FAIL e.style['grid-area'] = "--a" should set grid-column-end assert_equals: grid-column-end should be canonical expected "--a" but got "\"--a\""
-FAIL e.style['grid-area'] = "--a" should set grid-column-start assert_equals: grid-column-start should be canonical expected "--a" but got "\"--a\""
-FAIL e.style['grid-area'] = "--a" should set grid-row-end assert_equals: grid-row-end should be canonical expected "--a" but got "\"--a\""
-FAIL e.style['grid-area'] = "--a" should set grid-row-start assert_equals: grid-row-start should be canonical expected "--a" but got "\"--a\""
</del><ins>+PASS e.style['grid-area'] = "--a" should set grid-column-end
+PASS e.style['grid-area'] = "--a" should set grid-column-start
+PASS e.style['grid-area'] = "--a" should set grid-row-end
+PASS e.style['grid-area'] = "--a" should set grid-row-start
</ins><span class="cx"> PASS e.style['grid-area'] = "--a" should not set unrelated longhands
</span><span class="cx"> PASS e.style['grid-area'] = "a / b" should set grid-column-end
</span><span class="cx"> PASS e.style['grid-area'] = "a / b" should set grid-column-start
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssgridparsinggridareavalidexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/parsing/grid-area-valid-expected.txt 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -7,7 +7,7 @@
</span><span class="cx"> FAIL e.style['grid-row'] = "auto" should set the property value assert_equals: serialization should be canonical expected "auto" but got "auto / auto"
</span><span class="cx"> FAIL e.style['grid-row'] = "auto/auto" should set the property value assert_equals: serialization should be canonical expected "auto" but got "auto / auto"
</span><span class="cx"> PASS e.style['grid-column-end'] = "AuTo" should set the property value
</span><del>-FAIL e.style['grid-area'] = "--a" should set the property value assert_equals: serialization should be canonical expected "--a" but got "\"--a\" / \"--a\" / \"--a\" / \"--a\""
</del><ins>+FAIL e.style['grid-area'] = "--a" should set the property value assert_equals: serialization should be canonical expected "--a" but got "--a / --a / --a / --a"
</ins><span class="cx"> FAIL e.style['grid-row'] = "-zπ" should set the property value assert_equals: serialization should be canonical expected "-zπ" but got "-zπ / -zπ"
</span><span class="cx"> FAIL e.style['grid-row'] = "-zπ/-zπ" should set the property value assert_equals: serialization should be canonical expected "-zπ" but got "-zπ / -zπ"
</span><span class="cx"> FAIL e.style['grid-row'] = "i / i" should set the property value assert_equals: serialization should be canonical expected "i" but got "i / i"
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> FAIL e.style['grid-row'] = "2 i / auto" should set the property value assert_equals: serialization should be canonical expected "2 i" but got "2 i / auto"
</span><span class="cx"> FAIL e.style['grid-row'] = "1 / auto" should set the property value assert_equals: serialization should be canonical expected "1" but got "1 / auto"
</span><span class="cx"> PASS e.style['grid-column'] = "2 j / span 3 k" should set the property value
</span><del>-FAIL e.style['grid-column-end'] = "\\31st" should set the property value assert_in_array: serialization should be sound value "\"1st\"" not in array ["\\31 st", "\\31st"]
-FAIL e.style['grid-column-end'] = "\\31 st" should set the property value assert_in_array: serialization should be sound value "\"1st\"" not in array ["\\31 st", "\\31st"]
-FAIL e.style['grid-column'] = "\\31st / \\31 st" should set the property value assert_in_array: serialization should be sound value "\"1st\" / \"1st\"" not in array ["\\31 st", "\\31st"]
</del><ins>+PASS e.style['grid-column-end'] = "\\31st" should set the property value
+PASS e.style['grid-column-end'] = "\\31 st" should set the property value
+FAIL e.style['grid-column'] = "\\31st / \\31 st" should set the property value assert_in_array: serialization should be sound value "\\31 st / \\31 st" not in array ["\\31 st", "\\31st"]
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsslistsparsingcontentinvalidexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-lists/parsing/content-invalid-expected.txt        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -7,8 +7,8 @@
</span><span class="cx"> PASS e.style['content'] = "counters(foo, \"\", initial)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "counter(foo, inherit)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "counters(foo, \"\", inherit)" should not set the property value
</span><del>-FAIL e.style['content'] = "\"z\" counter(foo, none)" should not set the property value assert_equals: expected "" but got "z counter(foo, none)"
-FAIL e.style['content'] = "\"z\" counters(foo, \"\", none)" should not set the property value assert_equals: expected "" but got "z counter(foo, none)"
</del><ins>+FAIL e.style['content'] = "\"z\" counter(foo, none)" should not set the property value assert_equals: expected "" but got "\"z\" counter(foo, none)"
+FAIL e.style['content'] = "\"z\" counters(foo, \"\", none)" should not set the property value assert_equals: expected "" but got "\"z\" counter(foo, none)"
</ins><span class="cx"> PASS e.style['content'] = "\"z\" counter(foo, unset)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "\"z\" counters(foo, \"\", unset)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "\"z\" counter(foo, initial)" should not set the property value
</span><span class="lines">@@ -15,8 +15,8 @@
</span><span class="cx"> PASS e.style['content'] = "\"z\" counters(foo, \"\", initial)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "\"z\" counter(foo, inherit)" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "\"z\" counters(foo, \"\", inherit)" should not set the property value
</span><del>-FAIL e.style['content'] = "counter(foo, none) \"z\"" should not set the property value assert_equals: expected "" but got "counter(foo, none) z"
-FAIL e.style['content'] = "counters(foo, \"\", none) \"z\"" should not set the property value assert_equals: expected "" but got "counter(foo, none) z"
</del><ins>+FAIL e.style['content'] = "counter(foo, none) \"z\"" should not set the property value assert_equals: expected "" but got "counter(foo, none) \"z\""
+FAIL e.style['content'] = "counters(foo, \"\", none) \"z\"" should not set the property value assert_equals: expected "" but got "counter(foo, none) \"z\""
</ins><span class="cx"> PASS e.style['content'] = "counter(foo, unset) \"z\"" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "counters(foo, \"\", unset) \"z\"" should not set the property value
</span><span class="cx"> PASS e.style['content'] = "counter(foo, initial) \"z\"" should not set the property value
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscsstransitionstransitionproperty002expectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-property-002-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-property-002-expected.txt       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-property-002-expected.txt  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -2,8 +2,8 @@
</span><span class="cx"> FAIL parse 'none, all' assert_equals: expected "none, all" but got "all"
</span><span class="cx"> FAIL parse 'all, none' assert_equals: expected "all, none" but got "all"
</span><span class="cx"> PASS parse 'foobar'
</span><del>-FAIL parse 'all, foobar' assert_equals: expected "all, foobar" but got "foobar"
-FAIL parse 'foobar, all' assert_equals: expected "foobar, all" but got "all"
</del><ins>+PASS parse 'all, foobar'
+PASS parse 'foobar, all'
</ins><span class="cx"> PASS parse 'inherit'
</span><span class="cx"> PASS parse 'initial'
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssomgetComputedStylepseudoexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo-expected.txt    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -2,7 +2,7 @@
</span><span class="cx"> PASS Resolution of width is correct for ::before and ::after pseudo-elements
</span><span class="cx"> PASS Resolution of width is correct for ::before and ::after pseudo-elements of display: contents elements
</span><span class="cx"> PASS Resolution of nonexistent pseudo-element styles
</span><del>-FAIL Resolution of pseudo-element styles in display: none elements assert_equals: Pseudo-styles of display: none elements should be correct expected "\"Foo\"" but got "Foo"
</del><ins>+PASS Resolution of pseudo-element styles in display: none elements
</ins><span class="cx"> PASS Item-based blockification of pseudo-elements
</span><span class="cx"> FAIL Item-based blockification of nonexistent pseudo-elements assert_equals: Pseudo-styles of display: flex elements should get blockified expected "block" but got "inline"
</span><span class="cx"> PASS display: contents on pseudo-elements
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestscsscssomserializevaluesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt        2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt   2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -315,8 +315,8 @@
</span><span class="cx"> PASS color: inherit
</span><span class="cx"> PASS content: normal
</span><span class="cx"> PASS content: none
</span><del>-FAIL content: "string" assert_equals: content raw inline style declaration expected "\"string\"" but got "string"
-FAIL content: 'string' assert_equals: content raw inline style declaration expected "\"string\"" but got "string"
</del><ins>+PASS content: "string"
+PASS content: 'string'
</ins><span class="cx"> PASS content: url("http://localhost/")
</span><span class="cx"> PASS content: url(http://localhost/)
</span><span class="cx"> FAIL content: counter(par-num) assert_equals: content raw inline style declaration expected "counter(par-num)" but got "counter(par-num, decimal)"
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorcsspseudoelementmatchesforpseudoelementnodeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/inspector/css/pseudo-element-matches-for-pseudo-element-node-expected.txt 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> PASS: No Inherited Styles
</span><span class="cx"> PASS: No Pseudo Element Styles
</span><span class="cx"> PASS: Has Computed Styles
</span><del>-PROPERTY: content: before;
</del><ins>+PROPERTY: content: "before";
</ins><span class="cx"> PROPERTY: color: rgb(0, 0, 255);
</span><span class="cx"> MATCHED RULE:
</span><span class="cx">   SELECTOR: input:before
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/LayoutTests/platform/mac/TestExpectations     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -2126,6 +2126,7 @@
</span><span class="cx"> webkit.org/b/221100 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html [ Pass Failure ]
</span><span class="cx"> 
</span><span class="cx"> # @counter-style WPT failures specific to Mac platforms
</span><ins>+[ Mojave Catalina ] imported/w3c/web-platform-tests/css/css-counter-styles/lower-armenian/css3-counter-styles-112.html [ ImageOnlyFailure ]
</ins><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/bengali/css3-counter-styles-117.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/gujarati/css3-counter-styles-123.html [ ImageOnlyFailure ]
</span><span class="cx"> imported/w3c/web-platform-tests/css/css-counter-styles/gurmukhi/css3-counter-styles-126.html [ ImageOnlyFailure ]
</span><span class="lines">@@ -2278,4 +2279,4 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/226520 media/video-played-collapse.html [ Pass Timeout Failure ]
</span><span class="cx"> 
</span><del>-webkit.org/b/226598 animations/leak-document-with-css-animation.html [ Pass Failure ]
</del><span class="cx">\ No newline at end of file
</span><ins>+webkit.org/b/226598 animations/leak-document-with-css-animation.html [ Pass Failure ]
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/ChangeLog      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,3 +1,194 @@
</span><ins>+2021-06-06  Darin Adler  <darin@apple.com>
+
+        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
+        https://bugs.webkit.org/show_bug.cgi?id=226694
+
+        Reviewed by Sam Weinig.
+
+        Progressions in a number of WPT tests.
+
+        * animation/CSSAnimation.cpp:
+        (WebCore::CSSAnimation::CSSAnimation): Update since Animation::name() now
+        returns a struct.
+        * animation/KeyframeEffect.cpp:
+        (WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes): Ditto.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::OrderedNamedLinesCollector::appendLines const): Use
+        createCustomIdent for line names.
+        (WebCore::valueForGridPosition): Use createCustomIdent for grid line name.
+        (WebCore::createTransitionPropertyValue): Use createCustomIdent for
+        animation property names.
+        (WebCore::counterToCSSValue): Use createCustomIdent for counter names.
+        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle): Use
+        createCustomIdent for list-style-type, locale, animation names if they
+        were created from a custom-ident, and line-grid.
+
+        * css/CSSCustomIdentValue.cpp: Emptied out this file; we can delete it soon.
+        * css/CSSCustomIdentValue.h: Ditto.
+
+        * css/CSSMarkup.cpp:
+        (WebCore::serializeCharacterAsCodePoint): Optimized to do a single
+        StringBuilder::append call.
+        (WebCore::serializeAsStringOrCustomIdent): Deleted.
+        * css/CSSMarkup.h: Removed serializeAsStringOrCustomIdent.
+
+        * css/CSSPrimitiveValue.cpp:
+        (WebCore::isValidCSSUnitTypeForDoubleConversion): Added a case for
+        CustomIdent. Changed CSS_IDENT to assert not reached, since it should
+        never be passed to this function. More cleanup of CSSUnitType is needed,
+        but for now mostly leaving it alone.
+        (WebCore::isStringType): Added a case for CustomIdent. Moved CSS_DIMENSION,
+        which was incorrectly returning true, to return false. Pretty sure there's
+        no way to create one of these with CSS_DIMENSION, but this is less peculiar.
+        (WebCore::CSSPrimitiveValue::primitiveType const): Added transformation
+        from CustomIdent to CSS_IDENT as we do with CSS_PROPERTY_ID and CSS_VALUE_ID.
+        (WebCore::CSSPrimitiveValue::cleanup): Added a case for CustomIdent.
+        Moved CSS_DIMENSION to the correct section. Pretty sure there's no way to
+        create one of these with CSS_DIMENSION, but this is less peculiar.
+        (WebCore::CSSPrimitiveValue::setFloatValue): Deleted.
+        (WebCore::CSSPrimitiveValue::setStringValue): Deleted.
+        (WebCore::CSSPrimitiveValue::getStringValue const): Deleted.
+        (WebCore::CSSPrimitiveValue::stringValue const): Added a case for CustomIdent.
+        (WebCore::CSSPrimitiveValue::unitTypeString): Added a case for CustomIdent
+        and an ASSERT_NOT_REACHED for invalid enumeration values.
+        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
+        Removed inaccurate FIXME comment for CSS_DIMENSION and changed it to do
+        something less wrong, but still incorrect. Pretty sure there's no way to
+        create one of these with CSS_DIMENSION, but this is less peculiar. Changed
+        CSS_STRING case to always serializeAsString. Added a CustomIdent case
+        that always serializes as an identifier.
+        (WebCore::CSSPrimitiveValue::equals const): Moved the CSS_DIMENSION to
+        the correct part of this switch statement. Pretty sure there's no way to
+        create one of these with CSS_DIMENSION, but this is less peculiar.
+        Added case for CustomIdent.
+
+        * css/CSSPrimitiveValue.h: Made isFontRelativeLength, isResolution,
+        and isViewportPercentageLength private. Made those plus isLength all
+        constexpr. Removed WEBCORE_EXPORT from primitiveType and getFloatValue:
+        those needed to be exported when this was the web-exposed class, but
+        that is now DeprecatedCSSOMPrimitiveValue. Deleted setFloatValue,
+        setStringValue, and getStringValue for the same reason: those functions
+        are now in DeprecatedCSSOMPrimitiveValue and don't need to be here.
+
+        * css/CSSToStyleMap.cpp:
+        (WebCore::CSSToStyleMap::mapAnimationName): Updated to pass a boolean
+        in to the animation name to keep track of whether it was created with
+        a string or a custom-ident so we it can properly round-trip in computed
+        style. This is required to pass some of the WPT tests, although I could
+        not find clear guidance in the specification that this behavior is required.
+        The same name with a string and custom-ident are equivalent in other ways.
+
+        * css/CSSUnits.cpp:
+        (WebCore::operator<<): Added a case for CustomIdent.
+        * css/CSSUnits.h: Added CustomIdent. Added some FIXME about how we can
+        change this in the future. It's a remnant of the past when these were part
+        of our web-facing API, and this can be greatly cleaned up.
+
+        * css/CSSValue.cpp:
+        (WebCore::CSSValue::cssText const): Removed CSSCustomIdentValue.h,
+        CustomIdentClass, CSSCustomIdentValue. We are not going to use a separate
+        class for custom-ident, just a separate type of primitive value.
+        (WebCore::CSSValue::destroy): Ditto.
+        * css/CSSValue.h: Deleted isCustomIdentValue and CustomIdentClass.
+
+        * css/CSSValueList.cpp:
+        (WebCore::CSSValueList::customCSSText const): Tweaked algorithm
+        to be slightly more efficient.
+
+        * css/CSSValuePool.h: Added createCustomIdent. Later should remove
+        the create function that takes a string value and a type and use
+        separate named functions for the few different cases, but doing the
+        new one this way for now.
+
+        * css/DeprecatedCSSOMPrimitiveValue.cpp:
+        (WebCore::DeprecatedCSSOMPrimitiveValue::primitiveType const):
+        Rewrote this to be a switch that preserves the current behavior
+        but no longer relies on the numeric values of CSSUnitType values.
+        Added a FIXME about using CSS_UNKNOWN more: some of the numbers
+        we are exposing to the web are doing no good.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::setFloatValue): Moved this
+        function to the header.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::getFloatValue const):
+        Rewrote this to be a switch as above. Preserves current behavior
+        but stops relying on CSSUnitType numeric values.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::setStringValue): Moved this
+        function to the header.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::getStringValue const):
+        Ditto. By putting a switch on primitiveType here, we can enforce
+        the desired exception behavior here, instead of getting it from
+        CSSPrimitiveValue, and it's better for this class to deal with
+        the legacy bindings issues.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::getCounterValue const): Ditto.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::getRectValue const): Ditto.
+        (WebCore::DeprecatedCSSOMPrimitiveValue::getRGBColorValue const): Ditto.
+
+        * css/DeprecatedCSSOMPrimitiveValue.h: Removed unneeded cssValueType
+        function. Made both setFloatValue and setStringValue simpler since
+        they always raise an exception and we do not intend to change that.
+        Also stop using protected since we have no classes derived from this.
+        Could do more cleanup, but this is a start.
+
+        * css/DeprecatedCSSOMValue.cpp:
+        (WebCore::DeprecatedCSSOMValue::cssValueType const): Put the constant
+        values, CSS_PRIMITIVE_VALUE and CSS_VALUE_LIST, here rather than
+        calling member functions.
+
+        * css/DeprecatedCSSOMValueList.cpp:
+        (WebCore::DeprecatedCSSOMValueList::cssText const): Tweaked to make
+        the code more efficient.
+
+        * css/DeprecatedCSSOMValueList.h: Removed unneeded cssValueType
+        function and const overload of item function. Also stop using protected
+        since we have no classes derived from this.
+
+        * css/MediaQueryExpression.cpp:
+        (WebCore::featureWithValidIdent): Fixed indentation to match WebKit style.
+        (WebCore::featureWithValidDensity): Ditto.
+        (WebCore::featureWithValidPositiveLength): Ditto.
+        (WebCore::featureExpectingPositiveInteger): Ditto.
+        (WebCore::featureWithPositiveNumber): Ditto.
+
+        * css/calc/CSSCalcCategoryMapping.cpp:
+        (WebCore::hasDoubleValue): Added a case for CustomIdent.
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeWillChange): Removed comment saying we should use
+        CSSCustomIdentValue since using a property ID for the value is great.
+        (WebCore::consumeAnimationName): Removed comment saying we should use
+        CSSCustomIdentValue here because that would be incorrect: we need to
+        preserve and round-trip the fact that this was string, not custom-ident.
+        (WebCore::consumeTransitionProperty): Remove special case for
+        CSSValueAll that wasn't doing anything. Removed comment saying we should
+        use CSSCustomIdentValue since using a value ID for the value is great.
+        (WebCore::consumeAttr): Updated comment.
+        (WebCore::isCustomIdentValue): Updated to work with the new primitive value.
+
+        * css/parser/CSSPropertyParserHelpers.cpp:
+        (WebCore::CSSPropertyParserHelpers::consumeCustomIdent):
+        Use the new createCustomIdent and removed an outdated comment. While we
+        might some day want to implement custom-ident differently, we won't need
+        to change the code here to make that happen.
+
+        * platform/animation/Animation.cpp:
+        (WebCore::Animation::animationsMatch const): Update since m_name now is a
+        struct.
+        (WebCore::Animation::initialName): Update to return Name instead of String.
+        (WebCore::operator<<): Update since name() now returns a struct.
+        * platform/animation/Animation.h: Added the Name struct so we can store a
+        boolean to indicate whether it's a string or custom-ident for round tripping.
+        Update types and implementations of function and data members accordingly.
+
+        * style/StyleBuilderConverter.h:
+        (WebCore::Style::BuilderConverter::createGridPosition): Update code to expect
+        custom-ident instead of string; they used to both be the same thing.
+
+        * style/Styleable.cpp:
+        (WebCore::shouldConsiderAnimation): Update since Animation::name() now
+        returns a struct. Also got rid of unsuccessful attempt to optimize comparison
+        againt the string "none"; later might be good to clean out that special case.
+        (WebCore::Styleable::updateCSSAnimations const): Ditto.
+
</ins><span class="cx"> 2021-06-06  Jean-Yves Avenard  <jya@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [GPUP][MSE] QuotaExceededError Exception not thrown even if the sum of totalTrackBufferSize and appendBuffer size exceeds maximumBufferSize
</span></span></pre></div>
<a id="trunkSourceWebCoreanimationCSSAnimationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/animation/CSSAnimation.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/animation/CSSAnimation.cpp  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/animation/CSSAnimation.cpp     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx"> CSSAnimation::CSSAnimation(const Styleable& element, const Animation& backingAnimation)
</span><span class="cx">     : DeclarativeAnimation(element, backingAnimation)
</span><del>-    , m_animationName(backingAnimation.name())
</del><ins>+    , m_animationName(backingAnimation.name().string)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreanimationKeyframeEffectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/animation/KeyframeEffect.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/animation/KeyframeEffect.cpp        2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/animation/KeyframeEffect.cpp   2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1019,7 +1019,7 @@
</span><span class="cx">     auto cssAnimation = downcast<CSSAnimation>(animation());
</span><span class="cx">     auto& backingAnimation = cssAnimation->backingAnimation();
</span><span class="cx"> 
</span><del>-    KeyframeList keyframeList(backingAnimation.name());
</del><ins>+    KeyframeList keyframeList(backingAnimation.name().string);
</ins><span class="cx">     if (auto* styleScope = Style::Scope::forOrdinal(*m_target, backingAnimation.nameStyleScopeOrdinal()))
</span><span class="cx">         styleScope->resolver().keyframeStylesForAnimation(*m_target, &unanimatedStyle, parentElementStyle, keyframeList);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -880,7 +880,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto& cssValuePool = CSSValuePool::singleton();
</span><span class="cx">     for (const auto& lineName : iter->value)
</span><del>-        lineNamesValue.append(cssValuePool.createValue(lineName, CSSUnitType::CSS_STRING));
</del><ins>+        lineNamesValue.append(cssValuePool.createCustomIdent(lineName));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void OrderedNamedLinesCollector::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, unsigned i) const
</span><span class="lines">@@ -1041,7 +1041,7 @@
</span><span class="cx">         return cssValuePool.createIdentifierValue(CSSValueAuto);
</span><span class="cx"> 
</span><span class="cx">     if (position.isNamedGridArea())
</span><del>-        return cssValuePool.createValue(position.namedGridLine(), CSSUnitType::CSS_STRING);
</del><ins>+        return cssValuePool.createCustomIdent(position.namedGridLine());
</ins><span class="cx"> 
</span><span class="cx">     auto list = CSSValueList::createSpaceSeparated();
</span><span class="cx">     if (position.isSpan()) {
</span><span class="lines">@@ -1051,7 +1051,7 @@
</span><span class="cx">         list->append(cssValuePool.createValue(position.integerPosition(), CSSUnitType::CSS_NUMBER));
</span><span class="cx"> 
</span><span class="cx">     if (!position.namedGridLine().isNull())
</span><del>-        list->append(cssValuePool.createValue(position.namedGridLine(), CSSUnitType::CSS_STRING));
</del><ins>+        list->append(cssValuePool.createCustomIdent(position.namedGridLine()));
</ins><span class="cx">     return list;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1063,9 +1063,9 @@
</span><span class="cx">     case Animation::TransitionMode::All:
</span><span class="cx">         return CSSValuePool::singleton().createIdentifierValue(CSSValueAll);
</span><span class="cx">     case Animation::TransitionMode::SingleProperty:
</span><del>-        return CSSValuePool::singleton().createValue(getPropertyNameString(animation.property().id), CSSUnitType::CSS_STRING);
</del><ins>+        return CSSValuePool::singleton().createCustomIdent(getPropertyNameString(animation.property().id));
</ins><span class="cx">     case Animation::TransitionMode::UnknownProperty:
</span><del>-        return CSSValuePool::singleton().createValue(animation.unknownProperty(), CSSUnitType::CSS_STRING);
</del><ins>+        return CSSValuePool::singleton().createCustomIdent(animation.unknownProperty());
</ins><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx">     return CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
</span><span class="lines">@@ -1761,7 +1761,7 @@
</span><span class="cx">     auto& cssValuePool = CSSValuePool::singleton();
</span><span class="cx">     auto list = CSSValueList::createSpaceSeparated();
</span><span class="cx">     for (auto& keyValue : *map) {
</span><del>-        list->append(cssValuePool.createValue(keyValue.key, CSSUnitType::CSS_STRING));
</del><ins>+        list->append(cssValuePool.createCustomIdent(keyValue.key));
</ins><span class="cx">         double number = (propertyID == CSSPropertyCounterIncrement ? keyValue.value.incrementValue : keyValue.value.resetValue).value_or(0);
</span><span class="cx">         list->append(cssValuePool.createValue(number, CSSUnitType::CSS_NUMBER));
</span><span class="cx">     }
</span><span class="lines">@@ -3051,7 +3051,7 @@
</span><span class="cx">         case CSSPropertyWebkitLocale:
</span><span class="cx">             if (style.specifiedLocale().isNull())
</span><span class="cx">                 return cssValuePool.createIdentifierValue(CSSValueAuto);
</span><del>-            return cssValuePool.createValue(style.specifiedLocale(), CSSUnitType::CSS_STRING);
</del><ins>+            return cssValuePool.createCustomIdent(style.specifiedLocale());
</ins><span class="cx">         case CSSPropertyMarginTop:
</span><span class="cx">             return zoomAdjustedPaddingOrMarginPixelValue<&RenderStyle::marginTop, &RenderBoxModelObject::marginTop>(style, renderer);
</span><span class="cx">         case CSSPropertyMarginRight: {
</span><span class="lines">@@ -3423,8 +3423,13 @@
</span><span class="cx">             auto list = CSSValueList::createCommaSeparated();
</span><span class="cx">             const AnimationList* t = style.animations();
</span><span class="cx">             if (t) {
</span><del>-                for (size_t i = 0; i < t->size(); ++i)
-                    list->append(cssValuePool.createValue(t->animation(i).name(), CSSUnitType::CSS_STRING));
</del><ins>+                for (size_t i = 0; i < t->size(); ++i) {
+                    auto& name = t->animation(i).name();
+                    if (name.isIdentifier)
+                        list->append(cssValuePool.createCustomIdent(name.string));
+                    else
+                        list->append(cssValuePool.createValue(name.string, CSSUnitType::CSS_STRING));
+                }
</ins><span class="cx">             } else
</span><span class="cx">                 list->append(cssValuePool.createIdentifierValue(CSSValueNone));
</span><span class="cx">             return list;
</span><span class="lines">@@ -3686,7 +3691,7 @@
</span><span class="cx">         case CSSPropertyWebkitLineGrid:
</span><span class="cx">             if (style.lineGrid().isNull())
</span><span class="cx">                 return cssValuePool.createIdentifierValue(CSSValueNone);
</span><del>-            return cssValuePool.createValue(style.lineGrid(), CSSUnitType::CSS_STRING);
</del><ins>+            return cssValuePool.createCustomIdent(style.lineGrid());
</ins><span class="cx">         case CSSPropertyWebkitLineSnap:
</span><span class="cx">             return CSSPrimitiveValue::create(style.lineSnap());
</span><span class="cx">         case CSSPropertyWebkitLineAlign:
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCustomIdentValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCustomIdentValue.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCustomIdentValue.cpp 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSCustomIdentValue.cpp    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,62 +1,5 @@
</span><del>-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Copyright (C) 2016 Apple Inc. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</del><ins>+/*
+ *  Copyright (C) 2021 Apple Inc. All rights reserved.
+ */
</ins><span class="cx"> 
</span><del>-#include "config.h"
-#include "CSSCustomIdentValue.h"
-
-#include "CSSMarkup.h"
-#include <wtf/text/StringBuilder.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-CSSCustomIdentValue::CSSCustomIdentValue(const String& str)
-    : CSSValue(CustomIdentClass)
-    , m_string(str)
-    , m_propertyId(CSSPropertyInvalid) { }
-
-CSSCustomIdentValue::CSSCustomIdentValue(CSSPropertyID id)
-    : CSSValue(CustomIdentClass)
-    , m_string()
-    , m_propertyId(id)
-{
-    ASSERT(isKnownPropertyID());
-}
-
-
-String CSSCustomIdentValue::customCSSText() const
-{
-    if (isKnownPropertyID())
-        return getPropertyNameAtomString(m_propertyId);
-    StringBuilder builder;
-    serializeIdentifier(m_string, builder);
-    return builder.toString();
-}
-
-} // namespace WebCore
</del><ins>+// This file is no longer needed and we can remove it soon.
</ins></span></pre></div>
<a id="trunkSourceWebCorecssCSSCustomIdentValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCustomIdentValue.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCustomIdentValue.h   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSCustomIdentValue.h      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,72 +1,7 @@
</span><del>-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Copyright (C) 2016 Apple Inc. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</del><ins>+/*
+ *  Copyright (C) 2021 Apple Inc. All rights reserved.
+ */
</ins><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include "CSSPropertyNames.h"
-#include "CSSValue.h"
-
-namespace WebCore {
-
-class CSSCustomIdentValue : public CSSValue {
-public:
-    static Ref<CSSCustomIdentValue> create(const String& str)
-    {
-        return adoptRef(*new CSSCustomIdentValue(str));
-    }
-
-    // FIXME: Remove this and lazily parse the CSSPropertyID in isKnownPropertyID().
-    static Ref<CSSCustomIdentValue> create(CSSPropertyID id)
-    {
-        return adoptRef(*new CSSCustomIdentValue(id));
-    }
-
-    String value() const { ASSERT(!isKnownPropertyID()); return m_string; }
-    bool isKnownPropertyID() const { return m_propertyId != CSSPropertyInvalid; }
-    CSSPropertyID valueAsPropertyID() const { ASSERT(isKnownPropertyID()); return m_propertyId; }
-
-    String customCSSText() const;
-
-    bool equals(const CSSCustomIdentValue& other) const
-    {
-        return isKnownPropertyID() ? m_propertyId == other.m_propertyId : m_string == other.m_string;
-    }
-
-private:
-    CSSCustomIdentValue(const String&);
-    CSSCustomIdentValue(CSSPropertyID);
-
-    // FIXME: Change this to an AtomString.
-    String m_string;
-    CSSPropertyID m_propertyId;
-};
-
-} // namespace WebCore
-
-SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSCustomIdentValue, isCustomIdentValue())
</del><ins>+// This file is no longer needed and we can remove it soon.
</ins></span></pre></div>
<a id="trunkSourceWebCorecssCSSMarkupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSMarkup.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSMarkup.cpp   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSMarkup.cpp      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -78,9 +78,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void serializeCharacterAsCodePoint(UChar32 c, StringBuilder& appendTo)
</span><span class="cx"> {
</span><del>-    appendTo.append('\\');
-    appendTo.append(hex(c, Lowercase));
-    appendTo.append(' ');
</del><ins>+    appendTo.append('\\', hex(c, Lowercase), ' ');
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void serializeIdentifier(const String& identifier, StringBuilder& appendTo, bool skipStartChecks)
</span><span class="lines">@@ -150,16 +148,6 @@
</span><span class="cx">     return "url(" + serializeString(string) + ")";
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String serializeAsStringOrCustomIdent(const String& string)
-{
-    if (isCSSTokenizerIdentifier(string)) {
-        StringBuilder builder;
-        serializeIdentifier(string, builder);
-        return builder.toString();
-    }
-    return serializeString(string);
-}
-    
</del><span class="cx"> String serializeFontFamily(const String& string)
</span><span class="cx"> {
</span><span class="cx">     return isCSSTokenizerIdentifier(string) ? string : serializeString(string);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSMarkuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSMarkup.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSMarkup.h     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSMarkup.h        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -35,8 +35,4 @@
</span><span class="cx"> String serializeURL(const String&);
</span><span class="cx"> String serializeFontFamily(const String&);
</span><span class="cx"> 
</span><del>-// FIXME-NEWPARSER: This hybrid "check for both string or ident" function can be removed
-// once we have enabled CSSCustomIdentValue and CSSStringValue.
-String serializeAsStringOrCustomIdent(const String&);
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValue.cpp   2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.cpp      2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx">     case CSSUnitType::CSS_COUNTER:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER_NAME:
</span><span class="cx">     case CSSUnitType::CSS_FONT_FAMILY:
</span><del>-    case CSSUnitType::CSS_IDENT:
</del><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_PAIR:
</span><span class="cx">     case CSSUnitType::CSS_PROPERTY_ID:
</span><span class="cx">     case CSSUnitType::CSS_QUAD:
</span><span class="lines">@@ -106,6 +106,8 @@
</span><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">     case CSSUnitType::CSS_VALUE_ID:
</span><span class="cx">         return false;
</span><ins>+    case CSSUnitType::CSS_IDENT:
+        break;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="lines">@@ -118,10 +120,10 @@
</span><span class="cx"> {
</span><span class="cx">     switch (type) {
</span><span class="cx">     case CSSUnitType::CSS_STRING:
</span><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">     case CSSUnitType::CSS_ATTR:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER_NAME:
</span><del>-    case CSSUnitType::CSS_DIMENSION:
</del><span class="cx">         return true;
</span><span class="cx">     case CSSUnitType::CSS_CALC:
</span><span class="cx">     case CSSUnitType::CSS_CALC_PERCENTAGE_WITH_LENGTH:
</span><span class="lines">@@ -130,6 +132,7 @@
</span><span class="cx">     case CSSUnitType::CSS_CM:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER:
</span><span class="cx">     case CSSUnitType::CSS_DEG:
</span><ins>+    case CSSUnitType::CSS_DIMENSION:
</ins><span class="cx">     case CSSUnitType::CSS_DPCM:
</span><span class="cx">     case CSSUnitType::CSS_DPI:
</span><span class="cx">     case CSSUnitType::CSS_DPPX:
</span><span class="lines">@@ -188,7 +191,9 @@
</span><span class="cx"> 
</span><span class="cx"> CSSUnitType CSSPrimitiveValue::primitiveType() const
</span><span class="cx"> {
</span><del>-    if (primitiveUnitType() == CSSUnitType::CSS_PROPERTY_ID || primitiveUnitType() == CSSUnitType::CSS_VALUE_ID)
</del><ins>+    // FIXME: Use a switch statement here.
+
+    if (primitiveUnitType() == CSSUnitType::CSS_PROPERTY_ID || primitiveUnitType() == CSSUnitType::CSS_VALUE_ID || primitiveUnitType() == CSSUnitType::CustomIdent)
</ins><span class="cx">         return CSSUnitType::CSS_IDENT;
</span><span class="cx"> 
</span><span class="cx">     // Web-exposed content expects font family values to have CSSUnitType::CSS_STRING primitive type
</span><span class="lines">@@ -295,10 +300,9 @@
</span><span class="cx">         setPrimitiveUnitType(CSSUnitType::CSS_PX);
</span><span class="cx">         m_value.num = adjustFloatForAbsoluteZoom(length.value(), style);
</span><span class="cx">         return;
</span><del>-    case LengthType::Calculated: {
</del><ins>+    case LengthType::Calculated:
</ins><span class="cx">         init(CSSCalcValue::create(length.calculationValue(), style));
</span><span class="cx">         return;
</span><del>-    }
</del><span class="cx">     case LengthType::Relative:
</span><span class="cx">     case LengthType::Undefined:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="lines">@@ -439,6 +443,7 @@
</span><span class="cx">     auto type = primitiveUnitType();
</span><span class="cx">     switch (type) {
</span><span class="cx">     case CSSUnitType::CSS_STRING:
</span><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">     case CSSUnitType::CSS_ATTR:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER_NAME:
</span><span class="lines">@@ -445,7 +450,6 @@
</span><span class="cx">         if (m_value.string)
</span><span class="cx">             m_value.string->deref();
</span><span class="cx">         break;
</span><del>-    case CSSUnitType::CSS_DIMENSION:
</del><span class="cx">     case CSSUnitType::CSS_COUNTER:
</span><span class="cx">         m_value.counter->deref();
</span><span class="cx">         break;
</span><span class="lines">@@ -479,6 +483,7 @@
</span><span class="cx">         delete m_value.color;
</span><span class="cx">         m_value.color = nullptr;
</span><span class="cx">         break;
</span><ins>+    case CSSUnitType::CSS_DIMENSION:
</ins><span class="cx">     case CSSUnitType::CSS_NUMBER:
</span><span class="cx">     case CSSUnitType::CSS_PERCENTAGE:
</span><span class="cx">     case CSSUnitType::CSS_EMS:
</span><span class="lines">@@ -751,14 +756,6 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr<void> CSSPrimitiveValue::setFloatValue(CSSUnitType, double)
-{
-    // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects.
-    // No other engine supports mutating style through this API. Computed style is always read-only anyway.
-    // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation.
-    return Exception { NoModificationAllowedError };
-}
-
</del><span class="cx"> double CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(CSSUnitType unitType)
</span><span class="cx"> {
</span><span class="cx">     double factor = 1.0;
</span><span class="lines">@@ -906,36 +903,11 @@
</span><span class="cx">     return convertedValue;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr<void> CSSPrimitiveValue::setStringValue(CSSUnitType, const String&)
-{
-    // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects.
-    // No other engine supports mutating style through this API. Computed style is always read-only anyway.
-    // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation.
-    return Exception { NoModificationAllowedError };
-}
-
-ExceptionOr<String> CSSPrimitiveValue::getStringValue() const
-{
-    switch (primitiveUnitType()) {
-    case CSSUnitType::CSS_STRING:
-    case CSSUnitType::CSS_ATTR:
-    case CSSUnitType::CSS_URI:
-        return m_value.string;
-    case CSSUnitType::CSS_FONT_FAMILY:
-        return String { m_value.fontFamily->familyName };
-    case CSSUnitType::CSS_VALUE_ID:
-        return String { valueName(m_value.valueID).string() };
-    case CSSUnitType::CSS_PROPERTY_ID:
-        return String { propertyName(m_value.propertyID).string() };
-    default:
-        return Exception { InvalidAccessError };
-    }
-}
-
</del><span class="cx"> String CSSPrimitiveValue::stringValue() const
</span><span class="cx"> {
</span><span class="cx">     switch (primitiveUnitType()) {
</span><span class="cx">     case CSSUnitType::CSS_STRING:
</span><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_ATTR:
</span><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">         return m_value.string;
</span><span class="lines">@@ -955,6 +927,7 @@
</span><span class="cx">     return makeString(m_value.num, suffix);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+// FIXME: Should return const char*.
</ins><span class="cx"> String CSSPrimitiveValue::unitTypeString(CSSUnitType unitType)
</span><span class="cx"> {
</span><span class="cx">     switch (unitType) {
</span><span class="lines">@@ -995,6 +968,7 @@
</span><span class="cx">         case CSSUnitType::CSS_STRING:
</span><span class="cx">         case CSSUnitType::CSS_URI:
</span><span class="cx">         case CSSUnitType::CSS_IDENT:
</span><ins>+        case CSSUnitType::CustomIdent:
</ins><span class="cx">         case CSSUnitType::CSS_ATTR:
</span><span class="cx">         case CSSUnitType::CSS_COUNTER:
</span><span class="cx">         case CSSUnitType::CSS_RECT:
</span><span class="lines">@@ -1013,6 +987,7 @@
</span><span class="cx">         case CSSUnitType::CSS_QUIRKY_EMS:
</span><span class="cx">             return emptyString();
</span><span class="cx">     }
</span><ins>+    ASSERT_NOT_REACHED();
</ins><span class="cx">     return emptyString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1077,13 +1052,15 @@
</span><span class="cx">     case CSSUnitType::CSS_RLHS:
</span><span class="cx">         return formatNumberValue("rlh");
</span><span class="cx">     case CSSUnitType::CSS_DIMENSION:
</span><del>-        // FIXME: We currently don't handle CSSUnitType::CSS_DIMENSION properly as we don't store
-        // the actual dimension, just the numeric value as a string.
</del><ins>+        // FIXME: This isn't correct.
+        return formatNumberValue("");
</ins><span class="cx">     case CSSUnitType::CSS_STRING:
</span><del>-        // FIME-NEWPARSER: Once we have CSSCustomIdentValue hooked up, this can just be
-        // serializeString, since custom identifiers won't be the same value as strings
-        // any longer.
-        return serializeAsStringOrCustomIdent(m_value.string);
</del><ins>+        return serializeString(m_value.string);
+    case CSSUnitType::CustomIdent: {
+        StringBuilder builder;
+        serializeIdentifier(m_value.string, builder);
+        return builder.toString();
+    }
</ins><span class="cx">     case CSSUnitType::CSS_FONT_FAMILY:
</span><span class="cx">         return serializeFontFamily(m_value.fontFamily->familyName);
</span><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="lines">@@ -1197,13 +1174,14 @@
</span><span class="cx">     case CSSUnitType::CSS_Q:
</span><span class="cx">     case CSSUnitType::CSS_LHS:
</span><span class="cx">     case CSSUnitType::CSS_RLHS:
</span><ins>+    case CSSUnitType::CSS_DIMENSION:
</ins><span class="cx">         return m_value.num == other.m_value.num;
</span><span class="cx">     case CSSUnitType::CSS_PROPERTY_ID:
</span><span class="cx">         return propertyName(m_value.propertyID) == propertyName(other.m_value.propertyID);
</span><span class="cx">     case CSSUnitType::CSS_VALUE_ID:
</span><span class="cx">         return valueName(m_value.valueID) == valueName(other.m_value.valueID);
</span><del>-    case CSSUnitType::CSS_DIMENSION:
</del><span class="cx">     case CSSUnitType::CSS_STRING:
</span><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">     case CSSUnitType::CSS_ATTR:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER_NAME:
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValue.h     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.h        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -78,14 +78,10 @@
</span><span class="cx"> 
</span><span class="cx"> class CSSPrimitiveValue final : public CSSValue {
</span><span class="cx"> public:
</span><del>-
-    static bool isFontRelativeLength(CSSUnitType);
-    static bool isLength(CSSUnitType);
-    static bool isResolution(CSSUnitType);
-    static bool isViewportPercentageLength(CSSUnitType type) { return type >= CSSUnitType::CSS_VW && type <= CSSUnitType::CSS_VMAX; }
</del><ins>+    static constexpr bool isLength(CSSUnitType);
</ins><span class="cx">     static double computeDegrees(CSSUnitType, double angle);
</span><span class="cx"> 
</span><del>-    // FIXME: Some of these use primitiveUnitType() and some use primitiveType(). Those that use primitiveUnitType() are broken with calc().
</del><ins>+    // FIXME: Some of these use primitiveUnitType() and some use primitiveType(). Many that use primitiveUnitType() are likely broken with calc().
</ins><span class="cx">     bool isAngle() const { return unitCategory(primitiveType()) == CSSUnitCategory::Angle; }
</span><span class="cx">     bool isAttr() const { return primitiveUnitType() == CSSUnitType::CSS_ATTR; }
</span><span class="cx">     bool isCounter() const { return primitiveUnitType() == CSSUnitType::CSS_COUNTER; }
</span><span class="lines">@@ -120,6 +116,7 @@
</span><span class="cx">     bool isViewportPercentageMin() const { return primitiveUnitType() == CSSUnitType::CSS_VMIN; }
</span><span class="cx">     bool isValueID() const { return primitiveUnitType() == CSSUnitType::CSS_VALUE_ID; }
</span><span class="cx">     bool isFlex() const { return primitiveType() == CSSUnitType::CSS_FR; }
</span><ins>+    bool isCustomIdent() const { return primitiveUnitType() == CSSUnitType::CustomIdent; }
</ins><span class="cx"> 
</span><span class="cx">     static Ref<CSSPrimitiveValue> createIdentifier(CSSValueID valueID) { return adoptRef(*new CSSPrimitiveValue(valueID)); }
</span><span class="cx">     static Ref<CSSPrimitiveValue> createIdentifier(CSSPropertyID propertyID) { return adoptRef(*new CSSPrimitiveValue(propertyID)); }
</span><span class="lines">@@ -135,11 +132,8 @@
</span><span class="cx"> 
</span><span class="cx">     void cleanup();
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT CSSUnitType primitiveType() const;
-    WEBCORE_EXPORT ExceptionOr<void> setFloatValue(CSSUnitType , double);
-    WEBCORE_EXPORT ExceptionOr<float> getFloatValue(CSSUnitType) const;
-    WEBCORE_EXPORT ExceptionOr<void> setStringValue(CSSUnitType, const String&);
-    WEBCORE_EXPORT ExceptionOr<String> getStringValue() const;
</del><ins>+    CSSUnitType primitiveType() const;
+    ExceptionOr<float> getFloatValue(CSSUnitType) const;
</ins><span class="cx"> 
</span><span class="cx">     double computeDegrees() const;
</span><span class="cx">     
</span><span class="lines">@@ -152,6 +146,7 @@
</span><span class="cx">     bool convertingToLengthRequiresNonNullStyle(int lengthConversion) const;
</span><span class="cx"> 
</span><span class="cx">     double doubleValue(CSSUnitType) const;
</span><ins>+
</ins><span class="cx">     // It's usually wrong to call this; it can trigger type conversion in calc without sufficient context to resolve relative length units.
</span><span class="cx">     double doubleValue() const;
</span><span class="cx"> 
</span><span class="lines">@@ -246,6 +241,10 @@
</span><span class="cx">     ALWAYS_INLINE String formatNumberForCustomCSSText() const;
</span><span class="cx">     NEVER_INLINE String formatNumberValue(StringView) const;
</span><span class="cx"> 
</span><ins>+    static constexpr bool isFontRelativeLength(CSSUnitType);
+    static constexpr bool isResolution(CSSUnitType);
+    static constexpr bool isViewportPercentageLength(CSSUnitType type) { return type >= CSSUnitType::CSS_VW && type <= CSSUnitType::CSS_VMAX; }
+
</ins><span class="cx">     union {
</span><span class="cx">         CSSPropertyID propertyID;
</span><span class="cx">         CSSValueID valueID;
</span><span class="lines">@@ -262,7 +261,7 @@
</span><span class="cx">     } m_value;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline bool CSSPrimitiveValue::isFontRelativeLength(CSSUnitType type)
</del><ins>+constexpr bool CSSPrimitiveValue::isFontRelativeLength(CSSUnitType type)
</ins><span class="cx"> {
</span><span class="cx">     return type == CSSUnitType::CSS_EMS
</span><span class="cx">         || type == CSSUnitType::CSS_EXS
</span><span class="lines">@@ -273,7 +272,7 @@
</span><span class="cx">         || type == CSSUnitType::CSS_QUIRKY_EMS;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline bool CSSPrimitiveValue::isLength(CSSUnitType type)
</del><ins>+constexpr bool CSSPrimitiveValue::isLength(CSSUnitType type)
</ins><span class="cx"> {
</span><span class="cx">     return (type >= CSSUnitType::CSS_EMS && type <= CSSUnitType::CSS_PC)
</span><span class="cx">         || type == CSSUnitType::CSS_REMS
</span><span class="lines">@@ -285,7 +284,7 @@
</span><span class="cx">         || type == CSSUnitType::CSS_QUIRKY_EMS;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline bool CSSPrimitiveValue::isResolution(CSSUnitType type)
</del><ins>+constexpr bool CSSPrimitiveValue::isResolution(CSSUnitType type)
</ins><span class="cx"> {
</span><span class="cx">     return type >= CSSUnitType::CSS_DPPX && type <= CSSUnitType::CSS_DPCM;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSToStyleMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSToStyleMap.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSToStyleMap.cpp       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSToStyleMap.cpp  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -404,7 +404,7 @@
</span><span class="cx">     if (primitiveValue.valueID() == CSSValueNone)
</span><span class="cx">         layer.setIsNoneAnimation(true);
</span><span class="cx">     else
</span><del>-        layer.setName(primitiveValue.stringValue(), m_builderState.styleScopeOrdinal());
</del><ins>+        layer.setName({ primitiveValue.stringValue(), primitiveValue.isCustomIdent() }, m_builderState.styleScopeOrdinal());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void CSSToStyleMap::mapAnimationPlayState(Animation& layer, const CSSValue& value)
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSUnitscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSUnits.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSUnits.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSUnits.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -129,6 +129,7 @@
</span><span class="cx">     case CSSUnitType::CSS_STRING: ts << "string"; break;
</span><span class="cx">     case CSSUnitType::CSS_URI: ts << "uri"; break;
</span><span class="cx">     case CSSUnitType::CSS_IDENT: ts << "ident"; break;
</span><ins>+    case CSSUnitType::CustomIdent: ts << "custom-ident"; break;
</ins><span class="cx">     case CSSUnitType::CSS_ATTR: ts << "attr"; break;
</span><span class="cx">     case CSSUnitType::CSS_COUNTER: ts << "counter"; break;
</span><span class="cx">     case CSSUnitType::CSS_RECT: ts << "rect"; break;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSUnitsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSUnits.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSUnits.h      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSUnits.h 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -27,6 +27,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+// FIXME: No need to hard-code the numbers here any more, so we should remove them.
+// FIXME: No need to use all capitals and a CSS prefix on all these names. Should fix that.
</ins><span class="cx"> enum class CSSUnitType : uint8_t {
</span><span class="cx">     CSS_UNKNOWN = 0,
</span><span class="cx">     CSS_NUMBER = 1,
</span><span class="lines">@@ -65,18 +67,19 @@
</span><span class="cx">     CSS_Q = 34,
</span><span class="cx">     CSS_LHS = 35,
</span><span class="cx">     CSS_RLHS = 36,
</span><del>-    CSS_PAIR = 100, // We envision this being exposed as a means of getting computed style values for pairs (border-spacing/radius, background-position, etc.)
</del><ins>+
+    CustomIdent,
+
+    CSS_PAIR = 100,
</ins><span class="cx">     CSS_UNICODE_RANGE = 102,
</span><span class="cx">     CSS_TURN = 107,
</span><span class="cx">     CSS_REMS = 108,
</span><span class="cx">     CSS_CHS = 109,
</span><span class="cx"> 
</span><del>-    // This is used internally for counter names (as opposed to counter values)
</del><span class="cx">     CSS_COUNTER_NAME = 110,
</span><span class="cx"> 
</span><span class="cx">     CSS_SHAPE = 111,
</span><span class="cx"> 
</span><del>-    // Used by border images.
</del><span class="cx">     CSS_QUAD = 112,
</span><span class="cx"> 
</span><span class="cx">     CSS_CALC = 113,
</span><span class="lines">@@ -93,7 +96,7 @@
</span><span class="cx">     // When the quirky value is used, if you're in quirks mode, the margin will collapse away
</span><span class="cx">     // inside a table cell. This quirk is specified in the HTML spec but our impl is different.
</span><span class="cx">     CSS_QUIRKY_EMS = 120
</span><del>-    
</del><ins>+
</ins><span class="cx">     // Note that CSSValue allocates 7 bits for m_primitiveUnitType, so there can be no value here > 127.
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValue.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValue.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSValue.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> #include "CSSContentDistributionValue.h"
</span><span class="cx"> #include "CSSCrossfadeValue.h"
</span><span class="cx"> #include "CSSCursorImageValue.h"
</span><del>-#include "CSSCustomIdentValue.h"
</del><span class="cx"> #include "CSSCustomPropertyValue.h"
</span><span class="cx"> #include "CSSFilterImageValue.h"
</span><span class="cx"> #include "CSSFontFaceSrcValue.h"
</span><span class="lines">@@ -325,8 +324,6 @@
</span><span class="cx">         return downcast<CSSContentDistributionValue>(*this).customCSSText();
</span><span class="cx">     case CustomPropertyClass:
</span><span class="cx">         return downcast<CSSCustomPropertyValue>(*this).customCSSText();
</span><del>-    case CustomIdentClass:
-        return downcast<CSSCustomIdentValue>(*this).customCSSText();
</del><span class="cx">     case VariableReferenceClass:
</span><span class="cx">         return downcast<CSSVariableReferenceValue>(*this).customCSSText();
</span><span class="cx">     case PendingSubstitutionValueClass:
</span><span class="lines">@@ -478,9 +475,6 @@
</span><span class="cx">     case CustomPropertyClass:
</span><span class="cx">         delete downcast<CSSCustomPropertyValue>(this);
</span><span class="cx">         return;
</span><del>-    case CustomIdentClass:
-        delete downcast<CSSCustomIdentValue>(this);
-        return;
</del><span class="cx">     case VariableReferenceClass:
</span><span class="cx">         delete downcast<CSSVariableReferenceValue>(this);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValue.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValue.h      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSValue.h 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -136,7 +136,6 @@
</span><span class="cx">     bool isGridLineNamesValue() const { return m_classType == GridLineNamesClass; }
</span><span class="cx">     bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; }
</span><span class="cx"> 
</span><del>-    bool isCustomIdentValue() const { return m_classType == CustomIdentClass; }
</del><span class="cx">     bool isVariableReferenceValue() const { return m_classType == VariableReferenceClass; }
</span><span class="cx">     bool isPendingSubstitutionValue() const { return m_classType == PendingSubstitutionValueClass; }
</span><span class="cx">     
</span><span class="lines">@@ -207,8 +206,6 @@
</span><span class="cx"> 
</span><span class="cx">         CSSContentDistributionClass,
</span><span class="cx"> 
</span><del>-        CustomIdentClass,
-
</del><span class="cx">         CustomPropertyClass,
</span><span class="cx">         VariableReferenceClass,
</span><span class="cx">         PendingSubstitutionValueClass,
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValueListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValueList.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValueList.cpp        2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSValueList.cpp   2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -87,12 +87,8 @@
</span><span class="cx"> {
</span><span class="cx">     StringBuilder result;
</span><span class="cx">     auto separator = separatorCSSText();
</span><del>-    for (auto& value : m_values) {
-        if (!result.isEmpty())
-            result.append(separator);
-        result.append(value.get().cssText());
-    }
-
</del><ins>+    for (auto& value : m_values)
+        result.append(result.isEmpty() ? ""_s : separator, value.get().cssText());
</ins><span class="cx">     return result.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValuePoolh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValuePool.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValuePool.h  2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/CSSValuePool.h     2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -97,6 +97,7 @@
</span><span class="cx">     Ref<CSSPrimitiveValue> createValue(const String& value, CSSUnitType type) { return CSSPrimitiveValue::create(value, type); }
</span><span class="cx">     Ref<CSSPrimitiveValue> createValue(const Length& value, const RenderStyle& style) { return CSSPrimitiveValue::create(value, style); }
</span><span class="cx">     Ref<CSSPrimitiveValue> createValue(const LengthSize& value, const RenderStyle& style) { return CSSPrimitiveValue::create(value, style); }
</span><ins>+    Ref<CSSPrimitiveValue> createCustomIdent(const String& value) { return CSSPrimitiveValue::create(value, CSSUnitType::CustomIdent); }
</ins><span class="cx">     template<typename T> static Ref<CSSPrimitiveValue> createValue(T&& value) { return CSSPrimitiveValue::create(std::forward<T>(value)); }
</span><span class="cx"> 
</span><span class="cx">     void drain();
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedCSSOMPrimitiveValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.cpp       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.cpp  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2016-2020 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -32,54 +32,146 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><del>-// FIXME: For now these still call into CSSPrimitiveValue, but as we refactor into subclasses
-// such as StyleCounterValue, StyleRectValue, and StyleColorValue, these methods will get
-// more complicated.
-
</del><span class="cx"> unsigned short DeprecatedCSSOMPrimitiveValue::primitiveType() const
</span><span class="cx"> {
</span><del>-    return static_cast<unsigned short>(m_value->primitiveType());
-}
</del><ins>+    // FIXME: Some of these are never exposed to the web because code elsewhere prevents it. We can ASSERT_NOT_REACHED for those.
+    // FIXME: Some of these should return CSS_UNKNOWN instead of hard-coded numbers not mentioned in the IDL file.
</ins><span class="cx"> 
</span><del>-ExceptionOr<void> DeprecatedCSSOMPrimitiveValue::setFloatValue(unsigned short unitType, double floatValue)
-{
-    return m_value->setFloatValue(static_cast<CSSUnitType>(unitType), floatValue);
</del><ins>+    switch (m_value->primitiveType()) {
+    case CSSUnitType::CSS_ATTR:                         return CSS_ATTR;
+    case CSSUnitType::CSS_CALC:                         return 113;
+    case CSSUnitType::CSS_CALC_PERCENTAGE_WITH_LENGTH:  return 115;
+    case CSSUnitType::CSS_CALC_PERCENTAGE_WITH_NUMBER:  return 114;
+    case CSSUnitType::CSS_CHS:                          return 109;
+    case CSSUnitType::CSS_CM:                           return CSS_CM;
+    case CSSUnitType::CSS_COUNTER:                      return CSS_COUNTER;
+    case CSSUnitType::CSS_COUNTER_NAME:                 return 110;
+    case CSSUnitType::CSS_DEG:                          return CSS_DEG;
+    case CSSUnitType::CSS_DIMENSION:                    return CSS_DIMENSION;
+    case CSSUnitType::CSS_DPCM:                         return 32;
+    case CSSUnitType::CSS_DPI:                          return 31;
+    case CSSUnitType::CSS_DPPX:                         return 30;
+    case CSSUnitType::CSS_EMS:                          return CSS_EMS;
+    case CSSUnitType::CSS_EXS:                          return CSS_EXS;
+    case CSSUnitType::CSS_FONT_FAMILY:                  return CSS_STRING;
+    case CSSUnitType::CSS_FR:                           return 33;
+    case CSSUnitType::CSS_GRAD:                         return CSS_GRAD;
+    case CSSUnitType::CSS_HZ:                           return CSS_HZ;
+    case CSSUnitType::CSS_IDENT:                        return CSS_IDENT;
+    case CSSUnitType::CustomIdent:                      return CSS_IDENT;
+    case CSSUnitType::CSS_IN:                           return CSS_IN;
+    case CSSUnitType::CSS_KHZ:                          return CSS_KHZ;
+    case CSSUnitType::CSS_LHS:                          return 35;
+    case CSSUnitType::CSS_MM:                           return CSS_MM;
+    case CSSUnitType::CSS_MS:                           return CSS_MS;
+    case CSSUnitType::CSS_NUMBER:                       return CSS_NUMBER;
+    case CSSUnitType::CSS_PAIR:                         return 100;
+    case CSSUnitType::CSS_PC:                           return CSS_PC;
+    case CSSUnitType::CSS_PERCENTAGE:                   return CSS_PERCENTAGE;
+    case CSSUnitType::CSS_PROPERTY_ID:                  return CSS_IDENT;
+    case CSSUnitType::CSS_PT:                           return CSS_PT;
+    case CSSUnitType::CSS_PX:                           return CSS_PX;
+    case CSSUnitType::CSS_Q:                            return 34;
+    case CSSUnitType::CSS_QUAD:                         return 112;
+    case CSSUnitType::CSS_QUIRKY_EMS:                   return 120;
+    case CSSUnitType::CSS_RAD:                          return CSS_RAD;
+    case CSSUnitType::CSS_RECT:                         return CSS_RECT;
+    case CSSUnitType::CSS_REMS:                         return 108;
+    case CSSUnitType::CSS_RGBCOLOR:                     return CSS_RGBCOLOR;
+    case CSSUnitType::CSS_RLHS:                         return 36;
+    case CSSUnitType::CSS_S:                            return CSS_S;
+    case CSSUnitType::CSS_SHAPE:                        return 111;
+    case CSSUnitType::CSS_STRING:                       return CSS_STRING;
+    case CSSUnitType::CSS_TURN:                         return 107;
+    case CSSUnitType::CSS_UNICODE_RANGE:                return 102;
+    case CSSUnitType::CSS_UNKNOWN:                      return CSS_UNKNOWN;
+    case CSSUnitType::CSS_URI:                          return CSS_URI;
+    case CSSUnitType::CSS_VALUE_ID:                     return CSS_IDENT;
+    case CSSUnitType::CSS_VH:                           return CSS_VH;
+    case CSSUnitType::CSS_VMAX:                         return CSS_VMAX;
+    case CSSUnitType::CSS_VMIN:                         return CSS_VMIN;
+    case CSSUnitType::CSS_VW:                           return CSS_VW;
+    }
+
+    ASSERT_NOT_REACHED();
+    return CSS_UNKNOWN;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr<float> DeprecatedCSSOMPrimitiveValue::getFloatValue(unsigned short unitType) const
</span><span class="cx"> {
</span><del>-    return m_value->getFloatValue(static_cast<CSSUnitType>(unitType));
-}
</del><ins>+    // FIXME: Some of these values do not need to be exposed as a destination type. Remove cases below and give InvalidAccessError instead.
</ins><span class="cx"> 
</span><del>-ExceptionOr<void> DeprecatedCSSOMPrimitiveValue::setStringValue(unsigned short stringType, const String& stringValue)
-{
-    return m_value->setStringValue(static_cast<CSSUnitType>(stringType), stringValue);
</del><ins>+    switch (unitType) {
+    case CSS_CM:            return m_value->getFloatValue(CSSUnitType::CSS_CM);
+    case CSS_DEG:           return m_value->getFloatValue(CSSUnitType::CSS_DEG);
+    case CSS_DIMENSION:     return m_value->getFloatValue(CSSUnitType::CSS_DIMENSION);
+    case CSS_EMS:           return m_value->getFloatValue(CSSUnitType::CSS_EMS);
+    case CSS_EXS:           return m_value->getFloatValue(CSSUnitType::CSS_EXS);
+    case CSS_GRAD:          return m_value->getFloatValue(CSSUnitType::CSS_GRAD);
+    case CSS_HZ:            return m_value->getFloatValue(CSSUnitType::CSS_HZ);
+    case CSS_IN:            return m_value->getFloatValue(CSSUnitType::CSS_IN);
+    case CSS_KHZ:           return m_value->getFloatValue(CSSUnitType::CSS_KHZ);
+    case CSS_MM:            return m_value->getFloatValue(CSSUnitType::CSS_MM);
+    case CSS_MS:            return m_value->getFloatValue(CSSUnitType::CSS_MS);
+    case CSS_NUMBER:        return m_value->getFloatValue(CSSUnitType::CSS_NUMBER);
+    case CSS_PC:            return m_value->getFloatValue(CSSUnitType::CSS_PC);
+    case CSS_PERCENTAGE:    return m_value->getFloatValue(CSSUnitType::CSS_PERCENTAGE);
+    case CSS_PT:            return m_value->getFloatValue(CSSUnitType::CSS_PT);
+    case CSS_PX:            return m_value->getFloatValue(CSSUnitType::CSS_PX);
+    case CSS_RAD:           return m_value->getFloatValue(CSSUnitType::CSS_RAD);
+    case CSS_S:             return m_value->getFloatValue(CSSUnitType::CSS_S);
+    case CSS_VH:            return m_value->getFloatValue(CSSUnitType::CSS_VH);
+    case CSS_VMAX:          return m_value->getFloatValue(CSSUnitType::CSS_VMAX);
+    case CSS_VMIN:          return m_value->getFloatValue(CSSUnitType::CSS_VMIN);
+    case CSS_VW:            return m_value->getFloatValue(CSSUnitType::CSS_VW);
+
+    case 30:                return m_value->getFloatValue(CSSUnitType::CSS_DPPX);
+    case 31:                return m_value->getFloatValue(CSSUnitType::CSS_DPI);
+    case 32:                return m_value->getFloatValue(CSSUnitType::CSS_DPCM);
+    case 33:                return m_value->getFloatValue(CSSUnitType::CSS_FR);
+    case 34:                return m_value->getFloatValue(CSSUnitType::CSS_Q);
+    case 35:                return m_value->getFloatValue(CSSUnitType::CSS_LHS);
+    case 36:                return m_value->getFloatValue(CSSUnitType::CSS_RLHS);
+    case 107:               return m_value->getFloatValue(CSSUnitType::CSS_TURN);
+    case 108:               return m_value->getFloatValue(CSSUnitType::CSS_REMS);
+    case 109:               return m_value->getFloatValue(CSSUnitType::CSS_CHS);
+    case 113:               return m_value->getFloatValue(CSSUnitType::CSS_CALC);
+    case 114:               return m_value->getFloatValue(CSSUnitType::CSS_CALC_PERCENTAGE_WITH_NUMBER);
+    case 115:               return m_value->getFloatValue(CSSUnitType::CSS_CALC_PERCENTAGE_WITH_LENGTH);
+    case 120:               return m_value->getFloatValue(CSSUnitType::CSS_QUIRKY_EMS);
+
+    default:                return Exception { InvalidAccessError };
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr<String> DeprecatedCSSOMPrimitiveValue::getStringValue() const
</span><span class="cx"> {
</span><del>-    return m_value->getStringValue();
</del><ins>+    switch (primitiveType()) {
+    case CSS_ATTR:      return m_value->stringValue();
+    case CSS_IDENT:     return m_value->stringValue();
+    case CSS_STRING:    return m_value->stringValue();
+    case CSS_URI:       return m_value->stringValue();
+    default:            return Exception { InvalidAccessError };
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr<Ref<DeprecatedCSSOMCounter>> DeprecatedCSSOMPrimitiveValue::getCounterValue() const
</span><span class="cx"> {
</span><del>-    auto* value = m_value->counterValue();
-    if (!value)
</del><ins>+    if (primitiveType() != CSS_COUNTER)
</ins><span class="cx">         return Exception { InvalidAccessError };
</span><del>-    return DeprecatedCSSOMCounter::create(*value, m_owner);
</del><ins>+    return DeprecatedCSSOMCounter::create(*m_value->counterValue(), m_owner);
</ins><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> ExceptionOr<Ref<DeprecatedCSSOMRect>> DeprecatedCSSOMPrimitiveValue::getRectValue() const
</span><span class="cx"> {
</span><del>-    auto* value = m_value->rectValue();
-    if (!value)
</del><ins>+    if (primitiveType() != CSS_RECT)
</ins><span class="cx">         return Exception { InvalidAccessError };
</span><del>-    return DeprecatedCSSOMRect::create(*value, m_owner);
</del><ins>+    return DeprecatedCSSOMRect::create(*m_value->rectValue(), m_owner);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr<Ref<DeprecatedCSSOMRGBColor>> DeprecatedCSSOMPrimitiveValue::getRGBColorValue() const
</span><span class="cx"> {
</span><del>-    if (!m_value->isRGBColor())
</del><ins>+    if (primitiveType() != CSS_RGBCOLOR)
</ins><span class="cx">         return Exception { InvalidAccessError };
</span><span class="cx">     return DeprecatedCSSOMRGBColor::create(m_owner, m_value->color());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedCSSOMPrimitiveValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.h 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/DeprecatedCSSOMPrimitiveValue.h    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -76,21 +76,21 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool equals(const DeprecatedCSSOMPrimitiveValue& other) const { return m_value->equals(other.m_value); }
</span><del>-    unsigned cssValueType() const { return m_value->cssValueType(); }
</del><span class="cx">     String cssText() const { return m_value->cssText(); }
</span><span class="cx">     
</span><span class="cx">     WEBCORE_EXPORT unsigned short primitiveType() const;
</span><del>-    WEBCORE_EXPORT ExceptionOr<void> setFloatValue(unsigned short unitType, double);
</del><span class="cx">     WEBCORE_EXPORT ExceptionOr<float> getFloatValue(unsigned short unitType) const;
</span><del>-    WEBCORE_EXPORT ExceptionOr<void> setStringValue(unsigned short stringType, const String&);
</del><span class="cx">     WEBCORE_EXPORT ExceptionOr<String> getStringValue() const;
</span><span class="cx">     WEBCORE_EXPORT ExceptionOr<Ref<DeprecatedCSSOMCounter>> getCounterValue() const;
</span><span class="cx">     WEBCORE_EXPORT ExceptionOr<Ref<DeprecatedCSSOMRect>> getRectValue() const;
</span><span class="cx">     WEBCORE_EXPORT ExceptionOr<Ref<DeprecatedCSSOMRGBColor>> getRGBColorValue() const;
</span><span class="cx"> 
</span><ins>+    static ExceptionOr<void> setFloatValue(unsigned short, double) { return Exception { NoModificationAllowedError }; }
+    static ExceptionOr<void> setStringValue(unsigned short, const String&) { return Exception { NoModificationAllowedError }; }
+
</ins><span class="cx">     String stringValue() const { return m_value->stringValue(); }
</span><span class="cx"> 
</span><del>-protected:
</del><ins>+private:
</ins><span class="cx">     DeprecatedCSSOMPrimitiveValue(const CSSPrimitiveValue& value, CSSStyleDeclaration& owner)
</span><span class="cx">         : DeprecatedCSSOMValue(DeprecatedPrimitiveValueClass, owner)
</span><span class="cx">         , m_value(const_cast<CSSPrimitiveValue&>(value))
</span><span class="lines">@@ -97,7 +97,6 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-private:
</del><span class="cx">     Ref<CSSPrimitiveValue> m_value;
</span><span class="cx"> };
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedCSSOMValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedCSSOMValue.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedCSSOMValue.cpp        2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/DeprecatedCSSOMValue.cpp   2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -57,9 +57,9 @@
</span><span class="cx">     case DeprecatedComplexValueClass:
</span><span class="cx">         return downcast<DeprecatedCSSOMComplexValue>(*this).cssValueType();
</span><span class="cx">     case DeprecatedPrimitiveValueClass:
</span><del>-        return downcast<DeprecatedCSSOMPrimitiveValue>(*this).cssValueType();
</del><ins>+        return CSS_PRIMITIVE_VALUE;
</ins><span class="cx">     case DeprecatedValueListClass:
</span><del>-        return downcast<DeprecatedCSSOMValueList>(*this).cssValueType();
</del><ins>+        return CSS_VALUE_LIST;
</ins><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx">     return CSS_CUSTOM;
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedCSSOMValueListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedCSSOMValueList.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedCSSOMValueList.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/DeprecatedCSSOMValueList.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -32,28 +32,25 @@
</span><span class="cx"> 
</span><span class="cx"> String DeprecatedCSSOMValueList::cssText() const
</span><span class="cx"> {
</span><del>-    StringBuilder result;
-    String separator;
</del><ins>+    const char* separator;
</ins><span class="cx">     switch (m_valueSeparator) {
</span><span class="cx">     case CSSValue::SpaceSeparator:
</span><del>-        separator = " "_s;
</del><ins>+        separator = " ";
</ins><span class="cx">         break;
</span><span class="cx">     case CSSValue::CommaSeparator:
</span><del>-        separator = ", "_s;
</del><ins>+        separator = ", ";
</ins><span class="cx">         break;
</span><span class="cx">     case CSSValue::SlashSeparator:
</span><del>-        separator = " / "_s;
</del><ins>+        separator = " / ";
</ins><span class="cx">         break;
</span><span class="cx">     default:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><ins>+        separator = "";
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    for (auto& value : m_values) {
-        if (!result.isEmpty())
-            result.append(separator);
-        result.append(value.get().cssText());
-    }
-    
</del><ins>+    StringBuilder result;
+    for (auto& value : m_values)
+        result.append(result.isEmpty() ? "" : separator, value.get().cssText());
</ins><span class="cx">     return result.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssDeprecatedCSSOMValueListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/DeprecatedCSSOMValueList.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/DeprecatedCSSOMValueList.h      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/DeprecatedCSSOMValueList.h 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -37,14 +37,12 @@
</span><span class="cx">         return adoptRef(*new DeprecatedCSSOMValueList(value, owner));
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    unsigned cssValueType() const { return CSS_VALUE_LIST; }
</del><span class="cx">     String cssText() const;
</span><span class="cx">     
</span><span class="cx">     size_t length() const { return m_values.size(); }
</span><span class="cx">     DeprecatedCSSOMValue* item(size_t index) { return index < m_values.size() ? m_values[index].ptr() : nullptr; }
</span><del>-    const DeprecatedCSSOMValue* item(size_t index) const { return index < m_values.size() ? m_values[index].ptr() : nullptr; }
</del><span class="cx"> 
</span><del>-protected:
</del><ins>+private:
</ins><span class="cx">     DeprecatedCSSOMValueList(const CSSValueList& value, CSSStyleDeclaration& owner)
</span><span class="cx">         : DeprecatedCSSOMValue(DeprecatedValueListClass, owner)
</span><span class="cx">     {
</span><span class="lines">@@ -54,7 +52,6 @@
</span><span class="cx">             m_values.uncheckedAppend(value.itemWithoutBoundsCheck(i)->createDeprecatedCSSOMWrapper(owner));
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-private:
</del><span class="cx">     Vector<Ref<DeprecatedCSSOMValue>, 4> m_values;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssMediaQueryExpressioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/MediaQueryExpression.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/MediaQueryExpression.cpp        2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/MediaQueryExpression.cpp   2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -77,22 +77,22 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     return mediaFeature == MediaFeatureNames::orientation
</span><del>-    || mediaFeature == MediaFeatureNames::colorGamut
-    || mediaFeature == MediaFeatureNames::anyHover
-    || mediaFeature == MediaFeatureNames::anyPointer
-    || mediaFeature == MediaFeatureNames::hover
-    || mediaFeature == MediaFeatureNames::invertedColors
-    || mediaFeature == MediaFeatureNames::pointer
</del><ins>+        || mediaFeature == MediaFeatureNames::colorGamut
+        || mediaFeature == MediaFeatureNames::anyHover
+        || mediaFeature == MediaFeatureNames::anyPointer
+        || mediaFeature == MediaFeatureNames::hover
+        || mediaFeature == MediaFeatureNames::invertedColors
+        || mediaFeature == MediaFeatureNames::pointer
</ins><span class="cx"> #if ENABLE(APPLICATION_MANIFEST)
</span><del>-    || mediaFeature == MediaFeatureNames::displayMode
</del><ins>+        || mediaFeature == MediaFeatureNames::displayMode
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(DARK_MODE_CSS)
</span><del>-    || mediaFeature == MediaFeatureNames::prefersColorScheme
</del><ins>+        || mediaFeature == MediaFeatureNames::prefersColorScheme
</ins><span class="cx"> #endif
</span><del>-    || mediaFeature == MediaFeatureNames::prefersContrast
-    || mediaFeature == MediaFeatureNames::prefersReducedMotion
-    || (mediaFeature == MediaFeatureNames::prefersDarkInterface && (context.useSystemAppearance || isUASheetBehavior(context.mode)))
-    || mediaFeature == MediaFeatureNames::dynamicRange;
</del><ins>+        || mediaFeature == MediaFeatureNames::prefersContrast
+        || mediaFeature == MediaFeatureNames::prefersReducedMotion
+        || (mediaFeature == MediaFeatureNames::prefersDarkInterface && (context.useSystemAppearance || isUASheetBehavior(context.mode)))
+        || mediaFeature == MediaFeatureNames::dynamicRange;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool featureWithValidDensity(const String& mediaFeature, const CSSPrimitiveValue& value)
</span><span class="lines">@@ -101,8 +101,8 @@
</span><span class="cx">         return false;
</span><span class="cx">     
</span><span class="cx">     return mediaFeature == MediaFeatureNames::resolution
</span><del>-    || mediaFeature == MediaFeatureNames::minResolution
-    || mediaFeature == MediaFeatureNames::maxResolution;
</del><ins>+        || mediaFeature == MediaFeatureNames::minResolution
+        || mediaFeature == MediaFeatureNames::maxResolution;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool featureWithValidPositiveLength(const String& mediaFeature, const CSSPrimitiveValue& value)
</span><span class="lines">@@ -111,30 +111,30 @@
</span><span class="cx">         return false;
</span><span class="cx">     
</span><span class="cx">     return mediaFeature == MediaFeatureNames::height
</span><del>-    || mediaFeature == MediaFeatureNames::maxHeight
-    || mediaFeature == MediaFeatureNames::minHeight
-    || mediaFeature == MediaFeatureNames::width
-    || mediaFeature == MediaFeatureNames::maxWidth
-    || mediaFeature == MediaFeatureNames::minWidth
-    || mediaFeature == MediaFeatureNames::deviceHeight
-    || mediaFeature == MediaFeatureNames::maxDeviceHeight
-    || mediaFeature == MediaFeatureNames::minDeviceHeight
-    || mediaFeature == MediaFeatureNames::deviceWidth
-    || mediaFeature == MediaFeatureNames::minDeviceWidth
-    || mediaFeature == MediaFeatureNames::maxDeviceWidth;
</del><ins>+        || mediaFeature == MediaFeatureNames::maxHeight
+        || mediaFeature == MediaFeatureNames::minHeight
+        || mediaFeature == MediaFeatureNames::width
+        || mediaFeature == MediaFeatureNames::maxWidth
+        || mediaFeature == MediaFeatureNames::minWidth
+        || mediaFeature == MediaFeatureNames::deviceHeight
+        || mediaFeature == MediaFeatureNames::maxDeviceHeight
+        || mediaFeature == MediaFeatureNames::minDeviceHeight
+        || mediaFeature == MediaFeatureNames::deviceWidth
+        || mediaFeature == MediaFeatureNames::minDeviceWidth
+        || mediaFeature == MediaFeatureNames::maxDeviceWidth;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool featureExpectingPositiveInteger(const String& mediaFeature)
</span><span class="cx"> {
</span><span class="cx">     return mediaFeature == MediaFeatureNames::color
</span><del>-    || mediaFeature == MediaFeatureNames::maxColor
-    || mediaFeature == MediaFeatureNames::minColor
-    || mediaFeature == MediaFeatureNames::colorIndex
-    || mediaFeature == MediaFeatureNames::maxColorIndex
-    || mediaFeature == MediaFeatureNames::minColorIndex
-    || mediaFeature == MediaFeatureNames::monochrome
-    || mediaFeature == MediaFeatureNames::maxMonochrome
-    || mediaFeature == MediaFeatureNames::minMonochrome;
</del><ins>+        || mediaFeature == MediaFeatureNames::maxColor
+        || mediaFeature == MediaFeatureNames::minColor
+        || mediaFeature == MediaFeatureNames::colorIndex
+        || mediaFeature == MediaFeatureNames::maxColorIndex
+        || mediaFeature == MediaFeatureNames::minColorIndex
+        || mediaFeature == MediaFeatureNames::monochrome
+        || mediaFeature == MediaFeatureNames::maxMonochrome
+        || mediaFeature == MediaFeatureNames::minMonochrome;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool featureWithPositiveInteger(const String& mediaFeature, const CSSPrimitiveValue& value)
</span><span class="lines">@@ -150,12 +150,12 @@
</span><span class="cx">         return false;
</span><span class="cx">     
</span><span class="cx">     return mediaFeature == MediaFeatureNames::transform3d
</span><del>-    || mediaFeature == MediaFeatureNames::devicePixelRatio
-    || mediaFeature == MediaFeatureNames::maxDevicePixelRatio
-    || mediaFeature == MediaFeatureNames::minDevicePixelRatio
-    || mediaFeature == MediaFeatureNames::transition
-    || mediaFeature == MediaFeatureNames::animation
-    || mediaFeature == MediaFeatureNames::transform2d;
</del><ins>+        || mediaFeature == MediaFeatureNames::devicePixelRatio
+        || mediaFeature == MediaFeatureNames::maxDevicePixelRatio
+        || mediaFeature == MediaFeatureNames::minDevicePixelRatio
+        || mediaFeature == MediaFeatureNames::transition
+        || mediaFeature == MediaFeatureNames::animation
+        || mediaFeature == MediaFeatureNames::transform2d;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool featureWithZeroOrOne(const String& mediaFeature, const CSSPrimitiveValue& value)
</span></span></pre></div>
<a id="trunkSourceWebCorecsscalcCSSCalcCategoryMappingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/calc/CSSCalcCategoryMapping.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/calc/CSSCalcCategoryMapping.cpp 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/calc/CSSCalcCategoryMapping.cpp    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -172,6 +172,7 @@
</span><span class="cx">     case CSSUnitType::CSS_FONT_FAMILY:
</span><span class="cx">     case CSSUnitType::CSS_URI:
</span><span class="cx">     case CSSUnitType::CSS_IDENT:
</span><ins>+    case CSSUnitType::CustomIdent:
</ins><span class="cx">     case CSSUnitType::CSS_ATTR:
</span><span class="cx">     case CSSUnitType::CSS_COUNTER:
</span><span class="cx">     case CSSUnitType::CSS_RECT:
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSPropertyParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> #include "CSSBorderImageSliceValue.h"
</span><span class="cx"> #include "CSSContentDistributionValue.h"
</span><span class="cx"> #include "CSSCursorImageValue.h"
</span><del>-#include "CSSCustomIdentValue.h"
</del><span class="cx"> #include "CSSCustomPropertyValue.h"
</span><span class="cx"> #include "CSSFontFaceSrcValue.h"
</span><span class="cx"> #include "CSSFontFeatureValue.h"
</span><span class="lines">@@ -500,7 +499,6 @@
</span><span class="cx">             // Need to return nullptr when currentValue is CSSPropertyAll.
</span><span class="cx">             if (propertyID == CSSPropertyWillChange || propertyID == CSSPropertyAll)
</span><span class="cx">                 return nullptr;
</span><del>-            // FIXME-NEWPARSER: Use CSSCustomIdentValue someday.
</del><span class="cx">             values->append(CSSValuePool::singleton().createIdentifierValue(propertyID));
</span><span class="cx">             range.consumeIncludingWhitespace();
</span><span class="cx">         } else {
</span><span class="lines">@@ -1313,7 +1311,6 @@
</span><span class="cx">         const CSSParserToken& token = range.consumeIncludingWhitespace();
</span><span class="cx">         if (equalIgnoringASCIICase(token.value(), "none"))
</span><span class="cx">             return CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
</span><del>-        // FIXME-NEWPARSER: Want to use a CSSCustomIdentValue here eventually.
</del><span class="cx">         return CSSValuePool::singleton().createValue(token.value().toString(), CSSUnitType::CSS_STRING);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1330,14 +1327,6 @@
</span><span class="cx"> 
</span><span class="cx">     if (CSSPropertyID property = token.parseAsCSSPropertyID()) {
</span><span class="cx">         range.consumeIncludingWhitespace();
</span><del>-        
-        // FIXME-NEWPARSER: No reason why we can't use the "all" property now that it exists.
-        // The old parser used a value keyword for "all", though, since it predated support for
-        // the property.
-        if (property == CSSPropertyAll)
-            return CSSValuePool::singleton().createIdentifierValue(CSSValueAll);
-
-        // FIXME-NEWPARSER: Want to use a CSSCustomIdentValue here eventually.
</del><span class="cx">         return CSSValuePool::singleton().createIdentifierValue(property);
</span><span class="cx">     }
</span><span class="cx">     return consumeCustomIdent(range);
</span><span class="lines">@@ -2321,9 +2310,7 @@
</span><span class="cx">     if (!args.atEnd())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    // FIXME-NEWPARSER: We want to use a CSSCustomIdentValue here eventually for the attrName.
-    // FIXME-NEWPARSER: We want to use a CSSFunctionValue rather than relying on a custom
-    // attr() primitive value.
</del><ins>+    // FIXME: Consider moving to a CSSFunctionValue with a custom-ident rather than a special CSS_ATTR primitive value.
</ins><span class="cx">     return CSSValuePool::singleton().createValue(attrName, CSSUnitType::CSS_ATTR);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -5538,12 +5525,9 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// FIXME-NEWPARSER: Hack to work around the fact that we aren't using CSSCustomIdentValue
-// for stuff yet. This can be replaced by CSSValue::isCustomIdentValue() once we switch
-// to using CSSCustomIdentValue everywhere.
</del><span class="cx"> static bool isCustomIdentValue(const CSSValue& value)
</span><span class="cx"> {
</span><del>-    return is<CSSPrimitiveValue>(value) && downcast<CSSPrimitiveValue>(value).isString();
</del><ins>+    return is<CSSPrimitiveValue>(value) && downcast<CSSPrimitiveValue>(value).isCustomIdent();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool CSSPropertyParser::consumeGridItemPositionShorthand(CSSPropertyID shorthandId, bool important)
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSPropertyParserHelperscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp     2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp        2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1308,15 +1308,12 @@
</span><span class="cx">     return consumeIdent(range);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// FIXME-NEWPARSER: Eventually we'd like this to use CSSCustomIdentValue, but we need
-// to do other plumbing work first (like changing Pair to CSSValuePair and make it not
-// use only primitive values).
</del><span class="cx"> RefPtr<CSSPrimitiveValue> consumeCustomIdent(CSSParserTokenRange& range, bool shouldLowercase)
</span><span class="cx"> {
</span><span class="cx">     if (range.peek().type() != IdentToken || isCSSWideKeyword(range.peek().id()))
</span><span class="cx">         return nullptr;
</span><span class="cx">     auto identifier = range.consumeIncludingWhitespace().value();
</span><del>-    return CSSValuePool::singleton().createValue(shouldLowercase ? identifier.convertToASCIILowercase() : identifier.toString(), CSSUnitType::CSS_STRING);
</del><ins>+    return CSSValuePool::singleton().createCustomIdent(shouldLowercase ? identifier.convertToASCIILowercase() : identifier.toString());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr<CSSPrimitiveValue> consumeString(CSSParserTokenRange& range)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformanimationAnimationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/animation/Animation.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/animation/Animation.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/platform/animation/Animation.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -105,7 +105,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool Animation::animationsMatch(const Animation& other, bool matchProperties) const
</span><span class="cx"> {
</span><del>-    bool result = m_name == other.m_name
</del><ins>+    bool result = m_name.string == other.m_name.string
</ins><span class="cx">         && m_playState == other.m_playState
</span><span class="cx">         && m_playStateSet == other.m_playStateSet
</span><span class="cx">         && m_iterationCount == other.m_iterationCount
</span><span class="lines">@@ -130,9 +130,9 @@
</span><span class="cx">     return !matchProperties || (m_property.mode == other.m_property.mode && m_property.id == other.m_property.id && m_propertySet == other.m_propertySet);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const String& Animation::initialName()
</del><ins>+auto Animation::initialName() -> const Name&
</ins><span class="cx"> {
</span><del>-    static NeverDestroyed<String> initialValue(MAKE_STATIC_STRING_IMPL("none"));
</del><ins>+    static NeverDestroyed<Name> initialValue { Name { MAKE_STATIC_STRING_IMPL("none"), true } };
</ins><span class="cx">     return initialValue;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx"> TextStream& operator<<(TextStream& ts, const Animation& animation)
</span><span class="cx"> {
</span><span class="cx">     ts.dumpProperty("property", animation.property());
</span><del>-    ts.dumpProperty("name", animation.name());
</del><ins>+    ts.dumpProperty("name", animation.name().string);
</ins><span class="cx">     ts.dumpProperty("iteration count", animation.iterationCount());
</span><span class="cx">     ts.dumpProperty("delay", animation.iterationCount());
</span><span class="cx">     ts.dumpProperty("duration", animation.duration());
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformanimationAnimationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/animation/Animation.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/animation/Animation.h      2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/platform/animation/Animation.h 2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We can make placeholder Animation objects to keep the comma-separated lists
</span><span class="cx">     // of properties in sync. isValidAnimation means this is not a placeholder.
</span><del>-    bool isValidAnimation() const { return !m_isNone && !m_name.isEmpty(); }
</del><ins>+    bool isValidAnimation() const { return !m_isNone && !m_name.string.isEmpty(); }
</ins><span class="cx"> 
</span><span class="cx">     bool isEmpty() const
</span><span class="cx">     {
</span><span class="lines">@@ -119,9 +119,14 @@
</span><span class="cx">     double duration() const { return m_duration; }
</span><span class="cx">     double playbackRate() const { return m_playbackRate; }
</span><span class="cx"> 
</span><ins>+    struct Name {
+        String string;
+        bool isIdentifier { false };
+    };
+
</ins><span class="cx">     enum { IterationCountInfinite = -1 };
</span><span class="cx">     double iterationCount() const { return m_iterationCount; }
</span><del>-    const String& name() const { return m_name; }
</del><ins>+    const Name& name() const { return m_name; }
</ins><span class="cx">     Style::ScopeOrdinal nameStyleScopeOrdinal() const { return m_nameStyleScopeOrdinal; }
</span><span class="cx">     AnimationPlayState playState() const { return static_cast<AnimationPlayState>(m_playState); }
</span><span class="cx">     TransitionProperty property() const { return m_property; }
</span><span class="lines">@@ -135,7 +140,7 @@
</span><span class="cx">     void setPlaybackRate(double d) { m_playbackRate = d; }
</span><span class="cx">     void setFillMode(AnimationFillMode f) { m_fillMode = static_cast<unsigned>(f); m_fillModeSet = true; }
</span><span class="cx">     void setIterationCount(double c) { m_iterationCount = c; m_iterationCountSet = true; }
</span><del>-    void setName(const String& name, Style::ScopeOrdinal scope = Style::ScopeOrdinal::Element)
</del><ins>+    void setName(const Name& name, Style::ScopeOrdinal scope = Style::ScopeOrdinal::Element)
</ins><span class="cx">     {
</span><span class="cx">         m_name = name;
</span><span class="cx">         m_nameStyleScopeOrdinal = scope;
</span><span class="lines">@@ -149,7 +154,7 @@
</span><span class="cx"> 
</span><span class="cx">     void setIsNoneAnimation(bool n) { m_isNone = n; }
</span><span class="cx"> 
</span><del>-    Animation& operator=(const Animation& o);
</del><ins>+    Animation& operator=(const Animation&);
</ins><span class="cx"> 
</span><span class="cx">     // return true if all members of this class match (excluding m_next)
</span><span class="cx">     bool animationsMatch(const Animation&, bool matchProperties = true) const;
</span><span class="lines">@@ -163,12 +168,12 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WEBCORE_EXPORT Animation();
</span><del>-    Animation(const Animation& o);
</del><ins>+    Animation(const Animation&);
</ins><span class="cx">     
</span><span class="cx">     // Packs with m_refCount from the base class.
</span><span class="cx">     TransitionProperty m_property { TransitionMode::All, CSSPropertyInvalid };
</span><span class="cx"> 
</span><del>-    String m_name;
</del><ins>+    Name m_name;
</ins><span class="cx">     String m_unknownProperty;
</span><span class="cx">     double m_iterationCount;
</span><span class="cx">     double m_delay;
</span><span class="lines">@@ -201,7 +206,7 @@
</span><span class="cx">     static double initialDuration() { return 0; }
</span><span class="cx">     static AnimationFillMode initialFillMode() { return AnimationFillMode::None; }
</span><span class="cx">     static double initialIterationCount() { return 1.0; }
</span><del>-    static const String& initialName();
</del><ins>+    static const Name& initialName();
</ins><span class="cx">     static AnimationPlayState initialPlayState() { return AnimationPlayState::Playing; }
</span><span class="cx">     static TransitionProperty initialProperty() { return { TransitionMode::All, CSSPropertyInvalid }; }
</span><span class="cx">     static Ref<TimingFunction> initialTimingFunction() { return CubicBezierTimingFunction::create(); }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/StyleBuilderConverter.h (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleBuilderConverter.h       2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/style/StyleBuilderConverter.h  2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1059,8 +1059,7 @@
</span><span class="cx">     // auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
</span><span class="cx">     if (is<CSSPrimitiveValue>(value)) {
</span><span class="cx">         auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
</span><del>-        // We translate <ident> to <string> during parsing as it makes handling it simpler.
-        if (primitiveValue.isString()) {
</del><ins>+        if (primitiveValue.isCustomIdent()) {
</ins><span class="cx">             position.setNamedGridArea(primitiveValue.stringValue());
</span><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="lines">@@ -1089,7 +1088,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     String gridLineName;
</span><del>-    if (currentValue && currentValue->isString()) {
</del><ins>+    if (currentValue && currentValue->isCustomIdent()) {
</ins><span class="cx">         gridLineName = currentValue->stringValue();
</span><span class="cx">         ++it;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/Styleable.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/Styleable.cpp 2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Source/WebCore/style/Styleable.cpp    2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -140,10 +140,8 @@
</span><span class="cx">     if (!animation.isValidAnimation())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    static NeverDestroyed<const String> animationNameNone(MAKE_STATIC_STRING_IMPL("none"));
-
-    auto& name = animation.name();
-    if (name == animationNameNone || name.isEmpty())
</del><ins>+    auto& name = animation.name().string;
+    if (name == "none" || name.isEmpty())
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     if (auto* styleScope = Style::Scope::forOrdinal(element, animation.nameStyleScopeOrdinal()))
</span><span class="lines">@@ -189,7 +187,7 @@
</span><span class="cx"> 
</span><span class="cx">             bool foundMatchingAnimation = false;
</span><span class="cx">             for (auto& previousAnimation : previousAnimations) {
</span><del>-                if (previousAnimation->animationName() == currentAnimation.name()) {
</del><ins>+                if (previousAnimation->animationName() == currentAnimation.name().string) {
</ins><span class="cx">                     // Timing properties or play state may have changed so we need to update the backing animation with
</span><span class="cx">                     // the Animation found in the current style.
</span><span class="cx">                     previousAnimation->setBackingAnimation(currentAnimation);
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Tools/ChangeLog       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2021-06-06  Darin Adler  <darin@apple.com>
+
+        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
+        https://bugs.webkit.org/show_bug.cgi?id=226694
+
+        Reviewed by Sam Weinig.
+
+        * TestRunnerShared/TestFeatures.cpp:
+        (WTR::parseTestHeader): Fixed a missing quote that made a log message read strangely.
+
</ins><span class="cx"> 2021-06-06  David Kilzer  <ddkilzer@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Unexport llvm coverage symbols to fix build
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedTestFeaturescpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/TestFeatures.cpp (278539 => 278540)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/TestFeatures.cpp    2021-06-07 00:01:51 UTC (rev 278539)
+++ trunk/Tools/TestRunnerShared/TestFeatures.cpp       2021-06-07 02:39:33 UTC (rev 278540)
</span><span class="lines">@@ -283,7 +283,7 @@
</span><span class="cx">         auto value = pairString.substr(equalsLocation + 1, pairEnd - (equalsLocation + 1));
</span><span class="cx">         
</span><span class="cx">         if (!parseTestHeaderFeature(features, key, value, path, keyTypeMap))
</span><del>-            LOG_ERROR("Unknown key, '%s, in test header in %s", key.c_str(), path.c_str());
</del><ins>+            LOG_ERROR("Unknown key, '%s', in test header in %s", key.c_str(), path.c_str());
</ins><span class="cx">         
</span><span class="cx">         pairStart = pairEnd + 1;
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>