Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
index 117e8a66d622140ea83c55581410454bf8015a85..7ad29baacd1b56fa313fb96587f2d3f70858ad37 100644 |
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
@@ -870,12 +870,10 @@ static inline bool isCSSWideKeyword(const CSSValueID& id) |
// Methods for consuming non-shorthand properties starts here. |
static PassRefPtrWillBeRawPtr<CSSValue> consumeWillChange(CSSParserTokenRange& range) |
{ |
- RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated(); |
- if (range.peek().id() == CSSValueAuto) { |
- // FIXME: This will be read back as an empty string instead of auto |
- return values.release(); |
- } |
+ if (range.peek().id() == CSSValueAuto) |
+ return consumeIdent(range); |
+ RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated(); |
// Every comma-separated list of identifiers is a valid will-change value, |
// unless the list includes an explicitly disallowed identifier. |
while (true) { |
@@ -1228,8 +1226,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeCounter(CSSParserTokenRange& rang |
if (range.peek().id() == CSSValueNone) |
return consumeIdent(range); |
- // TODO(rwlbuis): should be space separated list. |
- RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); |
+ RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); |
do { |
RefPtrWillBeRawPtr<CSSCustomIdentValue> counterName = consumeCustomIdent(range); |
if (!counterName) |
@@ -1238,7 +1235,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeCounter(CSSParserTokenRange& rang |
if (RefPtrWillBeRawPtr<CSSPrimitiveValue> counterValue = consumeInteger(range)) |
i = clampTo<int>(counterValue->getDoubleValue()); |
list->append(CSSValuePair::create(counterName.release(), |
- cssValuePool().createValue(i, CSSPrimitiveValue::UnitType::Number), |
+ cssValuePool().createValue(i, CSSPrimitiveValue::UnitType::Integer), |
CSSValuePair::DropIdenticalValues)); |
} while (!range.atEnd()); |
return list.release(); |
@@ -2358,7 +2355,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeImageSet(CSSParserTokenRange& ran |
static PassRefPtrWillBeRawPtr<CSSValue> consumeCursor(CSSParserTokenRange& range, const CSSParserContext& context, bool inQuirksMode) |
{ |
RefPtrWillBeRawPtr<CSSValueList> list = nullptr; |
- while (!range.atEnd()) { |
+ while (true) { |
RefPtrWillBeRawPtr<CSSValue> image = nullptr; |
AtomicString uri(consumeUrl(range)); |
if (!uri.isNull()) { |
@@ -2399,17 +2396,19 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeCursor(CSSParserTokenRange& range |
} |
RefPtrWillBeRawPtr<CSSValue> cursorType = nullptr; |
if (id == CSSValueHand) { |
- if (inQuirksMode) // Non-standard behavior |
- cursorType = cssValuePool().createIdentifierValue(CSSValuePointer); |
+ if (!inQuirksMode) // Non-standard behavior |
+ return nullptr; |
+ cursorType = cssValuePool().createIdentifierValue(CSSValuePointer); |
range.consumeIncludingWhitespace(); |
} else if ((id >= CSSValueAuto && id <= CSSValueWebkitZoomOut) || id == CSSValueCopy || id == CSSValueNone) { |
cursorType = consumeIdent(range); |
+ } else { |
+ return nullptr; |
} |
if (!list) |
return cursorType.release(); |
- if (cursorType) |
- list->append(cursorType.release()); |
+ list->append(cursorType.release()); |
return list.release(); |
} |
@@ -3467,25 +3466,27 @@ bool CSSPropertyParser::parseViewportDescriptor(CSSPropertyID propId, bool impor |
} |
} |
-static void consumeColumnWidthOrCount(CSSParserTokenRange& range, CSSParserMode cssParserMode, RefPtrWillBeRawPtr<CSSValue> &columnWidth, RefPtrWillBeRawPtr<CSSValue> &columnCount) |
+static bool consumeColumnWidthOrCount(CSSParserTokenRange& range, CSSParserMode cssParserMode, RefPtrWillBeRawPtr<CSSValue> &columnWidth, RefPtrWillBeRawPtr<CSSValue> &columnCount) |
{ |
if (range.peek().id() == CSSValueAuto) { |
consumeIdent(range); |
- return; |
+ return true; |
} |
if (!columnWidth) { |
if ((columnWidth = consumeColumnWidth(range))) |
- return; |
+ return true; |
} |
if (!columnCount) |
columnCount = consumeColumnCount(range); |
+ return columnCount; |
} |
bool CSSPropertyParser::consumeColumns(bool important) |
{ |
RefPtrWillBeRawPtr<CSSValue> columnWidth = nullptr; |
RefPtrWillBeRawPtr<CSSValue> columnCount = nullptr; |
- consumeColumnWidthOrCount(m_range, m_context.mode(), columnWidth, columnCount); |
+ if (!consumeColumnWidthOrCount(m_range, m_context.mode(), columnWidth, columnCount)) |
+ return false; |
consumeColumnWidthOrCount(m_range, m_context.mode(), columnWidth, columnCount); |
if (!m_range.atEnd()) |
return false; |
@@ -3569,17 +3570,18 @@ bool CSSPropertyParser::consumeFlex(bool important) |
return false; |
} |
} |
+ if (index == 0) |
+ return false; |
+ if (flexGrow == unsetValue) |
+ flexGrow = 1; |
+ if (flexShrink == unsetValue) |
+ flexShrink = 1; |
+ if (!flexBasis) |
+ flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Percentage); |
} |
+ |
if (!m_range.atEnd()) |
return false; |
- |
- if (flexGrow == unsetValue) |
- flexGrow = 1; |
- if (flexShrink == unsetValue) |
- flexShrink = 1; |
- if (!flexBasis) |
- flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Percentage); |
- |
addProperty(CSSPropertyFlexGrow, cssValuePool().createValue(clampTo<float>(flexGrow), CSSPrimitiveValue::UnitType::Number), important); |
addProperty(CSSPropertyFlexShrink, cssValuePool().createValue(clampTo<float>(flexShrink), CSSPrimitiveValue::UnitType::Number), important); |
addProperty(CSSPropertyFlexBasis, flexBasis, important); |