Title: [194114] trunk
Revision
194114
Author
mmaxfi...@apple.com
Date
2015-12-15 13:55:34 -0800 (Tue, 15 Dec 2015)

Log Message

[Font Features] TrueType fonts trigger real features even when synthesis is applied
https://bugs.webkit.org/show_bug.cgi?id=152287

Reviewed by Darin Adler.

Source/WebCore:

When using a font feature that is synthesizable, and synthesis is triggered,
we should make sure to turn off the original font feature. Otherwise, the
feature will be applied twice on top of itself.

This worked for OpenType fonts, but not for TrueType fonts.

Tests: css3/font-variant-petite-caps-synthesis.html
       css3/font-variant-small-caps-synthesis.html
       css3/font-variant-petite-caps-synthesis-coverage.html
       css3/font-variant-small-caps-synthesis-coverage.html

* platform/graphics/cocoa/FontCocoa.mm:
(WebCore::defaultSelectorForTrueTypeFeature):
(WebCore::removedFeature):
(WebCore::createCTFontWithoutSynthesizableFeatures):

LayoutTests:

Adding tests.

* css3/font-variant-petite-caps-synthesis-expected.html:
* css3/font-variant-petite-caps-synthesis.html:
* css3/font-variant-small-caps-synthesis-expected.html:
* css3/font-variant-small-caps-synthesis.html:
* css3/font-variant-petite-caps-synthesis-coverage-expected.html:
* css3/font-variant-petite-caps-synthesis-coverage.html:
* css3/font-variant-small-caps-synthesis-coverage-expected.html:
* css3/font-variant-small-caps-synthesis-coverage.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (194113 => 194114)


--- trunk/LayoutTests/ChangeLog	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/ChangeLog	2015-12-15 21:55:34 UTC (rev 194114)
@@ -1,3 +1,21 @@
+2015-12-15  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        [Font Features] TrueType fonts trigger real features even when synthesis is applied
+        https://bugs.webkit.org/show_bug.cgi?id=152287
+
+        Reviewed by Darin Adler.
+
+        Adding tests.
+
+        * css3/font-variant-petite-caps-synthesis-expected.html:
+        * css3/font-variant-petite-caps-synthesis.html:
+        * css3/font-variant-small-caps-synthesis-expected.html:
+        * css3/font-variant-small-caps-synthesis.html:
+        * css3/font-variant-petite-caps-synthesis-coverage-expected.html:
+        * css3/font-variant-petite-caps-synthesis-coverage.html:
+        * css3/font-variant-small-caps-synthesis-coverage-expected.html:
+        * css3/font-variant-small-caps-synthesis-coverage.html:
+
 2015-12-15  Mark Lam  <mark....@apple.com>
 
         Polymorphic operand types for DFG and FTL bit operators.

Modified: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -41,6 +41,23 @@
 <div class="test">AB</div>
 <div class="test">BA</div>
 </div>
+<div style="font-family: testfont; border: solid black 1px; margin: 5px;">
+<div class="test">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span>B</div>
+<div class="test">B<span style="font-size: 14px;">A</span></div>
+<div class="test">AA</div>
+<div class="test">AA</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span>K</div>
+<div class="test">K<span style="font-size: 14px;">A</span></div>
+<div class="test">AB</div>
+<div class="test">BA</div>
+</div>
 <div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test">A</div>
@@ -54,6 +71,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
 <div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+</div>
 </body>
 </html>

Modified: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -7,6 +7,12 @@
     font-family: "testfontotf";
     src: url("resources/FontWithFeatures.otf") format("opentype");
 }
