<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[180824] releases/WebKitGTK/webkit-2.8</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/180824">180824</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-28 02:56:57 -0800 (Sat, 28 Feb 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/180558">r180558</a> - Always serialize :lang()'s arguments to strings
https://bugs.webkit.org/show_bug.cgi?id=141944
Reviewed by Benjamin Poulain.
Source/WebCore:
As specified in [1] :lang()'s arguments are always serialized to strings.
[1] http://dev.w3.org/csswg/cssom/#serializing-selectors
Related tests are updated.
* css/CSSGrammar.y.in:
* css/CSSParserValues.cpp:
(WebCore::CSSParserSelector::setLangArgumentList):
* css/CSSParserValues.h:
(WebCore::CSSParserString::init):
(WebCore::CSSParserString::clear):
(WebCore::CSSParserString::tokenType): Deleted.
(WebCore::CSSParserString::setTokenType): Deleted.
* css/CSSSelector.cpp:
(WebCore::appendLangArgumentList):
(WebCore::CSSSelector::setLangArgumentList):
* css/CSSSelector.h:
(WebCore::CSSSelector::langArgumentList):
* css/SelectorCheckerTestFunctions.h:
(WebCore::matchesLangPseudoClass):
* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addPseudoClassType):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):
LayoutTests:
Some tests results are updated to reflect the always serialize
:lang()'s arguments to strings.
* fast/css/css-lang-selector-with-string-arguments-text-expected.txt:
* fast/css/css-lang-selector-with-string-arguments-text.html:
* fast/css/parsing-css-lang-expected.txt:
* fast/css/parsing-css-lang.html:
* fast/css/css-selector-text-expected.txt:
* fast/css/css-selector-text.html:
* fast/css/css-set-selector-text-expected.txt:
* fast/css/css-set-selector-text.html:
* fast/dom/css-selectorText-expected.txt:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortexthtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslangexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslanghtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastdomcssselectorTextexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSGrammaryin">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuescpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuesh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorcpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssSelectorCheckerTestFunctionsh">releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorecssjitSelectorCompilercpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit28LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2015-02-24 Dhi Aurrahman <diorahman@rockybars.com>
+
+ Always serialize :lang()'s arguments to strings
+ https://bugs.webkit.org/show_bug.cgi?id=141944
+
+ Reviewed by Benjamin Poulain.
+
+ Some tests results are updated to reflect the always serialize
+ :lang()'s arguments to strings.
+
+ * fast/css/css-lang-selector-with-string-arguments-text-expected.txt:
+ * fast/css/css-lang-selector-with-string-arguments-text.html:
+ * fast/css/parsing-css-lang-expected.txt:
+ * fast/css/parsing-css-lang.html:
+ * fast/css/css-selector-text-expected.txt:
+ * fast/css/css-selector-text.html:
+ * fast/css/css-set-selector-text-expected.txt:
+ * fast/css/css-set-selector-text.html:
+ * fast/dom/css-selectorText-expected.txt:
+
</ins><span class="cx"> 2015-02-23 Shivakumar JM <shiva.jm@samsung.com>
</span><span class="cx">
</span><span class="cx"> Default value of HTMLSelectElement size IDL attribute should be 0.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -4,18 +4,18 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> PASS parseThenSerializeRule(':lang("a") { }') is ':lang("a") { }'
</span><del>-PASS parseThenSerializeRule(':lang("bb", cc) { }') is ':lang("bb", cc) { }'
-PASS parseThenSerializeRule(':lang("ddd", eee) { }') is ':lang("ddd", eee) { }'
-PASS parseThenSerializeRule(':lang("ddd", eee, ffff) { }') is ':lang("ddd", eee, ffff) { }'
-PASS parseThenSerializeRule(':lang("ddd", eee, "ffff") { }') is ':lang("ddd", eee, "ffff") { }'
</del><ins>+PASS parseThenSerializeRule(':lang("bb", cc) { }') is ':lang("bb", "cc") { }'
+PASS parseThenSerializeRule(':lang("ddd", eee) { }') is ':lang("ddd", "eee") { }'
+PASS parseThenSerializeRule(':lang("ddd", eee, ffff) { }') is ':lang("ddd", "eee", "ffff") { }'
+PASS parseThenSerializeRule(':lang("ddd", eee, "ffff") { }') is ':lang("ddd", "eee", "ffff") { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang("*-1997") { }') is ':lang("*-1997") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-1997", "*-1998") { }') is ':lang("*-1997", "*-1998") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-1997", "*-1998", "*-1999") { }') is ':lang("*-1997", "*-1998", "*-1999") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("") { }') is ':lang("") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(foo, "bar", baz) { }') is ':lang(foo, "bar", baz) { }'
-PASS parseThenSerializeRule(':lang(foo, "bar" , baz) { }') is ':lang(foo, "bar", baz) { }'
-PASS parseThenSerializeRule(':lang( foo , "bar" , baz ) { }') is ':lang(foo, "bar", baz) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(foo, "bar", baz) { }') is ':lang("foo", "bar", "baz") { }'
+PASS parseThenSerializeRule(':lang(foo, "bar" , baz) { }') is ':lang("foo", "bar", "baz") { }'
+PASS parseThenSerializeRule(':lang( foo , "bar" , baz ) { }') is ':lang("foo", "bar", "baz") { }'
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsslangselectorwithstringargumentstexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,9 +23,32 @@
</span><span class="cx"> return styleElement.sheet.cssRules[0].cssText;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+function expectedSerializedSelector(selector)
+{
+ var args = /\(([^)]+)/.exec(selector);
+ if (!args[1])
+ return;
+
+ args = args[1].split(/\s*,\s*/);
+ var expected = ':lang(';
+ for (var i = 0; i < args.length; ++i) {
+ var arg = args[i];
+ var hasQuotes = arg.indexOf('"') == 0 && arg.lastIndexOf('"') == arg.length - 1;
+ if (!hasQuotes)
+ expected += '"';
+ expected += args[i];
+ if (!hasQuotes)
+ expected += '"';
+ if (i < args.length - 1)
+ expected += ', ';
+ }
+ expected += ')';
+ return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector)
</span><span class="cx"> {
</span><del>- shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + selector + " { }'");
</del><ins>+ shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + expectedSerializedSelector(selector) + " { }'");
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> testSelectorRoundTrip(':lang("a")');
</span><span class="lines">@@ -40,9 +63,9 @@
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(foo, \"bar\", baz) { }')", "':lang(foo, \"bar\", baz) { }'");
-shouldBe("parseThenSerializeRule(':lang(foo, \"bar\" , baz) { }')", "':lang(foo, \"bar\", baz) { }'");
-shouldBe("parseThenSerializeRule(':lang( foo , \"bar\" , baz ) { }')", "':lang(foo, \"bar\", baz) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(foo, \"bar\", baz) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'");
+shouldBe("parseThenSerializeRule(':lang(foo, \"bar\" , baz) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'");
+shouldBe("parseThenSerializeRule(':lang( foo , \"bar\" , baz ) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'");
</ins><span class="cx"> </script>
</span><span class="cx"> <script src="../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -58,20 +58,20 @@
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-ab-") { }') is ':lang("*-ab-") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-DE-1996") { }') is ':lang("*-DE-1996") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(a) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(fr, de, en, id) { }') is ':lang(fr, de, en, id) { }'
-PASS parseThenSerializeRule(':lang(fr, fr-ca, fr-be) { }') is ':lang(fr, fr-ca, fr-be) { }'
-PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }') is ':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-CH, it-CH, fr-CH, rm-CH) { }'
-PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a) { }') is ':lang("a") { }'
+PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang(fr, de, en, id) { }') is ':lang("fr", "de", "en", "id") { }'
+PASS parseThenSerializeRule(':lang(fr, fr-ca, fr-be) { }') is ':lang("fr", "fr-ca", "fr-be") { }'
+PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996) { }') is ':lang("de-DE", "de-DE-1996", "de-Latn-DE", "de-Latf-DE", "de-Latn-DE-1996") { }'
+PASS parseThenSerializeRule(':lang(de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang("de-CH", "it-CH", "fr-CH", "rm-CH") { }'
+PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang("de-DE", "de-DE-1996", "de-Latn-DE", "de-Latf-DE", "de-Latn-DE-1996", "de-CH", "it-CH", "fr-CH", "rm-CH") { }'
</ins><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(a, a, a) { }') is ':lang(a, a, a) { }'
-PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en-us, en-us, en-us) { }') is ':lang(en-us, en-us, en-us) { }'
-PASS parseThenSerializeRule(':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }') is ':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }') is ':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }'
-PASS parseThenSerializeRule(':lang(java, java, java) { }') is ':lang(java, java, java) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a, a, a) { }') is ':lang("a", "a", "a") { }'
+PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en-us, en-us, en-us) { }') is ':lang("en-us", "en-us", "en-us") { }'
+PASS parseThenSerializeRule(':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }') is ':lang("de-DE-1996", "de-DE-1996", "de-DE-1996") { }'
+PASS parseThenSerializeRule(':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }') is ':lang("de-Latn-DE-1996", "de-Latn-DE-1996", "de-Latn-DE-1996") { }'
+PASS parseThenSerializeRule(':lang(java, java, java) { }') is ':lang("java", "java", "java") { }'
</ins><span class="cx">
</span><span class="cx"> PASS parseThenSerializeRule(':not(a) { }') is ':not(a) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':-webkit-any(a, b, p) { }') is ':-webkit-any(a, b, p) { }'
</span><span class="lines">@@ -287,40 +287,40 @@
</span><span class="cx"> PASS parseThenSerializeRule(':not(a.class1.class2.class3:hover ) { }') is ':not(a.class1.class2.class3:hover) { }'
</span><span class="cx"> PASS parseThenSerializeRule(':not(:matches(single ),:matches(a,b ,p),:matches(#alice, #bob,#chris)) { }') is ':not(:matches(single), :matches(a, b, p), :matches(#alice, #bob, #chris)) { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(a ) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang( a) { }') is ':lang(a) { }'
-PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang( a, b ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang( a , b , c ) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang( a ,b,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang( a ,b ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang( a ,b ,c ) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b ,c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b, c) { }') is ':lang(a, b, c) { }'
-PASS parseThenSerializeRule(':lang(a,b, c ) { }') is ':lang(a, b, c) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(a ) { }') is ':lang("a") { }'
+PASS parseThenSerializeRule(':lang( a) { }') is ':lang("a") { }'
+PASS parseThenSerializeRule(':lang(a, b, c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang( a, b ,c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang( a , b , c ) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang( a ,b,c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang( a ,b ,c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang( a ,b ,c ) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang(a,b ,c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang(a,b, c) { }') is ':lang("a", "b", "c") { }'
+PASS parseThenSerializeRule(':lang(a,b, c ) { }') is ':lang("a", "b", "c") { }'
</ins><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,en,en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en,en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en, en,en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en, en,en ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang( en, en,en ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang( en, en, en) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang( en, en, en ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang( en , en , en ) { }') is ':lang(en, en, en) { }'
-PASS parseThenSerializeRule(':lang( en,en,en ) { }') is ':lang(en, en, en) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en,en,en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en,en, en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en, en,en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en, en,en ) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang( en, en,en ) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang( en, en, en) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang( en, en, en ) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang( en , en , en ) { }') is ':lang("en", "en", "en") { }'
+PASS parseThenSerializeRule(':lang( en,en,en ) { }') is ':lang("en", "en", "en") { }'
</ins><span class="cx">
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-DE", "*-CH", "*-EN") { }') is ':lang("*-DE", "*-CH", "*-EN") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-DE","*-CH","*-EN") { }') is ':lang("*-DE", "*-CH", "*-EN") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang( "*-DE" , "*-CH" , "*-EN" ) { }') is ':lang("*-DE", "*-CH", "*-EN") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang("*") { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang("*-\\*") { }') is ':lang("*-*") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-\\*-\\*") { }') is ':lang("*-*-*") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-\\*-\\*-\\*") { }') is ':lang("*-*-*-*") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(ab-\\*) { }') is ':lang(ab-*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(ab-\\*) { }') is ':lang("ab-*") { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang("*-ab-\\*") { }') is ':lang("*-ab-*") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-ab-\\*-") { }') is ':lang("*-ab-*-") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-foo-\\3A") { }') is ':lang("*-foo-:") { }'
</span><span class="lines">@@ -330,48 +330,48 @@
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-foo-\\0062 \\0061 r") { }') is ':lang("*-foo-bar") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-foo-col\\6Fr") { }') is ':lang("*-foo-color") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang("*") { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang("*-en" ) { }') is ':lang("*-en") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*" ) { }') is ':lang("*-en-*") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr" ) { }') is ':lang("*-en-*-fr") { }'
</span><del>-PASS parseThenSerializeRule(':lang("*-en-\\*-fr",br ) { }') is ':lang("*-en-*-fr", br) { }'
-PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", br) { }'
-PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", br) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", br) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", br) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br ) { }') is ':lang("*-en-*-fr", br) { }'
</del><ins>+PASS parseThenSerializeRule(':lang("*-en-\\*-fr",br ) { }') is ':lang("*-en-*-fr", "br") { }'
+PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", "br") { }'
+PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", "br") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", "br") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br ) { }') is ':lang("*-en-*-fr", "br") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br ) { }') is ':lang("*-en-*-fr", "br") { }'
</ins><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr","*-br-zh" ) { }') is ':lang("*-en-*-fr", "*-br-zh") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr", "*-br-zh" ) { }') is ':lang("*-en-*-fr", "*-br-zh") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr", "*-br-zh" ) { }') is ':lang("*-en-*-fr", "*-br-zh") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr", "*-br-zh" ) { }') is ':lang("*-en-*-fr", "*-br-zh") { }'
</span><span class="cx"> PASS parseThenSerializeRule(':lang("*-en-\\*-fr", "*-br-zh" ) { }') is ':lang("*-en-*-fr", "*-br-zh") { }'
</span><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang("*-en-\\*-fr",br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
-PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br-\\*-zh ) { }') is ':lang("*-en-*-fr", br-*-zh) { }'
</del><ins>+PASS parseThenSerializeRule(':lang("*-en-\\*-fr",br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang("*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr", br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
+PASS parseThenSerializeRule(':lang( "*-en-\\*-fr" , br-\\*-zh ) { }') is ':lang("*-en-*-fr", "br-*-zh") { }'
</ins><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang( \\*) { }') is ':lang(*) { }'
-PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang(*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(\\*) { }') is ':lang("*") { }'
+PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang("*") { }'
+PASS parseThenSerializeRule(':lang(\\* ) { }') is ':lang("*") { }'
+PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang("*") { }'
+PASS parseThenSerializeRule(':lang( \\*) { }') is ':lang("*") { }'
+PASS parseThenSerializeRule(':lang( \\* ) { }') is ':lang("*") { }'
</ins><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang( \\*,id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang( \\* ,id-\\*-sumatra) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }'
-PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang(*, id-*-sumatra) { }'
</del><ins>+PASS parseThenSerializeRule(':lang( \\*,id-\\*-sumatra ) { }') is ':lang("*", "id-*-sumatra") { }'
+PASS parseThenSerializeRule(':lang( \\* ,id-\\*-sumatra) { }') is ':lang("*", "id-*-sumatra") { }'
+PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang("*", "id-*-sumatra") { }'
+PASS parseThenSerializeRule(':lang( \\* , id-\\*-sumatra ) { }') is ':lang("*", "id-*-sumatra") { }'
</ins><span class="cx">
</span><del>-PASS parseThenSerializeRule(':lang(en-\\*) { }') is ':lang(en-*) { }'
-PASS parseThenSerializeRule(':lang(en-\\*, fr-\\*) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang(en-\\*, fr-\\* ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang( en-\\* , fr-\\* ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang( en-\\* ,fr-\\* ) { }') is ':lang(en-*, fr-*) { }'
-PASS parseThenSerializeRule(':lang( en-\\*,fr-\\* ) { }') is ':lang(en-*, fr-*) { }'
</del><ins>+PASS parseThenSerializeRule(':lang(en-\\*) { }') is ':lang("en-*") { }'
+PASS parseThenSerializeRule(':lang(en-\\*, fr-\\*) { }') is ':lang("en-*", "fr-*") { }'
+PASS parseThenSerializeRule(':lang(en-\\*, fr-\\* ) { }') is ':lang("en-*", "fr-*") { }'
+PASS parseThenSerializeRule(':lang( en-\\* , fr-\\* ) { }') is ':lang("en-*", "fr-*") { }'
+PASS parseThenSerializeRule(':lang( en-\\* ,fr-\\* ) { }') is ':lang("en-*", "fr-*") { }'
+PASS parseThenSerializeRule(':lang( en-\\*,fr-\\* ) { }') is ':lang("en-*", "fr-*") { }'
</ins><span class="cx">
</span><span class="cx"> PASS parseThenSerializeRule(':lang() { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
</span><span class="cx"> PASS parseThenSerializeRule(':lang(12, b, c) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscssselectortexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-selector-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,9 +23,33 @@
</span><span class="cx"> return styleElement.sheet.cssRules[0].cssText;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+function expectedSerializedLangSelector(selector)
+{
+ var args = /:lang\(([^)]+)/.exec(selector);
+ if (!args || !args[1])
+ return selector;
+
+ args = args[1].split(/\s*,\s*/);
+ var expected = ':lang(';
+ for (var i = 0; i < args.length; ++i) {
+ var arg = args[i];
+ var hasQuotes = arg.indexOf('"') == 0 && arg.lastIndexOf('"') == arg.length - 1;
+ if (!hasQuotes)
+ expected += '"';
+ expected += args[i];
+ if (!hasQuotes)
+ expected += '"';
+ if (i < args.length - 1)
+ expected += ', ';
+ }
+ expected += ')';
+ return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector)
</span><span class="cx"> {
</span><del>- shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + selector + " { }'");
</del><ins>+ var expected = selector.indexOf(":lang") == 0 ? expectedSerializedLangSelector(selector) : selector;
+ shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + expected + " { }'");
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> testSelectorRoundTrip('*');
</span><span class="lines">@@ -366,31 +390,31 @@
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(a ) { }')", "':lang(a) { }'");
-shouldBe("parseThenSerializeRule(':lang( a) { }')", "':lang(a) { }'");
-shouldBe("parseThenSerializeRule(':lang(a, b, c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang( a, b ,c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang( a , b , c ) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang( a ,b,c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang( a ,b ,c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang( a ,b ,c ) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang(a,b ,c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang(a,b, c) { }')", "':lang(a, b, c) { }'");
-shouldBe("parseThenSerializeRule(':lang(a,b, c ) { }')", "':lang(a, b, c) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(a ) { }')", "':lang(\"a\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a) { }')", "':lang(\"a\") { }'");
+shouldBe("parseThenSerializeRule(':lang(a, b, c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a, b ,c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a , b , c ) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a ,b,c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a ,b ,c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang( a ,b ,c ) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang(a,b ,c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang(a,b, c) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
+shouldBe("parseThenSerializeRule(':lang(a,b, c ) { }')", "':lang(\"a\", \"b\", \"c\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(en, en, en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang(en,en,en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang(en,en, en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang(en, en,en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang(en, en,en ) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang( en, en,en ) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang(en, en, en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang( en, en, en) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang( en, en, en ) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang( en , en , en ) { }')", "':lang(en, en, en) { }'");
-shouldBe("parseThenSerializeRule(':lang( en,en,en ) { }')", "':lang(en, en, en) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(en, en, en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en,en,en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en,en, en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en, en,en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en, en,en ) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en, en,en ) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en, en, en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en, en, en) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en, en, en ) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en , en , en ) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en,en,en ) { }')", "':lang(\"en\", \"en\", \"en\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><span class="lines">@@ -400,14 +424,14 @@
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(*) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(\"*\") { }'");
</ins><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-\\\\*\") { }')", "':lang(\"*-*\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-\\\\*-\\\\*\") { }')", "':lang(\"*-*-*\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-\\\\*-\\\\*-\\\\*\") { }')", "':lang(\"*-*-*-*\") { }'");
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(ab-\\\\*) { }')", "':lang(ab-*) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(ab-\\\\*) { }')", "':lang(\"ab-*\") { }'");
</ins><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-ab-\\\\*\") { }')", "':lang(\"*-ab-*\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-ab-\\\\*-\") { }')", "':lang(\"*-ab-*-\") { }'");
</span><span class="cx">
</span><span class="lines">@@ -421,16 +445,16 @@
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(\"*\") { }'");
</ins><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en\" ) { }')", "':lang(\"*-en\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*\" ) { }')", "':lang(\"*-en-*\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\" ) { }')", "':lang(\"*-en-*-fr\") { }'");
</span><del>-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\",br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br ) { }')", "':lang(\"*-en-*-fr\", br) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\",br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br ) { }')", "':lang(\"*-en-*-fr\", \"br\") { }'");
</ins><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\",\"*-br-zh\" ) { }')", "':lang(\"*-en-*-fr\", \"*-br-zh\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", \"*-br-zh\" ) { }')", "':lang(\"*-en-*-fr\", \"*-br-zh\") { }'");
</span><span class="cx"> shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", \"*-br-zh\" ) { }')", "':lang(\"*-en-*-fr\", \"*-br-zh\") { }'");
</span><span class="lines">@@ -439,38 +463,38 @@
</span><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\",br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
-shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", br-*-zh) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\",br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\", br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \"*-en-\\\\*-fr\" , br-\\\\*-zh ) { }')", "':lang(\"*-en-*-fr\", \"br-*-zh\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(*) { }'");
-shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'");
-shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(*) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(*) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\*) { }')", "':lang(*) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(*) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(\\\\*) { }')", "':lang(\"*\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(\"*\") { }'");
+shouldBe("parseThenSerializeRule(':lang(\\\\* ) { }')", "':lang(\"*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(\"*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\*) { }')", "':lang(\"*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\* ) { }')", "':lang(\"*\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang( \\\\*,id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\* ,id-\\\\*-sumatra) { }')", "':lang(*, id-*-sumatra) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'");
-shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(*, id-*-sumatra) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang( \\\\*,id-\\\\*-sumatra ) { }')", "':lang(\"*\", \"id-*-sumatra\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\* ,id-\\\\*-sumatra) { }')", "':lang(\"*\", \"id-*-sumatra\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(\"*\", \"id-*-sumatra\") { }'");
+shouldBe("parseThenSerializeRule(':lang( \\\\* , id-\\\\*-sumatra ) { }')", "':lang(\"*\", \"id-*-sumatra\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span><del>-shouldBe("parseThenSerializeRule(':lang(en-\\\\*) { }')", "':lang(en-*) { }'");
-shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\*) { }')", "':lang(en-*, fr-*) { }'");
-shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'");
-shouldBe("parseThenSerializeRule(':lang( en-\\\\* , fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'");
-shouldBe("parseThenSerializeRule(':lang( en-\\\\* ,fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'");
-shouldBe("parseThenSerializeRule(':lang( en-\\\\*,fr-\\\\* ) { }')", "':lang(en-*, fr-*) { }'");
</del><ins>+shouldBe("parseThenSerializeRule(':lang(en-\\\\*) { }')", "':lang(\"en-*\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\*) { }')", "':lang(\"en-*\", \"fr-*\") { }'");
+shouldBe("parseThenSerializeRule(':lang(en-\\\\*, fr-\\\\* ) { }')", "':lang(\"en-*\", \"fr-*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en-\\\\* , fr-\\\\* ) { }')", "':lang(\"en-*\", \"fr-*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en-\\\\* ,fr-\\\\* ) { }')", "':lang(\"en-*\", \"fr-*\") { }'");
+shouldBe("parseThenSerializeRule(':lang( en-\\\\*,fr-\\\\* ) { }')", "':lang(\"en-*\", \"fr-*\") { }'");
</ins><span class="cx">
</span><span class="cx"> debug('');
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -65,7 +65,8 @@
</span><span class="cx"> PASS setThenReadSelectorText(':visited') is ':visited'
</span><span class="cx">
</span><span class="cx"> PASS setThenReadSelectorText(':dir(a)') is ':dir(a)'
</span><del>-PASS setThenReadSelectorText(':lang(a)') is ':lang(a)'
</del><ins>+PASS setThenReadSelectorText(':lang("a")') is ':lang("a")'
+PASS setThenReadSelectorText(':lang(a)') is ':lang("a")'
</ins><span class="cx"> PASS setThenReadSelectorText(':not(a)') is ':not(a)'
</span><span class="cx"> PASS setThenReadSelectorText(':role(a)') is ':role(a)'
</span><span class="cx"> PASS setThenReadSelectorText(':-webkit-any(a, b, p)') is ':-webkit-any(a, b, p)'
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcsscsssetselectortexthtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/css-set-selector-text.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -28,9 +28,33 @@
</span><span class="cx"> return styleElement.sheet.cssRules[0].selectorText;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+function expectedSerializedLangSelector(selector)
+{
+ var args = /:lang\(([^)]+)/.exec(selector);
+ if (!args || !args[1])
+ return selector;
+
+ args = args[1].split(/\s*,\s*/);
+ var expected = ':lang(';
+ for (var i = 0; i < args.length; ++i) {
+ var arg = args[i];
+ var hasQuotes = arg.indexOf('"') == 0 && arg.lastIndexOf('"') == arg.length - 1;
+ if (!hasQuotes)
+ expected += '"';
+ expected += args[i];
+ if (!hasQuotes)
+ expected += '"';
+ if (i < args.length - 1)
+ expected += ', ';
+ }
+ expected += ')';
+ return expected;
+}
+
</ins><span class="cx"> function testSelectorRoundTrip(selector, expectFailure)
</span><span class="cx"> {
</span><del>- shouldBe("setThenReadSelectorText('" + selector + "')", "'" + (expectFailure ? bogusSelector : selector) + "'");
</del><ins>+ var expected = selector.indexOf(":lang") == 0 ? expectedSerializedLangSelector(selector) : selector;
+ shouldBe("setThenReadSelectorText('" + selector + "')", "'" + (expectFailure ? bogusSelector : expected) + "'");
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> testSelectorRoundTrip('', true);
</span><span class="lines">@@ -105,6 +129,7 @@
</span><span class="cx"> debug('');
</span><span class="cx">
</span><span class="cx"> testSelectorRoundTrip(":dir(a)");
</span><ins>+testSelectorRoundTrip(":lang(\"a\")");
</ins><span class="cx"> testSelectorRoundTrip(":lang(a)");
</span><span class="cx"> testSelectorRoundTrip(":not(a)");
</span><span class="cx"> testSelectorRoundTrip(":role(a)");
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslangexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -6,124 +6,124 @@
</span><span class="cx"> valid language ranges
</span><span class="cx"> PASS document.querySelector(':lang(e)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(e)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"e\")"
</ins><span class="cx"> PASS document.querySelector(':lang(e )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(e)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"e\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en--)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en--)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en--\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en--)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en--\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en---)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en--- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr-)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr-)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr-\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr-)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr-\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr--)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr--)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr--\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en-fr-- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en-fr--)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en-fr--\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en--fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en--fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en--fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en--fr )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en--fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en--fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---fr)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---fr\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr---)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---fr---)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---fr---\")"
</ins><span class="cx"> PASS document.querySelector(':lang(en---fr--- )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(en---fr---)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"en---fr---\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE-1996)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-DE-1996)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-DE-1996\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-DE-1996 )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-DE-1996)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-DE-1996\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latn-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latn-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latn-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latn-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latf-DE)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latf-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latf-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latf-DE )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latf-DE)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latf-DE\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE-1996)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latn-DE-1996)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latn-DE-1996\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-Latn-DE-1996 )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-Latn-DE-1996)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-Latn-DE-1996\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(de-CH )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(de-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"de-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(it-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(it-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"it-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(it-CH )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(it-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"it-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(fr-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(fr-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"fr-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(fr-CH )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(fr-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"fr-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(rm-CH)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(rm-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"rm-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang(rm-CH )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(rm-CH)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"rm-CH\")"
</ins><span class="cx"> PASS document.querySelector(':lang("*-CH")') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*-CH\")"
</span><span class="lines">@@ -144,10 +144,10 @@
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*-br-zh\")"
</span><span class="cx"> PASS document.querySelector(':lang(id-\\*-sumatra)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(id-*-sumatra)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"id-*-sumatra\")"
</ins><span class="cx"> PASS document.querySelector(':lang(id-\\*-sumatra )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(id-*-sumatra)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"id-*-sumatra\")"
</ins><span class="cx"> PASS document.querySelector(':lang("*-en-\\*-fr")') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*-en-*-fr\")"
</span><span class="lines">@@ -162,10 +162,10 @@
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*-en-*-*\")"
</span><span class="cx"> PASS document.querySelector(':lang(\\*)') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(*)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*\")"
</ins><span class="cx"> PASS document.querySelector(':lang(\\* )') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><del>-PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(*)"
</del><ins>+PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*\")"
</ins><span class="cx"> PASS document.querySelector(':lang("*-\\*")') did not throw exception.
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules.length is 1
</span><span class="cx"> PASS document.getElementById('style-container').sheet.cssRules[0].selectorText is ":lang(\"*-*\")"
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastcssparsingcsslanghtml"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/css/parsing-css-lang.html        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -18,7 +18,10 @@
</span><span class="cx"> shouldBe("document.getElementById('style-container').sheet.cssRules.length", "1");
</span><span class="cx"> if (!expectedSerializedLanguageRange)
</span><span class="cx"> expectedSerializedLanguageRange = languageRangeString;
</span><del>- shouldBeEqualToString("document.getElementById('style-container').sheet.cssRules[0].selectorText", ':lang(' + expectedSerializedLanguageRange.replace(/\\/g, '') + ')');
</del><ins>+ expectedSerializedLanguageRange = expectedSerializedLanguageRange.replace(/\\/g, '');
+ if (expectedSerializedLanguageRange.indexOf('"') != 0)
+ expectedSerializedLanguageRange = '"' + expectedSerializedLanguageRange + '"';
+ shouldBeEqualToString("document.getElementById('style-container').sheet.cssRules[0].selectorText", ':lang(' + expectedSerializedLanguageRange + ')');
</ins><span class="cx"> styleContainer.innerHTML = '';
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastdomcssselectorTextexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/css-selectorText-expected.txt        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx"> :active
</span><span class="cx"> :focus
</span><span class="cx"> :target
</span><del>-:lang(en)
</del><ins>+:lang("en")
</ins><span class="cx"> :not(table)
</span><span class="cx"> :root
</span><span class="cx"> :enabled
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-02-24 Dhi Aurrahman <diorahman@rockybars.com>
+
+ Always serialize :lang()'s arguments to strings
+ https://bugs.webkit.org/show_bug.cgi?id=141944
+
+ Reviewed by Benjamin Poulain.
+
+ As specified in [1] :lang()'s arguments are always serialized to strings.
+
+ [1] http://dev.w3.org/csswg/cssom/#serializing-selectors
+
+ Related tests are updated.
+
+ * css/CSSGrammar.y.in:
+ * css/CSSParserValues.cpp:
+ (WebCore::CSSParserSelector::setLangArgumentList):
+ * css/CSSParserValues.h:
+ (WebCore::CSSParserString::init):
+ (WebCore::CSSParserString::clear):
+ (WebCore::CSSParserString::tokenType): Deleted.
+ (WebCore::CSSParserString::setTokenType): Deleted.
+ * css/CSSSelector.cpp:
+ (WebCore::appendLangArgumentList):
+ (WebCore::CSSSelector::setLangArgumentList):
+ * css/CSSSelector.h:
+ (WebCore::CSSSelector::langArgumentList):
+ * css/SelectorCheckerTestFunctions.h:
+ (WebCore::matchesLangPseudoClass):
+ * cssjit/SelectorCompiler.cpp:
+ (WebCore::SelectorCompiler::addPseudoClassType):
+ (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):
+
</ins><span class="cx"> 2015-02-24 Antti Koivisto <antti@apple.com>
</span><span class="cx">
</span><span class="cx"> Give TemporaryChange for m_inLoadPendingImages assertion a name so it actually does something.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSGrammaryin"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSGrammar.y.in        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -1090,7 +1090,7 @@
</span><span class="cx"> ;
</span><span class="cx">
</span><span class="cx"> #if ENABLE_CSS_SELECTORS_LEVEL4
</span><del>-lang_range: IDENT | STRING { $$.setTokenType(TokenType::AtomicStringToken); } ;
</del><ins>+lang_range: IDENT | STRING ;
</ins><span class="cx">
</span><span class="cx"> comma_separated_lang_ranges:
</span><span class="cx"> lang_range %prec UNIMPORTANT_TOK {
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuescpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -266,14 +266,10 @@
</span><span class="cx"> void CSSParserSelector::setLangArgumentList(const Vector<CSSParserString>& stringVector)
</span><span class="cx"> {
</span><span class="cx"> ASSERT_WITH_MESSAGE(!stringVector.isEmpty(), "No CSS Selector takes an empty argument list.");
</span><del>- auto argumentList = std::make_unique<Vector<LanguageArgument>>();
</del><ins>+ auto argumentList = std::make_unique<Vector<AtomicString>>();
</ins><span class="cx"> argumentList->reserveInitialCapacity(stringVector.size());
</span><del>- for (const CSSParserString& string : stringVector) {
- LanguageArgument languageArgument;
- languageArgument.languageRange = string;
- languageArgument.tokenType = string.tokenType();
</del><ins>+ for (const AtomicString& languageArgument : stringVector)
</ins><span class="cx"> argumentList->append(languageArgument);
</span><del>- }
</del><span class="cx"> m_selector->setLangArgumentList(WTF::move(argumentList));
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSParserValuesh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSParserValues.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -38,9 +38,6 @@
</span><span class="cx"> m_data.characters8 = characters;
</span><span class="cx"> m_length = length;
</span><span class="cx"> m_is8Bit = true;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void init(UChar* characters, unsigned length)
</span><span class="lines">@@ -48,9 +45,6 @@
</span><span class="cx"> m_data.characters16 = characters;
</span><span class="cx"> m_length = length;
</span><span class="cx"> m_is8Bit = false;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void init(const String& string)
</span><span class="lines">@@ -63,9 +57,6 @@
</span><span class="cx"> m_data.characters16 = const_cast<UChar*>(string.characters16());
</span><span class="cx"> m_is8Bit = false;
</span><span class="cx"> }
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void clear()
</span><span class="lines">@@ -73,9 +64,6 @@
</span><span class="cx"> m_data.characters8 = 0;
</span><span class="cx"> m_length = 0;
</span><span class="cx"> m_is8Bit = true;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- m_tokenType = TokenType::IdentifierToken;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool is8Bit() const { return m_is8Bit; }
</span><span class="lines">@@ -87,11 +75,6 @@
</span><span class="cx"> unsigned length() const { return m_length; }
</span><span class="cx"> void setLength(unsigned length) { m_length = length; }
</span><span class="cx">
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- TokenType tokenType() const { return m_tokenType; }
- void setTokenType(TokenType tokenType) { m_tokenType = tokenType; }
-#endif
-
</del><span class="cx"> void lower();
</span><span class="cx">
</span><span class="cx"> UChar operator[](unsigned i) const
</span><span class="lines">@@ -118,9 +101,6 @@
</span><span class="cx"> } m_data;
</span><span class="cx"> unsigned m_length;
</span><span class="cx"> bool m_is8Bit;
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- TokenType m_tokenType;
-#endif
</del><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> struct CSSParserFunction;
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -373,17 +373,13 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-static void appendLangArgumentList(StringBuilder& str, const Vector<LanguageArgument>& argumentList)
</del><ins>+static void appendLangArgumentList(StringBuilder& str, const Vector<AtomicString>& argumentList)
</ins><span class="cx"> {
</span><span class="cx"> unsigned argumentListSize = argumentList.size();
</span><span class="cx"> for (unsigned i = 0; i < argumentListSize; ++i) {
</span><del>- const LanguageArgument& argument = argumentList[i];
- bool isAtomicStringToken = argument.tokenType == TokenType::AtomicStringToken;
- if (isAtomicStringToken)
- str.append('"');
- str.append(argument.languageRange);
- if (isAtomicStringToken)
- str.append('"');
</del><ins>+ str.append('"');
+ str.append(argumentList[i]);
+ str.append('"');
</ins><span class="cx"> if (i != argumentListSize - 1)
</span><span class="cx"> str.appendLiteral(", ");
</span><span class="cx"> }
</span><span class="lines">@@ -746,7 +742,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>-void CSSSelector::setLangArgumentList(std::unique_ptr<Vector<LanguageArgument>> argumentList)
</del><ins>+void CSSSelector::setLangArgumentList(std::unique_ptr<Vector<AtomicString>> argumentList)
</ins><span class="cx"> {
</span><span class="cx"> createRareData();
</span><span class="cx"> m_data.m_rareData->m_langArgumentList = WTF::move(argumentList);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssCSSSelectorh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/CSSSelector.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -29,17 +29,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> class CSSSelectorList;
</span><span class="cx">
</span><del>-#if ENABLE(CSS_SELECTORS_LEVEL4)
- enum class TokenType {
- IdentifierToken = 0,
- AtomicStringToken
- };
-
- struct LanguageArgument {
- AtomicString languageRange;
- TokenType tokenType;
- };
-#endif
</del><span class="cx"> enum class SelectorSpecificityIncrement {
</span><span class="cx"> ClassA = 0x10000,
</span><span class="cx"> ClassB = 0x100,
</span><span class="lines">@@ -236,7 +225,7 @@
</span><span class="cx"> const AtomicString& argument() const { return m_hasRareData ? m_data.m_rareData->m_argument : nullAtom; }
</span><span class="cx"> bool attributeValueMatchingIsCaseInsensitive() const;
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>- const Vector<LanguageArgument>* langArgumentList() const { return m_hasRareData ? m_data.m_rareData->m_langArgumentList.get() : nullptr; }
</del><ins>+ const Vector<AtomicString>* langArgumentList() const { return m_hasRareData ? m_data.m_rareData->m_langArgumentList.get() : nullptr; }
</ins><span class="cx"> #endif
</span><span class="cx"> const CSSSelectorList* selectorList() const { return m_hasRareData ? m_data.m_rareData->m_selectorList.get() : nullptr; }
</span><span class="cx">
</span><span class="lines">@@ -245,7 +234,7 @@
</span><span class="cx"> void setArgument(const AtomicString&);
</span><span class="cx"> void setAttributeValueMatchingIsCaseInsensitive(bool);
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>- void setLangArgumentList(std::unique_ptr<Vector<LanguageArgument>>);
</del><ins>+ void setLangArgumentList(std::unique_ptr<Vector<AtomicString>>);
</ins><span class="cx"> #endif
</span><span class="cx"> void setSelectorList(std::unique_ptr<CSSSelectorList>);
</span><span class="cx">
</span><span class="lines">@@ -354,7 +343,7 @@
</span><span class="cx"> AtomicString m_attributeCanonicalLocalName;
</span><span class="cx"> AtomicString m_argument; // Used for :contains and :nth-*
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>- std::unique_ptr<Vector<LanguageArgument>> m_langArgumentList;
</del><ins>+ std::unique_ptr<Vector<AtomicString>> m_langArgumentList;
</ins><span class="cx"> #endif
</span><span class="cx"> std::unique_ptr<CSSSelectorList> m_selectorList; // Used for :-webkit-any and :not
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssSelectorCheckerTestFunctionsh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/css/SelectorCheckerTestFunctions.h        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -162,7 +162,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-ALWAYS_INLINE bool matchesLangPseudoClass(const Element* element, const Vector<LanguageArgument>& argumentList)
</del><ins>+ALWAYS_INLINE bool matchesLangPseudoClass(const Element* element, const Vector<AtomicString>& argumentList)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(element);
</span><span class="cx">
</span><span class="lines">@@ -181,8 +181,7 @@
</span><span class="cx"> // as specified in www.ietf.org/rfc/rfc4647.txt.
</span><span class="cx"> StringView languageStringView = language.string();
</span><span class="cx"> unsigned languageLength = language.length();
</span><del>- for (const LanguageArgument& argument : argumentList) {
- const AtomicString& range = argument.languageRange;
</del><ins>+ for (const AtomicString& range : argumentList) {
</ins><span class="cx"> if (range.isEmpty())
</span><span class="cx"> continue;
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorecssjitSelectorCompilercpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp (180823 => 180824)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp        2015-02-28 10:51:58 UTC (rev 180823)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/cssjit/SelectorCompiler.cpp        2015-02-28 10:56:57 UTC (rev 180824)
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx"> const CSSSelector* tagNameSelector = nullptr;
</span><span class="cx"> const AtomicString* id = nullptr;
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>- Vector<const Vector<LanguageArgument>*> languageArgumentsList;
</del><ins>+ Vector<const Vector<AtomicString>*> languageArgumentsList;
</ins><span class="cx"> #else
</span><span class="cx"> const AtomicString* langFilter = nullptr;
</span><span class="cx"> #endif
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx"> void generateElementIsHovered(Assembler::JumpList& failureCases, const SelectorFragment&);
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><span class="cx"> void generateElementIsInLanguage(Assembler::JumpList& failureCases, const SelectorFragment&);
</span><del>- void generateElementIsInLanguage(Assembler::JumpList& failureCases, const Vector<LanguageArgument>*);
</del><ins>+ void generateElementIsInLanguage(Assembler::JumpList& failureCases, const Vector<AtomicString>*);
</ins><span class="cx"> #else
</span><span class="cx"> void generateElementIsInLanguage(Assembler::JumpList& failureCases, const AtomicString&);
</span><span class="cx"> #endif
</span><span class="lines">@@ -765,7 +765,7 @@
</span><span class="cx"> case CSSSelector::PseudoClassLang:
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><del>- const Vector<LanguageArgument>* selectorLangArgumentList = selector.langArgumentList();
</del><ins>+ const Vector<AtomicString>* selectorLangArgumentList = selector.langArgumentList();
</ins><span class="cx"> ASSERT(selectorLangArgumentList && !selectorLangArgumentList->isEmpty());
</span><span class="cx"> fragment.languageArgumentsList.append(selectorLangArgumentList);
</span><span class="cx"> return FunctionType::SimpleSelectorChecker;
</span><span class="lines">@@ -3233,11 +3233,11 @@
</span><span class="cx"> #if ENABLE(CSS_SELECTORS_LEVEL4)
</span><span class="cx"> void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList& failureCases, const SelectorFragment& fragment)
</span><span class="cx"> {
</span><del>- for (const Vector<LanguageArgument>* languageArguments : fragment.languageArgumentsList)
</del><ins>+ for (const Vector<AtomicString>* languageArguments : fragment.languageArgumentsList)
</ins><span class="cx"> generateElementIsInLanguage(failureCases, languageArguments);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList& failureCases, const Vector<LanguageArgument>* languageArguments)
</del><ins>+void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList& failureCases, const Vector<AtomicString>* languageArguments)
</ins><span class="cx"> {
</span><span class="cx"> LocalRegisterWithPreference langRangeRegister(m_registerAllocator, JSC::GPRInfo::argumentGPR1);
</span><span class="cx"> m_assembler.move(Assembler::TrustedImmPtr(languageArguments), langRangeRegister);
</span></span></pre>
</div>
</div>
</body>
</html>