- Revision
- 121531
- Author
- [email protected]
- Date
- 2012-06-29 01:55:47 -0700 (Fri, 29 Jun 2012)
Log Message
Use floating keyframe rule list when parsing @-webkit-keyframes and allow abrupt rule termination
https://bugs.webkit.org/show_bug.cgi?id=90073
Reviewed by Antti Koivisto.
Source/WebCore:
- The grammar is changed to allow abruptly terminated stylesheet in the @-webkit-keyframes (use closing_brace, not '}').
- A floating StyleKeyframe vector is introduced to separate the creation and filling of StyleRuleKeyframes, as other rules do.
Test: fast/css/css-keyframe-unexpected-end.html
* css/CSSGrammar.y:
* css/CSSParser.cpp:
(WebCore::CSSParser::createFloatingKeyframeVector):
(WebCore):
(WebCore::CSSParser::sinkFloatingKeyframeVector):
(WebCore::CSSParser::createKeyframesRule):
* css/CSSParser.h:
LayoutTests:
* fast/css/css-keyframe-unexpected-end-expected.txt: Added.
* fast/css/css-keyframe-unexpected-end.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (121530 => 121531)
--- trunk/LayoutTests/ChangeLog 2012-06-29 08:46:04 UTC (rev 121530)
+++ trunk/LayoutTests/ChangeLog 2012-06-29 08:55:47 UTC (rev 121531)
@@ -1,3 +1,13 @@
+2012-06-28 Alexander Pavlov <[email protected]>
+
+ Use floating keyframe rule list when parsing @-webkit-keyframes and allow abrupt rule termination
+ https://bugs.webkit.org/show_bug.cgi?id=90073
+
+ Reviewed by Antti Koivisto.
+
+ * fast/css/css-keyframe-unexpected-end-expected.txt: Added.
+ * fast/css/css-keyframe-unexpected-end.html: Added.
+
2012-06-29 János Badics <[email protected]>
[Qt] Unreviewed gardening after r121494. Added new baseline to
Added: trunk/LayoutTests/fast/css/css-keyframe-unexpected-end-expected.txt (0 => 121531)
--- trunk/LayoutTests/fast/css/css-keyframe-unexpected-end-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/css/css-keyframe-unexpected-end-expected.txt 2012-06-29 08:55:47 UTC (rev 121531)
@@ -0,0 +1 @@
+PASS
Property changes on: trunk/LayoutTests/fast/css/css-keyframe-unexpected-end-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/fast/css/css-keyframe-unexpected-end.html (0 => 121531)
--- trunk/LayoutTests/fast/css/css-keyframe-unexpected-end.html (rev 0)
+++ trunk/LayoutTests/fast/css/css-keyframe-unexpected-end.html 2012-06-29 08:55:47 UTC (rev 121531)
@@ -0,0 +1,24 @@
+<html>
+<head>
+<style>
+@-webkit-keyframes anim {
+ from { color: green; }
+ to { color: red; }
+/* Missing closing brace */
+</style>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+
+function load()
+{
+ rule = document.styleSheets[0].cssRules[0];
+ if (!rule || !rule.cssRules || rule.cssRules.length !== 2)
+ return;
+ document.body.textContent = "PASS";
+}
+
+</script>
+</head>
+<body _onload_="load()">FAIL</body>
+</html>
Property changes on: trunk/LayoutTests/fast/css/css-keyframe-unexpected-end.html
___________________________________________________________________
Added: svn:eol-style
Modified: trunk/Source/WebCore/ChangeLog (121530 => 121531)
--- trunk/Source/WebCore/ChangeLog 2012-06-29 08:46:04 UTC (rev 121530)
+++ trunk/Source/WebCore/ChangeLog 2012-06-29 08:55:47 UTC (rev 121531)
@@ -1,3 +1,23 @@
+2012-06-28 Alexander Pavlov <[email protected]>
+
+ Use floating keyframe rule list when parsing @-webkit-keyframes and allow abrupt rule termination
+ https://bugs.webkit.org/show_bug.cgi?id=90073
+
+ Reviewed by Antti Koivisto.
+
+ - The grammar is changed to allow abruptly terminated stylesheet in the @-webkit-keyframes (use closing_brace, not '}').
+ - A floating StyleKeyframe vector is introduced to separate the creation and filling of StyleRuleKeyframes, as other rules do.
+
+ Test: fast/css/css-keyframe-unexpected-end.html
+
+ * css/CSSGrammar.y:
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::createFloatingKeyframeVector):
+ (WebCore):
+ (WebCore::CSSParser::sinkFloatingKeyframeVector):
+ (WebCore::CSSParser::createKeyframesRule):
+ * css/CSSParser.h:
+
2012-06-26 Yury Semikhatsky <[email protected]>
Web Inspector: add character data to the DOM section of native memory view
Modified: trunk/Source/WebCore/css/CSSGrammar.y (121530 => 121531)
--- trunk/Source/WebCore/css/CSSGrammar.y 2012-06-29 08:46:04 UTC (rev 121530)
+++ trunk/Source/WebCore/css/CSSGrammar.y 2012-06-29 08:55:47 UTC (rev 121531)
@@ -82,7 +82,7 @@
CSSParserValueList* valueList;
Vector<OwnPtr<MediaQueryExp> >* mediaQueryExpList;
StyleKeyframe* keyframe;
- StyleRuleKeyframes* keyframesRule;
+ Vector<RefPtr<StyleKeyframe> >* keyframeRuleList;
float val;
CSSPropertyID id;
}
@@ -252,7 +252,7 @@
%type <string> keyframe_name
%type <keyframe> keyframe_rule
-%type <keyframesRule> keyframes_rule
+%type <keyframeRuleList> keyframes_rule
%type <valueList> key_list
%type <value> key
@@ -621,9 +621,8 @@
;
keyframes:
- WEBKIT_KEYFRAMES_SYM maybe_space keyframe_name maybe_space '{' maybe_space keyframes_rule '}' {
- $$ = $7;
- $7->setName($3);
+ WEBKIT_KEYFRAMES_SYM maybe_space keyframe_name maybe_space '{' maybe_space keyframes_rule closing_brace {
+ $$ = static_cast<CSSParser*>(parser)->createKeyframesRule($3, static_cast<CSSParser*>(parser)->sinkFloatingKeyframeVector($7));
}
;
@@ -633,11 +632,11 @@
;
keyframes_rule:
- /* empty */ { $$ = static_cast<CSSParser*>(parser)->createKeyframesRule(); }
+ /* empty */ { $$ = static_cast<CSSParser*>(parser)->createFloatingKeyframeVector(); }
| keyframes_rule keyframe_rule maybe_space {
$$ = $1;
if ($2)
- $$->parserAppendKeyframe($2);
+ $$->append($2);
}
;
Modified: trunk/Source/WebCore/css/CSSParser.cpp (121530 => 121531)
--- trunk/Source/WebCore/css/CSSParser.cpp 2012-06-29 08:46:04 UTC (rev 121530)
+++ trunk/Source/WebCore/css/CSSParser.cpp 2012-06-29 08:55:47 UTC (rev 121531)
@@ -9374,6 +9374,18 @@
return m_floatingMediaQuery.release();
}
+Vector<RefPtr<StyleKeyframe> >* CSSParser::createFloatingKeyframeVector()
+{
+ m_floatingKeyframeVector = adoptPtr(new Vector<RefPtr<StyleKeyframe> >());
+ return m_floatingKeyframeVector.get();
+}
+
+PassOwnPtr<Vector<RefPtr<StyleKeyframe> > > CSSParser::sinkFloatingKeyframeVector(Vector<RefPtr<StyleKeyframe> >* keyframeVector)
+{
+ ASSERT_UNUSED(keyframeVector, m_floatingKeyframeVector == keyframeVector);
+ return m_floatingKeyframeVector.release();
+}
+
MediaQuerySet* CSSParser::createMediaQuerySet()
{
RefPtr<MediaQuerySet> queries = MediaQuerySet::create();
@@ -9433,10 +9445,14 @@
return data.release();
}
-StyleRuleKeyframes* CSSParser::createKeyframesRule()
+StyleRuleKeyframes* CSSParser::createKeyframesRule(const String& name, PassOwnPtr<Vector<RefPtr<StyleKeyframe> > > popKeyframes)
{
+ OwnPtr<Vector<RefPtr<StyleKeyframe> > > keyframes = popKeyframes;
m_allowImportRules = m_allowNamespaceDeclarations = false;
RefPtr<StyleRuleKeyframes> rule = StyleRuleKeyframes::create();
+ for (size_t i = 0; i < keyframes->size(); ++i)
+ rule->parserAppendKeyframe(keyframes->at(i));
+ rule->setName(name);
StyleRuleKeyframes* rulePtr = rule.get();
m_parsedRules.append(rule.release());
return rulePtr;
Modified: trunk/Source/WebCore/css/CSSParser.h (121530 => 121531)
--- trunk/Source/WebCore/css/CSSParser.h 2012-06-29 08:46:04 UTC (rev 121530)
+++ trunk/Source/WebCore/css/CSSParser.h 2012-06-29 08:55:47 UTC (rev 121531)
@@ -255,7 +255,7 @@
MediaQuerySet* createMediaQuerySet();
StyleRuleBase* createImportRule(const CSSParserString&, MediaQuerySet*);
StyleKeyframe* createKeyframe(CSSParserValueList*);
- StyleRuleKeyframes* createKeyframesRule();
+ StyleRuleKeyframes* createKeyframesRule(const String&, PassOwnPtr<Vector<RefPtr<StyleKeyframe> > >);
typedef Vector<RefPtr<StyleRuleBase> > RuleList;
StyleRuleBase* createMediaRule(MediaQuerySet*, RuleList*);
@@ -276,6 +276,9 @@
MediaQuery* createFloatingMediaQuery(PassOwnPtr<Vector<OwnPtr<MediaQueryExp> > >);
PassOwnPtr<MediaQuery> sinkFloatingMediaQuery(MediaQuery*);
+ Vector<RefPtr<StyleKeyframe> >* createFloatingKeyframeVector();
+ PassOwnPtr<Vector<RefPtr<StyleKeyframe> > > sinkFloatingKeyframeVector(Vector<RefPtr<StyleKeyframe> >*);
+
void addNamespace(const AtomicString& prefix, const AtomicString& uri);
QualifiedName determineNameInNamespace(const AtomicString& prefix, const AtomicString& localName);
void updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*);
@@ -439,6 +442,8 @@
OwnPtr<MediaQueryExp> m_floatingMediaQueryExp;
OwnPtr<Vector<OwnPtr<MediaQueryExp> > > m_floatingMediaQueryExpList;
+ OwnPtr<Vector<RefPtr<StyleKeyframe> > > m_floatingKeyframeVector;
+
Vector<OwnPtr<CSSParserSelector> > m_reusableSelectorVector;
Vector<OwnPtr<CSSParserSelector> > m_reusableRegionSelectorVector;