+@font-face {
+    /* Truetype. "S" responds to smcp; "V" responds to c2sc */
+    /* Truetype. "T" responds to smcp; "W" responds to c2sc */
+    font-family: "testfontttf";
+    src: url("resources/FontWithFeatures.ttf") format("truetype");
+}
 .test {
     font-size: 20px;
     display: inline-block;
@@ -42,6 +48,23 @@
 <div class="test" style="font-variant-caps: petite-caps;">AM</div>
 <div class="test" style="font-variant-caps: petite-caps;">MA</div>
 </div>
+<div style="font-family: testfontttf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">T</div>
+<div class="test">W</div>
+<div class="test" style="font-variant-caps: petite-caps;">a</div>
+<div class="test" style="font-variant-caps: petite-caps;">T</div>
+<div class="test" style="font-variant-caps: petite-caps;">aT</div>
+<div class="test" style="font-variant-caps: petite-caps;">Ta</div>
+<div class="test" style="font-variant-caps: petite-caps;">AT</div>
+<div class="test" style="font-variant-caps: petite-caps;">TA</div>
+<div class="test" style="font-variant-caps: petite-caps;">W</div>
+<div class="test" style="font-variant-caps: petite-caps;">aW</div>
+<div class="test" style="font-variant-caps: petite-caps;">Wa</div>
+<div class="test" style="font-variant-caps: petite-caps;">AW</div>
+<div class="test" style="font-variant-caps: petite-caps;">WA</div>
+</div>
 <div style="font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-petite-caps;">a</div>
 <div class="test" style="font-variant-caps: all-petite-caps;">L</div>
@@ -55,6 +78,19 @@
 <div class="test" style="font-variant-caps: all-petite-caps;">AM</div>
 <div class="test" style="font-variant-caps: all-petite-caps;">MA</div>
 </div>
+<div style="font-family: testfontttf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-petite-caps;">a</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">T</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">aT</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">Ta</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">AT</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">TA</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">W</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">aW</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">Wa</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">AW</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">WA</div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -41,6 +41,23 @@
 <div class="test">AB</div>
 <div class="test">BA</div>
 </div>
+<div style="font-family: testfont; border: solid black 1px; margin: 5px;">
+<div class="test">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span>B</div>
+<div class="test">B<span style="font-size: 14px;">A</span></div>
+<div class="test">AA</div>
+<div class="test">AA</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span>K</div>
+<div class="test">K<span style="font-size: 14px;">A</span></div>
+<div class="test">AB</div>
+<div class="test">BA</div>
+</div>
 <div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">B</span></div>
@@ -54,6 +71,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
 <div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -7,6 +7,12 @@
     font-family: "testfontotf";
     src: url("resources/FontWithFeatures.otf") format("opentype");
 }
