Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: Source/core/css/parser/BisonCSSParser-in.cpp

Issue 149363002: Web Animations API: Implement step-middle and steps(x, middle) timing functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove class in BisonCSSParserTest and change to new license text Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/css/parser/BisonCSSParser-in.cpp
diff --git a/Source/core/css/parser/BisonCSSParser-in.cpp b/Source/core/css/parser/BisonCSSParser-in.cpp
index e3d0aa5f0045477affea17653003cb386f84f864..e2ac5c3bc04f40dd4f724254fbdabf049a83ec4b 100644
--- a/Source/core/css/parser/BisonCSSParser-in.cpp
+++ b/Source/core/css/parser/BisonCSSParser-in.cpp
@@ -199,6 +199,7 @@ BisonCSSParser::BisonCSSParser(const CSSParserContext& context, UseCounter* coun
, m_hadSyntacticallyValidCSSRule(false)
, m_logErrors(false)
, m_ignoreErrors(false)
+ , m_parseStepMiddleTimingFunction(false)
, m_defaultNamespace(starAtom)
, m_observer(0)
, m_source(0)
@@ -1114,12 +1115,12 @@ PassRefPtr<CSSValueList> BisonCSSParser::parseFontFaceValue(const AtomicString&
return toCSSValueList(dummyStyle->getPropertyCSSValue(CSSPropertyFontFamily).get());
}
-PassRefPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunctionValue(const String& string)
+PassRefPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunctionValue(const String& string, bool parseStepMiddleTimingFunction)
{
if (string.isEmpty())
return 0;
RefPtr<MutableStylePropertySet> style = MutableStylePropertySet::create();
- if (!parseValue(style.get(), CSSPropertyAnimationTimingFunction, string, false, HTMLStandardMode, 0))
+ if (!parseValue(style.get(), CSSPropertyAnimationTimingFunction, string, false, HTMLStandardMode, 0, parseStepMiddleTimingFunction))
return 0;
return style->getPropertyCSSValue(CSSPropertyAnimationTimingFunction);
@@ -1142,7 +1143,7 @@ bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropert
return parser.parseValue(declaration, propertyID, string, important, static_cast<StyleSheetContents*>(0));
}
-bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID propertyID, const String& string, bool important, CSSParserMode cssParserMode, StyleSheetContents* contextStyleSheet)
+bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID propertyID, const String& string, bool important, CSSParserMode cssParserMode, StyleSheetContents* contextStyleSheet, bool parseStepMiddleTimingFunction)
{
ASSERT(!string.isEmpty());
if (parseSimpleLengthValue(declaration, propertyID, string, important, cssParserMode))
@@ -1162,6 +1163,7 @@ bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropert
return true;
BisonCSSParser parser(context);
+ parser.m_parseStepMiddleTimingFunction = parseStepMiddleTimingFunction;
return parser.parseValue(declaration, propertyID, string, important, contextStyleSheet);
}
@@ -4422,7 +4424,8 @@ PassRefPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunction()
{
CSSParserValue* value = m_valueList->current();
if (value->id == CSSValueEase || value->id == CSSValueLinear || value->id == CSSValueEaseIn || value->id == CSSValueEaseOut
- || value->id == CSSValueEaseInOut || value->id == CSSValueStepStart || value->id == CSSValueStepEnd)
+ || value->id == CSSValueEaseInOut || value->id == CSSValueStepStart || value->id == CSSValueStepEnd
+ || (value->id == CSSValueStepMiddle && m_parseStepMiddleTimingFunction))
return cssValuePool().createIdentifierValue(value->id);
// We must be a function.
@@ -4438,7 +4441,7 @@ PassRefPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunction()
// There are two values.
int numSteps;
- bool stepAtStart = false;
+ StepsTimingFunction::StepAtPosition stepAtPosition = StepsTimingFunction::StepAtEnd;
CSSParserValue* v = args->current();
if (!validUnit(v, FInteger))
@@ -4453,12 +4456,18 @@ PassRefPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunction()
if (!isComma(v))
return 0;
v = args->next();
- if (v->id != CSSValueStart && v->id != CSSValueEnd)
+ if (!m_parseStepMiddleTimingFunction && v->id == CSSValueMiddle)
return 0;
- stepAtStart = v->id == CSSValueStart;
+ if (v->id != CSSValueStart && v->id != CSSValueEnd && v->id != CSSValueMiddle)
+ return 0;
+ if (v->id == CSSValueStart) {
+ stepAtPosition = StepsTimingFunction::StepAtStart;
+ } else if (v->id == CSSValueMiddle) {
+ stepAtPosition = StepsTimingFunction::StepAtMiddle;
+ }
}
- return CSSStepsTimingFunctionValue::create(numSteps, stepAtStart);
+ return CSSStepsTimingFunctionValue::create(numSteps, stepAtPosition);
}
if (equalIgnoringCase(value->function->name, "cubic-bezier(")) {

Powered by Google App Engine
This is Rietveld 408576698