Implemet :lang() pseudo class support for the WebVTT ::cue pseudo element
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Feb 2013 21:00:26 +0000 (21:00 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Feb 2013 21:00:26 +0000 (21:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=105478

Patch by Dima Gorbik <dgorbik@apple.com> on 2013-02-04
Reviewed by Antti Koivisto.

Source/WebCore:

In WebVTT lang is preprocessed and stored in the lang attribute of the element,
so we access it instead of walking up the tree the way it is done in HTML.

Existing tests were modified to cover this case.

* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne):

LayoutTests:

* media/track/captions-webvtt/styling-lang.vtt:
* media/track/track-css-matching-lang-expected.txt:
* media/track/track-css-matching-lang.html:

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

LayoutTests/ChangeLog
LayoutTests/media/track/captions-webvtt/styling-lang.vtt
LayoutTests/media/track/track-css-matching-lang-expected.txt
LayoutTests/media/track/track-css-matching-lang.html
Source/WebCore/ChangeLog
Source/WebCore/css/SelectorChecker.cpp

index 477e6cf2a5eedae958e88dc67512f500b1f4bffa..cfe6b7696eb9d21a336a201f6df35910890993fc 100644 (file)
@@ -1,3 +1,14 @@
+2013-02-04  Dima Gorbik  <dgorbik@apple.com>
+
+        Implemet :lang() pseudo class support for the WebVTT ::cue pseudo element
+        https://bugs.webkit.org/show_bug.cgi?id=105478
+
+        Reviewed by Antti Koivisto.
+
+        * media/track/captions-webvtt/styling-lang.vtt:
+        * media/track/track-css-matching-lang-expected.txt:
+        * media/track/track-css-matching-lang.html:
+
 2013-02-04  Tom Sepez  <tsepez@chromiium.org>
 
         XSS Auditor bypass via svg tags and xlink:href
index 63eda96ef85ebc70c998170c8e656ebdbdc75292..e7d091a3613ce5e2cdf75251c19663ef060c7f2d 100644 (file)
@@ -1,5 +1,9 @@
 WEBVTT
 
 1
-00:00.000 --> 00:01.000
+00:00.000 --> 00:00.500
 <lang en><c>English<lang ru><c> Русский<lang en><c> English again</c></lang></c></lang></c></lang>
+
+2
+00:00.500 --> 00:01.000
+<lang en><i>English<lang ru><b> Русский<lang en><u> English again</u></lang></b></lang></i></lang>
index c2083d44a347eaa5e35eb032890a05d5b946cf6e..03578fc0f576ff72a9e7812b078a9fd3095d5324 100644 (file)
@@ -4,5 +4,11 @@ EVENT(seeked)
 EXPECTED (getComputedStyle(cueNode).color == 'rgb(0, 128, 0)') OK
 EXPECTED (getComputedStyle(cueNode).color == 'rgb(255, 0, 0)') OK
 EXPECTED (getComputedStyle(cueNode).color == 'rgb(0, 128, 0)') OK
+
+RUN(video.currentTime = 0.6)
+EVENT(seeked)
+EXPECTED (getComputedStyle(cueNode).color == 'rgb(128, 0, 128)') OK
+EXPECTED (getComputedStyle(cueNode).color == 'rgb(0, 255, 0)') OK
+EXPECTED (getComputedStyle(cueNode).color == 'rgb(128, 0, 128)') OK
 END OF TEST
 
index 85e84c941545ced1e69623725fe21493b3fdee84..fbee929d5012b7326f96dcdd574ada47d6bc98e6 100644 (file)
@@ -8,6 +8,8 @@
         <script src=../media-controls.js></script>
 
         <style>
+        ::cue(:lang(ru)) { color: lime; }
+        ::cue(:lang(en)) { color: purple; }
         ::cue(c[lang="ru"]) { color: red; }
         ::cue(c[lang="en"]) { color: green; }
         </style>
 
         var cueNode;
         var seekedCount = 0;
-        var seekTimes = [0.1];
+        var seekTimes = [0.1, 0.6];
 
-        var info = [["rgb(0, 128, 0)", "rgb(255, 0, 0)", "rgb(0, 128, 0)"]];
+        var info = [["rgb(0, 128, 0)", "rgb(255, 0, 0)", "rgb(0, 128, 0)"],
+                    ["rgb(128, 0, 128)", "rgb(0, 255, 0)", "rgb(128, 0, 128)"]];
 
         function seeked()
         {
index e219d7cfe9a6be8baa76067358f8cce082994f66..c9dc0c16e2e81ee1807c843bc6efed7240331646 100644 (file)
@@ -1,3 +1,18 @@
+2013-02-04  Dima Gorbik  <dgorbik@apple.com>
+
+        Implemet :lang() pseudo class support for the WebVTT ::cue pseudo element
+        https://bugs.webkit.org/show_bug.cgi?id=105478
+
+        Reviewed by Antti Koivisto.
+
+        In WebVTT lang is preprocessed and stored in the lang attribute of the element, 
+        so we access it instead of walking up the tree the way it is done in HTML.
+
+        Existing tests were modified to cover this case.
+
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::checkOne):
+
 2013-02-04  Tim Horton  <timothy_horton@apple.com>
 
         Disable autoscrolling the main frame if main frame scrolling is disabled
index fab704936542316c3e0ba876e7a88c60df77decb..3ca64dd4ddda636cbabeedcdf16d835311b204c0 100644 (file)
@@ -819,7 +819,13 @@ bool SelectorChecker::checkOne(const SelectorCheckingContext& context, const Sib
             break;
         case CSSSelector::PseudoLang:
             {
-                AtomicString value = element->computeInheritedLanguage();
+                AtomicString value;
+#if ENABLE(VIDEO_TRACK)
+                if (element->isWebVTTElement())
+                    value = element->getAttribute(langAttr);
+                else
+#endif
+                    value = element->computeInheritedLanguage();
                 const AtomicString& argument = selector->argument();
                 if (value.isEmpty() || !value.startsWith(argument, false))
                     break;