+@font-face {
+    /* Truetype. "S" responds to smcp; "V" responds to c2sc */
+    /* Truetype. "T" responds to smcp; "W" responds to c2sc */
+    font-family: "testfontttf";
+    src: url("resources/FontWithFeatures.ttf") format("truetype");
+}
 .test {
     font-size: 20px;
     display: inline-block;
@@ -42,6 +48,23 @@
 <div class="test" style="font-variant-caps: petite-caps;">AM</div>
 <div class="test" style="font-variant-caps: petite-caps;">MA</div>
 </div>
+<div style="font-family: testfontttf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">T</div>
+<div class="test">W</div>
+<div class="test" style="font-variant-caps: petite-caps;">a</div>
+<div class="test" style="font-variant-caps: petite-caps;">T</div>
+<div class="test" style="font-variant-caps: petite-caps;">aT</div>
+<div class="test" style="font-variant-caps: petite-caps;">Ta</div>
+<div class="test" style="font-variant-caps: petite-caps;">AT</div>
+<div class="test" style="font-variant-caps: petite-caps;">TA</div>
+<div class="test" style="font-variant-caps: petite-caps;">W</div>
+<div class="test" style="font-variant-caps: petite-caps;">aW</div>
+<div class="test" style="font-variant-caps: petite-caps;">Wa</div>
+<div class="test" style="font-variant-caps: petite-caps;">AW</div>
+<div class="test" style="font-variant-caps: petite-caps;">WA</div>
+</div>
 <div style="font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-petite-caps;">a</div>
 <div class="test" style="font-variant-caps: all-petite-caps;">L</div>
@@ -55,6 +78,19 @@
 <div class="test" style="font-variant-caps: all-petite-caps;">AM</div>
 <div class="test" style="font-variant-caps: all-petite-caps;">MA</div>
 </div>
+<div style="font-family: testfontttf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-petite-caps;">a</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">T</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">aT</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">Ta</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">AT</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">TA</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">W</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">aW</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">Wa</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">AW</div>
+<div class="test" style="font-variant-caps: all-petite-caps;">WA</div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -41,6 +41,23 @@
 <div class="test">AB</div>
 <div class="test">BA</div>
 </div>
+<div style="font-family: testfont; border: solid black 1px; margin: 5px;">
+<div class="test">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span>B</div>
+<div class="test">B<span style="font-size: 14px;">A</span></div>
+<div class="test">AA</div>
+<div class="test">AA</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span>K</div>
+<div class="test">K<span style="font-size: 14px;">A</span></div>
+<div class="test">AB</div>
+<div class="test">BA</div>
+</div>
 <div style="font-family: testfont; border: solid red 1px; margin: 5px;">
 <div class="test"style="">AB</div>
 <div class="test">B</div>
@@ -60,6 +77,25 @@
 <div class="test">A<span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">A</span>A</div>
 </div>
+<div style="font-family: testfont; border: solid red 1px; margin: 5px;">
+<div class="test"style="">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">A</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test">AA</div>
+<div class="test">AA</div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A<span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span>A</div>
+</div>
 <div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test">A</div>
@@ -73,6 +109,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
 <div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+</div>
 <div style="font-family: testfont; border: solid green 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test">A</div>
@@ -86,6 +135,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid green 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+</div>
 </body>
 </html>

Modified: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -9,10 +9,20 @@
     src: url("resources/FontWithFeatures.otf") format("opentype");
 }
 @font-face {
+    /* Truetype. "S" responds to smcp; "V" responds to c2sc */
+    font-family: "testfontttf";
+    src: url("resources/FontWithFeatures.ttf") format("truetype");
+}
+@font-face {
     /* Opentype. "f" responds to smcp; "g" responds to c2sc */
     font-family: "testfontlowercasesmallcapsotf";
     src: url("resources/FontWithFeaturesLowercaseSmallCaps.otf") format("opentype");
 }
