Fix a bunch of mistakes in the parsing of ::cue( and ::cue
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 00:31:18 +0000 (00:31 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 00:31:18 +0000 (00:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=130113

Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-03-13
Reviewed by Andreas Kling.

* css/CSSGrammar.y.in:
* css/CSSParserValues.cpp:
(WebCore::CSSParserSelector::setPseudoTypeValue):
The ::cue() pseudo element "function" was passed as a PseudoClass.
The type was then parsed and considered as a compatibility type to flip
the match type back to PseudoElement.

Instead of all that jazz, just pass the right type from the grammar.

* css/CSSSelector.cpp:
(WebCore::CSSSelector::parsePseudoType):
The non-function ::cue pseudo element use shadow pseudo ID for matching the element.
Since it is unprefixed, it needs to map to one of the Custom types. The previous code
was using String::startsWith() for some reason, change that to a simple equality.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@165579 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/CSSGrammar.y.in
Source/WebCore/css/CSSParserValues.cpp
Source/WebCore/css/CSSSelector.cpp

index 556094e..4884e66 100644 (file)
@@ -1,3 +1,25 @@
+2014-03-13  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix a bunch of mistakes in the parsing of ::cue( and ::cue
+        https://bugs.webkit.org/show_bug.cgi?id=130113
+
+        Reviewed by Andreas Kling.
+
+        * css/CSSGrammar.y.in:
+        * css/CSSParserValues.cpp:
+        (WebCore::CSSParserSelector::setPseudoTypeValue):
+        The ::cue() pseudo element "function" was passed as a PseudoClass.
+        The type was then parsed and considered as a compatibility type to flip
+        the match type back to PseudoElement.
+
+        Instead of all that jazz, just pass the right type from the grammar.
+
+        * css/CSSSelector.cpp:
+        (WebCore::CSSSelector::parsePseudoType):
+        The non-function ::cue pseudo element use shadow pseudo ID for matching the element.
+        Since it is unprefixed, it needs to map to one of the Custom types. The previous code
+        was using String::startsWith() for some reason, change that to a simple equality.
+
 2014-03-13  Benjamin Poulain  <benjamin@webkit.org>
 
         Clean up RenderStyle creation
index 17ca9c4..91b5356 100644 (file)
@@ -1198,11 +1198,11 @@ pseudo:
         $$ = nullptr;
         if ($5) {
             auto selector = std::make_unique<CSSParserSelector>();
-            selector->setMatch(CSSSelector::PseudoClass);
+            selector->setMatch(CSSSelector::PseudoElement);
             selector->adoptSelectorVector(*std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>($5));
             selector->setPseudoTypeValue($3);
-            if (selector->pseudoType() == CSSSelector::PseudoCue)
-                $$ = selector.release();
+            ASSERT(selector->pseudoType() == CSSSelector::PseudoCue);
+            $$ = selector.release();
         }
     }
 #endif
index f2d7244..52df3f3 100644 (file)
@@ -208,13 +208,13 @@ void CSSParserSelector::setPseudoTypeValue(const CSSParserString& pseudoTypeStri
     switch (pseudoType) {
     case CSSSelector::PseudoAfter:
     case CSSSelector::PseudoBefore:
-#if ENABLE(VIDEO_TRACK)
-    case CSSSelector::PseudoCue:
-#endif
     case CSSSelector::PseudoFirstLetter:
     case CSSSelector::PseudoFirstLine:
         compat = true;
         FALLTHROUGH;
+#if ENABLE(VIDEO_TRACK)
+    case CSSSelector::PseudoCue:
+#endif
     case CSSSelector::PseudoResizer:
     case CSSSelector::PseudoScrollbar:
     case CSSSelector::PseudoScrollbarCorner:
index 8748b46..48ce681 100644 (file)
@@ -259,8 +259,10 @@ CSSSelector::PseudoType CSSSelector::parsePseudoType(const String& name)
         if (name.startsWith("-webkit-"))
             type = PseudoWebKitCustomElement;
 
-        // FIXME: This is strange. Why would all strings that start with "cue" be "user agent custom"?
-        if (name.startsWith("x-") || name.startsWith("cue"))
+        if (name == "cue")
+            type = PseudoWebKitCustomElement;
+
+        if (name.startsWith("x-"))
             type = PseudoUserAgentCustomElement;
     }
     return type;