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(); |