+@font-face {
+    /* Truetype. "r" responds to smcp; "u" responds to c2sc */
+    font-family: "testfontlowercasesmallcapsttf";
+    src: url("resources/FontWithFeaturesLowercaseSmallCaps.ttf") format("truetype");
+}
 .test {
     font-size: 20px;
     display: inline-block;
@@ -48,6 +58,23 @@
 <div class="test" style="font-variant-caps: small-caps;">AK</div>
 <div class="test" style="font-variant-caps: small-caps;">KA</div>
 </div>
+<div style="font-family: testfontttf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">S</div>
+<div class="test">V</div>
+<div class="test" style="font-variant-caps: small-caps;">a</div>
+<div class="test" style="font-variant-caps: small-caps;">S</div>
+<div class="test" style="font-variant-caps: small-caps;">aS</div>
+<div class="test" style="font-variant-caps: small-caps;">Sa</div>
+<div class="test" style="font-variant-caps: small-caps;">AS</div>
+<div class="test" style="font-variant-caps: small-caps;">SA</div>
+<div class="test" style="font-variant-caps: small-caps;">V</div>
+<div class="test" style="font-variant-caps: small-caps;">aV</div>
+<div class="test" style="font-variant-caps: small-caps;">Va</div>
+<div class="test" style="font-variant-caps: small-caps;">AV</div>
+<div class="test" style="font-variant-caps: small-caps;">VA</div>
+</div>
 <div style="font-family: testfontlowercasesmallcapsotf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test">AB</div>
 <div class="test">a</div>
@@ -67,6 +94,25 @@
 <div class="test" style="font-variant-caps: small-caps;">Ag</div>
 <div class="test" style="font-variant-caps: small-caps;">gA</div>
 </div>
+<div style="font-family: testfontlowercasesmallcapsttf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">r</div>
+<div class="test">u</div>
+<div class="test">R</div>
+<div class="test">U</div>
+<div class="test" style="font-variant-caps: small-caps;">a</div>
+<div class="test" style="font-variant-caps: small-caps;">r</div>
+<div class="test" style="font-variant-caps: small-caps;">ar</div>
+<div class="test" style="font-variant-caps: small-caps;">ra</div>
+<div class="test" style="font-variant-caps: small-caps;">Ar</div>
+<div class="test" style="font-variant-caps: small-caps;">rA</div>
+<div class="test" style="font-variant-caps: small-caps;">u</div>
+<div class="test" style="font-variant-caps: small-caps;">au</div>
+<div class="test" style="font-variant-caps: small-caps;">ua</div>
+<div class="test" style="font-variant-caps: small-caps;">Au</div>
+<div class="test" style="font-variant-caps: small-caps;">uA</div>
+</div>
 <div style="font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-small-caps;">a</div>
 <div class="test" style="font-variant-caps: all-small-caps;">J</div>
@@ -80,6 +126,19 @@
 <div class="test" style="font-variant-caps: all-small-caps;">AK</div>
 <div class="test" style="font-variant-caps: all-small-caps;">KA</div>
 </div>
+<div style="font-family: testfontttf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-small-caps;">a</div>
+<div class="test" style="font-variant-caps: all-small-caps;">S</div>
+<div class="test" style="font-variant-caps: all-small-caps;">aS</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Sa</div>
+<div class="test" style="font-variant-caps: all-small-caps;">AS</div>
+<div class="test" style="font-variant-caps: all-small-caps;">SA</div>
+<div class="test" style="font-variant-caps: all-small-caps;">V</div>
+<div class="test" style="font-variant-caps: all-small-caps;">aV</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Va</div>
+<div class="test" style="font-variant-caps: all-small-caps;">AV</div>
+<div class="test" style="font-variant-caps: all-small-caps;">VA</div>
+</div>
 <div style="font-family: testfontlowercasesmallcapsotf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-small-caps;">a</div>
 <div class="test" style="font-variant-caps: all-small-caps;">f</div>
@@ -91,8 +150,21 @@
 <div class="test" style="font-variant-caps: all-small-caps;">ag</div>
 <div class="test" style="font-variant-caps: all-small-caps;">ga</div>
 <div class="test" style="font-variant-caps: all-small-caps;">Ag</div>
-<div class="test" style="font-variant-caps: all-small-caps;">gA</div
+<div class="test" style="font-variant-caps: all-small-caps;">gA</div>
 </div>
+<div style="font-family: testfontlowercasesmallcapsttf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-small-caps;">a</div>
+<div class="test" style="font-variant-caps: all-small-caps;">r</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ar</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ra</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Ar</div>
+<div class="test" style="font-variant-caps: all-small-caps;">rA</div>
+<div class="test" style="font-variant-caps: all-small-caps;">u</div>
+<div class="test" style="font-variant-caps: all-small-caps;">au</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ua</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Au</div>
+<div class="test" style="font-variant-caps: all-small-caps;">uA</div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -41,6 +41,23 @@
 <div class="test">AB</div>
 <div class="test">BA</div>
 </div>
+<div style="font-family: testfont; border: solid black 1px; margin: 5px;">
+<div class="test">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test">A</div>
+<div class="test"><span style="font-size: 14px;">A</span>B</div>
+<div class="test">B<span style="font-size: 14px;">A</span></div>
+<div class="test">AA</div>
+<div class="test">AA</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span>K</div>
+<div class="test">K<span style="font-size: 14px;">A</span></div>
+<div class="test">AB</div>
+<div class="test">BA</div>
+</div>
 <div style="font-family: testfont; border: solid red 1px; margin: 5px;">
 <div class="test"style="">AB</div>
 <div class="test">B</div>
@@ -60,6 +77,25 @@
 <div class="test">A<span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">A</span>A</div>
 </div>
+<div style="font-family: testfont; border: solid red 1px; margin: 5px;">
+<div class="test"style="">AB</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">B</div>
+<div class="test">A</div>
+<div class="test">B</div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A<span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span>A</div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test">A<span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span>A</div>
+</div>
 <div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">B</span></div>
@@ -73,6 +109,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
 <div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid blue 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+</div>
 <div style="font-family: testfont; border: solid green 1px; margin: 5px;">
 <div class="test"><span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">B</span></div>
@@ -86,6 +135,19 @@
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
 <div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
 </div>
+<div style="font-family: testfont; border: solid green 1px; margin: 5px;">
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
+<div class="test"><span style="font-size: 14px;">A</span><span style="font-size: 14px;">B</span></div>
+<div class="test"><span style="font-size: 14px;">B</span><span style="font-size: 14px;">A</span></div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html (194113 => 194114)


--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html	2015-12-15 21:55:34 UTC (rev 194114)
@@ -9,10 +9,20 @@
     src: url("resources/FontWithFeatures.otf") format("opentype");
 }
 @font-face {
+    /* Truetype. "S" responds to smcp; "V" responds to c2sc */
+    font-family: "testfontttf";
+    src: url("resources/FontWithFeatures.ttf") format("truetype");
+}
+@font-face {
     /* Opentype. "f" responds to smcp; "g" responds to c2sc */
     font-family: "testfontlowercasesmallcapsotf";
     src: url("resources/FontWithFeaturesLowercaseSmallCaps.otf") format("opentype");
 }
