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

Unified Diff: Source/core/css/CSSParser-in.cpp

Issue 19037003: Re-use CSSParser logic to parse keyframe keys (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 7 years, 3 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
« no previous file with comments | « Source/core/css/CSSParser.h ('k') | Source/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/CSSParser-in.cpp
diff --git a/Source/core/css/CSSParser-in.cpp b/Source/core/css/CSSParser-in.cpp
index 6bd898c69166b374e681b4142276e71149a11ed1..337f459741cf50853ab7cd748dbeac3b83b0e8c6 100644
--- a/Source/core/css/CSSParser-in.cpp
+++ b/Source/core/css/CSSParser-in.cpp
@@ -398,6 +398,14 @@ PassRefPtr<StyleKeyframe> CSSParser::parseKeyframeRule(StyleSheetContents* sheet
return m_keyframe.release();
}
+PassOwnPtr<Vector<double> > CSSParser::parseKeyframeKeyList(const String& string)
+{
+ setupParser("@-internal-keyframe-key-list ", string, "");
+ cssyyparse(this);
+ ASSERT(m_valueList);
+ return StyleKeyframe::createKeyList(m_valueList.get());
+}
+
bool CSSParser::parseSupportsCondition(const String& string)
{
m_supportsCondition = false;
@@ -1353,7 +1361,7 @@ PassRefPtr<MediaQuerySet> CSSParser::parseMediaQueryList(const String& string)
setupParser("@-internal-medialist ", string, "");
cssyyparse(this);
- ASSERT(m_mediaList.get());
+ ASSERT(m_mediaList);
return m_mediaList.release();
}
@@ -10393,6 +10401,9 @@ inline void CSSParser::detectAtToken(int length, bool hasEscape)
if (LIKELY(!hasEscape))
m_token = INTERNAL_KEYFRAME_RULE_SYM;
}
+ CASE("-internal-keyframe-key-list") {
+ m_token = INTERNAL_KEYFRAME_KEY_LIST_SYM;
+ }
CASE("-internal-supports-condition") {
m_parsingMode = SupportsMode;
m_token = INTERNAL_SUPPORTS_CONDITION_SYM;
@@ -11537,26 +11548,12 @@ void CSSParser::deleteFontFaceOnlyValues()
StyleKeyframe* CSSParser::createKeyframe(CSSParserValueList* keys)
{
- // Create a key string from the passed keys
- StringBuilder keyString;
- for (unsigned i = 0; i < keys->size(); ++i) {
- ASSERT(keys->valueAt(i)->unit == CSSPrimitiveValue::CSS_NUMBER);
- double key = keys->valueAt(i)->fValue;
- if (key < 0 || key > 100) {
- // As per http://www.w3.org/TR/css3-animations/#keyframes,
- // "If a keyframe selector specifies negative percentage values
- // or values higher than 100%, then the keyframe will be ignored."
- clearProperties();
- return 0;
- }
- if (i != 0)
- keyString.append(',');
- keyString.append(String::number(key));
- keyString.append('%');
- }
+ OwnPtr<Vector<double> > keyVector = StyleKeyframe::createKeyList(keys);
+ if (keyVector->isEmpty())
+ return 0;
RefPtr<StyleKeyframe> keyframe = StyleKeyframe::create();
- keyframe->setKeyText(keyString.toString());
+ keyframe->setKeys(keyVector.release());
keyframe->setProperties(createStylePropertySet());
clearProperties();
« no previous file with comments | « Source/core/css/CSSParser.h ('k') | Source/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698