Title: [121531] trunk
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;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to