+@font-face {
+    /* Truetype. "r" responds to smcp; "u" responds to c2sc */
+    font-family: "testfontlowercasesmallcapsttf";
+    src: url("resources/FontWithFeaturesLowercaseSmallCaps.ttf") format("truetype");
+}
 .test {
     font-size: 20px;
     display: inline-block;
@@ -48,6 +58,23 @@
 <div class="test" style="font-variant-caps: small-caps;">AK</div>
 <div class="test" style="font-variant-caps: small-caps;">KA</div>
 </div>
+<div style="font-family: testfontttf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">S</div>
+<div class="test">V</div>
+<div class="test" style="font-variant-caps: small-caps;">a</div>
+<div class="test" style="font-variant-caps: small-caps;">S</div>
+<div class="test" style="font-variant-caps: small-caps;">aS</div>
+<div class="test" style="font-variant-caps: small-caps;">Sa</div>
+<div class="test" style="font-variant-caps: small-caps;">AS</div>
+<div class="test" style="font-variant-caps: small-caps;">SA</div>
+<div class="test" style="font-variant-caps: small-caps;">V</div>
+<div class="test" style="font-variant-caps: small-caps;">aV</div>
+<div class="test" style="font-variant-caps: small-caps;">Va</div>
+<div class="test" style="font-variant-caps: small-caps;">AV</div>
+<div class="test" style="font-variant-caps: small-caps;">VA</div>
+</div>
 <div style="font-family: testfontlowercasesmallcapsotf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test">AB</div>
 <div class="test">a</div>
@@ -67,6 +94,25 @@
 <div class="test" style="font-variant-caps: small-caps;">Ag</div>
 <div class="test" style="font-variant-caps: small-caps;">gA</div>
 </div>
+<div style="font-family: testfontlowercasesmallcapsttf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test">AB</div>
+<div class="test">a</div>
+<div class="test">r</div>
+<div class="test">u</div>
+<div class="test">R</div>
+<div class="test">U</div>
+<div class="test" style="font-variant-caps: small-caps;">a</div>
+<div class="test" style="font-variant-caps: small-caps;">r</div>
+<div class="test" style="font-variant-caps: small-caps;">ar</div>
+<div class="test" style="font-variant-caps: small-caps;">ra</div>
+<div class="test" style="font-variant-caps: small-caps;">Ar</div>
+<div class="test" style="font-variant-caps: small-caps;">rA</div>
+<div class="test" style="font-variant-caps: small-caps;">u</div>
+<div class="test" style="font-variant-caps: small-caps;">au</div>
+<div class="test" style="font-variant-caps: small-caps;">ua</div>
+<div class="test" style="font-variant-caps: small-caps;">Au</div>
+<div class="test" style="font-variant-caps: small-caps;">uA</div>
+</div>
 <div style="font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-small-caps;">a</div>
 <div class="test" style="font-variant-caps: all-small-caps;">J</div>
@@ -80,6 +126,19 @@
 <div class="test" style="font-variant-caps: all-small-caps;">AK</div>
 <div class="test" style="font-variant-caps: all-small-caps;">KA</div>
 </div>
+<div style="font-family: testfontttf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-small-caps;">a</div>
+<div class="test" style="font-variant-caps: all-small-caps;">S</div>
+<div class="test" style="font-variant-caps: all-small-caps;">aS</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Sa</div>
+<div class="test" style="font-variant-caps: all-small-caps;">AS</div>
+<div class="test" style="font-variant-caps: all-small-caps;">SA</div>
+<div class="test" style="font-variant-caps: all-small-caps;">V</div>
+<div class="test" style="font-variant-caps: all-small-caps;">aV</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Va</div>
+<div class="test" style="font-variant-caps: all-small-caps;">AV</div>
+<div class="test" style="font-variant-caps: all-small-caps;">VA</div>
+</div>
 <div style="font-family: testfontlowercasesmallcapsotf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';">
 <div class="test" style="font-variant-caps: all-small-caps;">a</div>
 <div class="test" style="font-variant-caps: all-small-caps;">f</div>
@@ -91,8 +150,21 @@
 <div class="test" style="font-variant-caps: all-small-caps;">ag</div>
 <div class="test" style="font-variant-caps: all-small-caps;">ga</div>
 <div class="test" style="font-variant-caps: all-small-caps;">Ag</div>
-<div class="test" style="font-variant-caps: all-small-caps;">gA</div
+<div class="test" style="font-variant-caps: all-small-caps;">gA</div>
 </div>
+<div style="font-family: testfontlowercasesmallcapsttf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';">
+<div class="test" style="font-variant-caps: all-small-caps;">a</div>
+<div class="test" style="font-variant-caps: all-small-caps;">r</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ar</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ra</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Ar</div>
+<div class="test" style="font-variant-caps: all-small-caps;">rA</div>
+<div class="test" style="font-variant-caps: all-small-caps;">u</div>
+<div class="test" style="font-variant-caps: all-small-caps;">au</div>
+<div class="test" style="font-variant-caps: all-small-caps;">ua</div>
+<div class="test" style="font-variant-caps: all-small-caps;">Au</div>
+<div class="test" style="font-variant-caps: all-small-caps;">uA</div>
 </div>
+</div>
 </body>
 </html>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (194113 => 194114)


--- trunk/Source/WebCore/ChangeLog	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/Source/WebCore/ChangeLog	2015-12-15 21:55:34 UTC (rev 194114)
@@ -1,3 +1,26 @@
+2015-12-15  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        [Font Features] TrueType fonts trigger real features even when synthesis is applied
+        https://bugs.webkit.org/show_bug.cgi?id=152287
+
+        Reviewed by Darin Adler.
+
+        When using a font feature that is synthesizable, and synthesis is triggered,
+        we should make sure to turn off the original font feature. Otherwise, the
+        feature will be applied twice on top of itself.
+
+        This worked for OpenType fonts, but not for TrueType fonts.
+
+        Tests: css3/font-variant-petite-caps-synthesis.html
+               css3/font-variant-small-caps-synthesis.html
+               css3/font-variant-petite-caps-synthesis-coverage.html
+               css3/font-variant-small-caps-synthesis-coverage.html
+
+        * platform/graphics/cocoa/FontCocoa.mm:
+        (WebCore::defaultSelectorForTrueTypeFeature):
+        (WebCore::removedFeature):
+        (WebCore::createCTFontWithoutSynthesizableFeatures):
+
 2015-12-15  Per Arne Vollan  <pe...@outlook.com>
 
         [WinCairo][MediaFoundation] Full screen mode is not supported.

Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm (194113 => 194114)


--- trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm	2015-12-15 21:19:31 UTC (rev 194113)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm	2015-12-15 21:55:34 UTC (rev 194114)
@@ -469,8 +469,41 @@
     return std::make_pair(rawType, rawSelector);
 }
 
