[webkit-reviews] review denied: [Bug 109021] [css3-text] Parsing each-line value for text-indent from css3-text : [Attachment 191150] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Mar 4 17:26:15 PST 2013


Julien Chaffraix <jchaffraix at webkit.org> has denied Jaehun Lim
<ljaehun.lim at samsung.com>'s request for review:
Bug 109021: [css3-text] Parsing each-line value for text-indent from css3-text
https://bugs.webkit.org/show_bug.cgi?id=109021

Attachment 191150: Patch
https://bugs.webkit.org/attachment.cgi?id=191150&action=review

------- Additional Comments from Julien Chaffraix <jchaffraix at webkit.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=191150&action=review


This will need another round, preferably let's try to keep one code path,
adding #if'defs around the new syntax.

> Source/WebCore/css/CSSParser.cpp:2177
> +#if ENABLE(CSS3_TEXT)
> +    case CSSPropertyTextIndent: // [ <length> | <percentage> ] && each-line?
| inherit
> +	   parsedValue = parseTextIndent();
> +	   if (!parsedValue)
> +	       return false;
> +	   break;
> +#else
>      case CSSPropertyTextIndent:	    // <length> | <percentage> |
inherit
>	   validPrimitive = (!id && validUnit(value, FLength | FPercent));
>	   break;
> +#endif

This is not a good way of handling the new value. Ideally we want the code path
to be as shared as possible instead of splitting the code. Here it's a lot
easier to do:

case CSSPropertyTextIndent:
    parsedValue = parseTextIndent();
    break;

PassRefPtr<CSSValueList> CSSParser::parseTextIndent()
{
    CSSParserValue* value = m_valueList->current();
    if (!value->id || validUnit(value, FLength | FPercent))
	return createPrimitiveNumericValue(value);

#if ENABLE(CSS3_TEXT)
    // Handle the extended grammar, namely [ each-line && <length> |
<percentage> ]
#else
    return 0;
#endif
}

> Source/WebCore/css/CSSParser.cpp:9162
> +    for (CSSParserValue* value = m_valueList->current(); value; value =
m_valueList->next()) {

I don't think having a for loop for 2 values is really good. I would rather see
2 checks as:
* they really depend on the condition in which you parse (did I see
CSSValueEachLine? A <length> | <percentage>?)
* you are allowing more than 2 values (see below)

> Source/WebCore/css/CSSParser.cpp:9165
> +	   else if (!hasParsedTextIndent && !value->id && validUnit(value,
FLength | FPercent)) {

Do you know if the !value->id is required? It seems like an overkill to me.

> Source/WebCore/css/CSSParser.cpp:9170
> +    }

Your parsing allows the following:
* text-indent: each-line each-line;
* text-indent: each-line 10px each-line;

> Source/WebCore/css/CSSValueKeywords.in:1004
> +each-line

You are not prefixing text-indent (which is fine as it is an existing
property). However this is new thus it should be prefixed.

> Source/WebCore/css/StyleBuilder.cpp:1819
> +	   for (size_t i = 0; i < valueList->length(); i++) {

Again think about what you are parsing: you don't expect length() to be 15 so
you should probably ASSERT it and have your code following the fact that we are
probably get at most 2 values.

> Source/WebCore/css/StyleBuilder.cpp:1834
> +	       else if (primitiveValue->isCalculatedPercentageWithLength())
> +		   textIndent =
Length(primitiveValue->cssCalcValue()->toCalcValue(styleResolver->style(),
styleResolver->rootElementStyle(), styleResolver->style()->effectiveZoom()));

calc() is not allowed during parsing so I wouldn't expect it to show up here.

>
LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-t
ext-indent-expected.txt:27
> +

Missing some cases here or at least you should try different <length> values
(how about viewport as you do have custom code for it?). Also how about
<percentage>?

>
LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-t
ext-indent-expected.txt:39
> +PASS computedStyle.getPropertyValue('text-indent') is '0px'

Good test that you check invalid values but you should be a bit more extensive:
how about 2 values? 3 values (including and not including each-line)? ...

>
LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-t
ext-indent-expected.txt:40
> +

How about inheritance which wasn't tested AFAICT?

> LayoutTests/platform/wincairo/TestExpectations:2989
>
+fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent.
html

We should just skip the whole *directory* instead of touching every platforms
everytime some new feature / test case is added.


More information about the webkit-reviews mailing list