-static inline RetainPtr<CFDictionaryRef> removedFeature(CFDictionaryRef feature)
+static inline CFNumberRef defaultSelectorForTrueTypeFeature(int key, CTFontRef font)
 {
+    RetainPtr<CFArrayRef> features = adoptCF(CTFontCopyFeatures(font));
+    CFIndex featureCount = CFArrayGetCount(features.get());
+    for (CFIndex i = 0; i < featureCount; ++i) {
+        CFDictionaryRef featureType = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(features.get(), i));
+        CFNumberRef featureKey = static_cast<CFNumberRef>(CFDictionaryGetValue(featureType, kCTFontFeatureTypeIdentifierKey));
+        if (!featureKey)
+            continue;
+        int rawFeatureKey;
+        CFNumberGetValue(featureKey, kCFNumberIntType, &rawFeatureKey);
+        if (rawFeatureKey != key)
+            continue;
+
+        CFArrayRef featureSelectors = static_cast<CFArrayRef>(CFDictionaryGetValue(featureType, kCTFontFeatureTypeSelectorsKey));
+        if (!featureSelectors)
+            continue;
+        CFIndex selectorsCount = CFArrayGetCount(featureSelectors);
+        for (CFIndex j = 0; j < selectorsCount; ++j) {
+            CFDictionaryRef featureSelector = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(featureSelectors, j));
+            CFNumberRef isDefault = static_cast<CFNumberRef>(CFDictionaryGetValue(featureSelector, kCTFontFeatureSelectorDefaultKey));
+            if (!isDefault)
+                continue;
+            int rawIsDefault;
+            CFNumberGetValue(isDefault, kCFNumberIntType, &rawIsDefault);
+            if (!rawIsDefault)
+                continue;
+            return static_cast<CFNumberRef>(CFDictionaryGetValue(featureSelector, kCTFontFeatureSelectorIdentifierKey));
+        }
+    }
+    return nullptr;
+}
+
+static inline RetainPtr<CFDictionaryRef> removedFeature(CFDictionaryRef feature, CTFontRef font)
+{
     bool isOpenType = isOpenTypeFeature(feature);
     bool isTrueType = isTrueTypeFeature(feature);
     if (!isOpenType && !isTrueType)
@@ -494,15 +527,17 @@
     if (isTrueType) {
         auto trueTypeFeaturePair = trueTypeFeature(feature);
         if (trueTypeFeaturePair.first == kLowerCaseType && (trueTypeFeaturePair.second == kLowerCaseSmallCapsSelector || trueTypeFeaturePair.second == kLowerCasePetiteCapsSelector)) {
-            int rawSelector = kDefaultLowerCaseSelector;
-            RetainPtr<CFNumberRef> selector = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &rawSelector));
             CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
-            CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, selector.get());
+            if (CFNumberRef defaultSelector = defaultSelectorForTrueTypeFeature(kLowerCaseType, font))
+                CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, defaultSelector);
+            else
+                CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureSelectorIdentifierKey));
         } else if (trueTypeFeaturePair.first == kUpperCaseType && (trueTypeFeaturePair.second == kUpperCaseSmallCapsSelector || trueTypeFeaturePair.second == kUpperCasePetiteCapsSelector)) {
-            int rawSelector = kDefaultUpperCaseSelector;
-            RetainPtr<CFNumberRef> selector = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &rawSelector));
             CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
-            CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, selector.get());
+            if (CFNumberRef defaultSelector = defaultSelectorForTrueTypeFeature(kUpperCaseType, font))
+                CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, defaultSelector);
+            else
+                CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureSelectorIdentifierKey));
         } else {
             CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
             CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureSelectorIdentifierKey));
@@ -520,7 +555,7 @@
     RetainPtr<CFMutableArrayRef> newFeatures = adoptCF(CFArrayCreateMutable(kCFAllocatorDefault, featureCount, &kCFTypeArrayCallBacks));
     for (CFIndex i = 0; i < featureCount; ++i) {
         CFDictionaryRef feature = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(features.get(), i));
-        CFArrayAppendValue(newFeatures.get(), removedFeature(feature).get());
+        CFArrayAppendValue(newFeatures.get(), removedFeature(feature, font).get());
     }
     CFTypeRef keys[] = { kCTFontFeatureSettingsAttribute };
     CFTypeRef values[] = { newFeatures.get() };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to