<!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>[193894] trunk</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/193894">193894</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2015-12-10 00:37:03 -0800 (Thu, 10 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>font-variant-caps does not work if the font does not support font features
https://bugs.webkit.org/show_bug.cgi?id=149774

Reviewed by Antti Koivisto.

Source/WebCore:

This test implements synthesis for small-caps and all-small-caps. It does so by
moving font variant selection into a higher level (ComplexTextController).
In general, the approach is to use the pure font feature until we encounter
a character which needs to be uppercased, and which the font feature does not
support uppercasing. In this situation, we try again with synthesis. In this
case, synthesis means artificially uppercasing letters and rendering them with
a smaller font.

We require system support to know which glyphs a particular font feature supports.
Therefore, on operating systems which do not include this support, we will simply
say that the font feature does not support any glyphs.

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

* platform/graphics/Font.cpp:
(WebCore::Font::noSmallCapsFont): Return the same font, but without smcp or c2sc.
This function utilizes a cache.
* platform/graphics/Font.h:
(WebCore::Font::variantFont): Small caps should never go through this function
anymore.
* platform/graphics/FontCascade.h: Because we're moving variant selection into
a higher level, we remove the FontVariant argument from the lower-level call.
* platform/graphics/FontCascadeFonts.cpp:
(WebCore::FontCascadeFonts::glyphDataForVariant): Use early-return style.
(WebCore::FontCascadeFonts::glyphDataForNormalVariant): Ditto.
* platform/graphics/cocoa/FontCascadeCocoa.mm:
(WebCore::FontCascade::fontForCombiningCharacterSequence): Because we're moving
variant selection into a higher level, we remove the FontVariant argument from
the lower-level call.
* platform/graphics/cocoa/FontCocoa.mm:
(WebCore::Font::smallCapsSupportsCharacter):
(WebCore::Font::allSmallCapsSupportsCharacter):
(WebCore::smallCapsOpenTypeDictionary): Helper function for
smallCapsSupportsCharacter().
(WebCore::smallCapsTrueTypeDictionary): Ditto.
(WebCore::unionBitVectors):
(WebCore::Font::glyphsSupportedBySmallCaps): Compute a bit vector of supported
glyphs.
(WebCore::Font::glyphsSupportedByAllSmallCaps): Ditto.
(WebCore::createDerivativeFont): Moving common code into its own helper function.
(WebCore::Font::createFontWithoutSmallCaps):
(WebCore::Font::platformCreateScaledFont): Use the common code.
* platform/graphics/mac/ComplexTextController.cpp:
(WebCore::capitalized): What is the capitalized form of a character?
(WebCore::ComplexTextController::collectComplexTextRuns): Implement the core
logic of this patch. This includes the retry when we encounter a character which
is not supported by the font feature.
* platform/spi/cocoa/CoreTextSPI.h:

LayoutTests:

Adding two new font which include lowercase characters which respond to 'smcp' and 'c2sc'.

The character mappings are:

OpenType:
'smcp': f
'c2sc': g

TrueType:
kLowerCaseType / kLowerCaseSmallCapsSelector: r
kUpperCaseType / kUpperCaseSmallCapsSelector: u

* css3/font-variant-all-expected.html:
* css3/font-variant-all.html:
* css3/font-variant-small-caps-synthesis-expected.html: Added.
* css3/font-variant-small-caps-synthesis.html: Added.
* css3/font-variant-petite-caps-synthesis-expected.html: Added.
* css3/font-variant-petite-caps-synthesis.html: Added.
* css3/resources/FontWithFeaturesLowercaseSmallCaps.otf: Added.
* css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf: Added.
* platform/mac/TestExpectations:
* platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantallexpectedhtml">trunk/LayoutTests/css3/font-variant-all-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantallhtml">trunk/LayoutTests/css3/font-variant-all.html</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacfastwritingmodebrokenideographsmallcapsexpectedtxt">trunk/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontcpp">trunk/Source/WebCore/platform/graphics/Font.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFonth">trunk/Source/WebCore/platform/graphics/Font.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadeh">trunk/Source/WebCore/platform/graphics/FontCascade.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadeFontscpp">trunk/Source/WebCore/platform/graphics/FontCascadeFonts.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCascadeCocoamm">trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCocoamm">trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacComplexTextControllercpp">trunk/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformspicocoaCoreTextSPIh">trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscss3fontvariantpetitecapssynthesiscoverageexpectedhtml">trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantpetitecapssynthesiscoveragehtml">trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantpetitecapssynthesisexpectedhtml">trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantpetitecapssynthesishtml">trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantsmallcapssynthesiscoverageexpectedhtml">trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantsmallcapssynthesiscoveragehtml">trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantsmallcapssynthesisexpectedhtml">trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3fontvariantsmallcapssynthesishtml">trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html</a></li>
<li><a href="#trunkLayoutTestscss3resourcesFontWithFeaturesLowercaseSmallCapsotf">trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.otf</a></li>
<li><a href="#trunkLayoutTestscss3resourcesFontWithFeaturesLowercaseSmallCapsttf">trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/LayoutTests/ChangeLog        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2015-12-10  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        font-variant-caps does not work if the font does not support font features
+        https://bugs.webkit.org/show_bug.cgi?id=149774
+
+        Reviewed by Antti Koivisto.
+
+        Adding two new font which include lowercase characters which respond to 'smcp' and 'c2sc'. 
+
+        The character mappings are:
+
+        OpenType:
+        'smcp': f
+        'c2sc': g
+
+        TrueType:
+        kLowerCaseType / kLowerCaseSmallCapsSelector: r
+        kUpperCaseType / kUpperCaseSmallCapsSelector: u
+
+        * css3/font-variant-all-expected.html:
+        * css3/font-variant-all.html:
+        * css3/font-variant-small-caps-synthesis-expected.html: Added.
+        * css3/font-variant-small-caps-synthesis.html: Added.
+        * css3/font-variant-petite-caps-synthesis-expected.html: Added.
+        * css3/font-variant-petite-caps-synthesis.html: Added.
+        * css3/resources/FontWithFeaturesLowercaseSmallCaps.otf: Added.
+        * css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf: Added.
+        * platform/mac/TestExpectations:
+        * platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt:
+
</ins><span class="cx"> 2015-12-09  Brady Eidson  &lt;beidson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Modern IDB: storage/indexeddb/objectstore-basics.html fails.
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantallexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/font-variant-all-expected.html (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-all-expected.html        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/LayoutTests/css3/font-variant-all-expected.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> &lt;li&gt;-webkit-font-variant-east-asian&lt;/li&gt;
</span><span class="cx"> &lt;/ul&gt;
</span><span class="cx"> The test passes if there is a particular sequence of checks and x characters below. Note that some x characters are expected.
</span><del>-&lt;div id=&quot;insertionpoint&quot;&gt;&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</del><ins>+&lt;div id=&quot;insertionpoint&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</ins><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;B&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;B&lt;/span&gt;
</span><span class="lines">@@ -57,14 +57,8 @@
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</span><del>-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestOTF;&quot;&gt;A&lt;/span&gt;
</del><span class="cx"> &lt;/div&gt;
</span><del>-&lt;div id=&quot;insertionPoint2&quot;&gt;&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</del><ins>+&lt;div id=&quot;insertionPoint2&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</ins><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;B&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;B&lt;/span&gt;
</span><span class="lines">@@ -96,14 +90,8 @@
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</span><del>-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontFeaturesTestTTF;&quot;&gt;A&lt;/span&gt;
</del><span class="cx"> &lt;/div&gt;
</span><del>-&lt;div id=&quot;insertionpoint3&quot;&gt;&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</del><ins>+&lt;div id=&quot;insertionpoint3&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</ins><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;B&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;B&lt;/span&gt;
</span><span class="lines">@@ -134,14 +122,8 @@
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</span><del>-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesOTF;&quot;&gt;A&lt;/span&gt;
</del><span class="cx"> &lt;/div&gt;
</span><del>-&lt;div id=&quot;insertionPoint4&quot;&gt;&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</del><ins>+&lt;div id=&quot;insertionPoint4&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</ins><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;B&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;B&lt;/span&gt;
</span><span class="lines">@@ -173,12 +155,6 @@
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</span><span class="cx"> &lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</span><del>-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
-&lt;span style=&quot;font-family: FontWithFeaturesTTF;&quot;&gt;A&lt;/span&gt;
</del><span class="cx"> &lt;/div&gt;
</span><span class="cx"> &lt;/body&gt;
</span><span class="cx"> &lt;/html&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantallhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/font-variant-all.html (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-all.html        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/LayoutTests/css3/font-variant-all.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -23,10 +23,10 @@
</span><span class="cx"> &lt;li&gt;-webkit-font-variant-east-asian&lt;/li&gt;
</span><span class="cx"> &lt;/ul&gt;
</span><span class="cx"> The test passes if there is a particular sequence of checks and x characters below. Note that some x characters are expected.
</span><del>-&lt;div id=&quot;insertionPoint&quot;&gt;&lt;/div&gt;
-&lt;div id=&quot;insertionPoint2&quot;&gt;&lt;/div&gt;
-&lt;div id=&quot;insertionPoint3&quot;&gt;&lt;/div&gt;
-&lt;div id=&quot;insertionPoint4&quot;&gt;&lt;/div&gt;
</del><ins>+&lt;div id=&quot;insertionPoint&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;insertionPoint2&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;insertionPoint3&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;insertionPoint4&quot; style=&quot;font-size: 20px;&quot;&gt;&lt;/div&gt;
</ins><span class="cx"> &lt;script&gt;
</span><span class="cx"> var insertionPoint = document.getElementById(&quot;insertionPoint&quot;);
</span><span class="cx"> var insertionPoint2 = document.getElementById(&quot;insertionPoint2&quot;);
</span><span class="lines">@@ -52,12 +52,6 @@
</span><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-ligatures&quot;, &quot;no-contextual&quot;, &quot;G&quot;);
</span><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-position&quot;, &quot;sub&quot;, &quot;H&quot;);
</span><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-position&quot;, &quot;super&quot;, &quot;I&quot;);
</span><del>-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;small-caps&quot;, &quot;J&quot;);
-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;J&quot;);
-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;K&quot;);
-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;petite-caps&quot;, &quot;L&quot;);
-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;L&quot;);
-addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;M&quot;);
</del><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;unicase&quot;, &quot;N&quot;);
</span><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-caps&quot;, &quot;titling-caps&quot;, &quot;O&quot;);
</span><span class="cx"> addElement(insertionPoint, &quot;FontFeaturesTestOTF&quot;, &quot;font-variant-numeric&quot;, &quot;lining-nums&quot;, &quot;P&quot;);
</span><span class="lines">@@ -91,12 +85,6 @@
</span><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-ligatures&quot;, &quot;no-contextual&quot;, &quot;L&quot;);
</span><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-position&quot;, &quot;sub&quot;, &quot;O&quot;);
</span><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-position&quot;, &quot;super&quot;, &quot;P&quot;);
</span><del>-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;small-caps&quot;, &quot;S&quot;);
-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;S&quot;);
-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;V&quot;);
-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;petite-caps&quot;, &quot;T&quot;);
-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;T&quot;);
-addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;W&quot;);
</del><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;unicase&quot;, &quot;Y&quot;);
</span><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-caps&quot;, &quot;titling-caps&quot;, &quot;a&quot;);
</span><span class="cx"> addElement(insertionPoint2, &quot;FontFeaturesTestTTF&quot;, &quot;font-variant-numeric&quot;, &quot;lining-nums&quot;, &quot;c&quot;);
</span><span class="lines">@@ -130,12 +118,6 @@
</span><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-ligatures&quot;, &quot;no-contextual&quot;, &quot;G&quot;);
</span><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-position&quot;, &quot;sub&quot;, &quot;H&quot;);
</span><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-position&quot;, &quot;super&quot;, &quot;I&quot;);
</span><del>-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;small-caps&quot;, &quot;J&quot;);
-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;J&quot;);
-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;K&quot;);
-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;petite-caps&quot;, &quot;L&quot;);
-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;L&quot;);
-addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;M&quot;);
</del><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;unicase&quot;, &quot;N&quot;);
</span><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-caps&quot;, &quot;titling-caps&quot;, &quot;O&quot;);
</span><span class="cx"> addElement(insertionPoint3, &quot;FontWithFeaturesOTF&quot;, &quot;font-variant-numeric&quot;, &quot;lining-nums&quot;, &quot;P&quot;);
</span><span class="lines">@@ -169,12 +151,6 @@
</span><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-ligatures&quot;, &quot;no-contextual&quot;, &quot;L&quot;);
</span><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-position&quot;, &quot;sub&quot;, &quot;O&quot;);
</span><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-position&quot;, &quot;super&quot;, &quot;P&quot;);
</span><del>-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;small-caps&quot;, &quot;S&quot;);
-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;S&quot;);
-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-small-caps&quot;, &quot;V&quot;);
-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;petite-caps&quot;, &quot;T&quot;);
-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;T&quot;);
-addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;all-petite-caps&quot;, &quot;W&quot;);
</del><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;unicase&quot;, &quot;Y&quot;);
</span><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-caps&quot;, &quot;titling-caps&quot;, &quot;a&quot;);
</span><span class="cx"> addElement(insertionPoint4, &quot;FontWithFeaturesTTF&quot;, &quot;font-variant-numeric&quot;, &quot;lining-nums&quot;, &quot;c&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantpetitecapssynthesiscoverageexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;testfont&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;AS&lt;/span&gt;DF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AS&lt;span style=&quot;font-size: 14px;&quot;&gt;DF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid black 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;BA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid blue 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantpetitecapssynthesiscoveragehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    /* Opentype. &quot;L&quot; responds to pcap; &quot;M&quot; responds to c2pc */
+    font-family: &quot;testfontotf&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;aL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;La&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;AL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;LA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;aM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;Ma&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;AM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;MA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;aL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;La&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;AL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;LA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;aM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;Ma&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;AM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;MA&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantpetitecapssynthesisexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;testfont&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;AS&lt;/span&gt;DF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AS&lt;span style=&quot;font-size: 14px;&quot;&gt;DF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid black 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;BA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid blue 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantpetitecapssynthesishtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-petite-caps-synthesis.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    /* Opentype. &quot;L&quot; responds to pcap; &quot;M&quot; responds to c2pc */
+    font-family: &quot;testfontotf&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;aL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;La&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;AL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;LA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;aM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;Ma&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;AM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: petite-caps;&quot;&gt;MA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;L&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;aL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;La&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;AL&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;LA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;M&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;aM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;Ma&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;AM&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-petite-caps;&quot;&gt;MA&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantsmallcapssynthesiscoverageexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,91 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;testfont&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;AS&lt;/span&gt;DF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AS&lt;span style=&quot;font-size: 14px;&quot;&gt;DF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid black 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;BA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid red 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;style=&quot;&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;A&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid blue 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid green 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantsmallcapssynthesiscoveragehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,98 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+/* Only test OpenType fonts for now, because our TrueType font is busted when disabling features. */
+@font-face {
+    /* Opentype. &quot;J&quot; responds to smcp; &quot;K&quot; responds to c2sc */
+    font-family: &quot;testfontotf&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+@font-face {
+    /* Opentype. &quot;f&quot; responds to smcp; &quot;g&quot; responds to c2sc */
+    font-family: &quot;testfontlowercasesmallcapsotf&quot;;
+    src: url(&quot;resources/FontWithFeaturesLowercaseSmallCaps.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;aJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ja&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;AJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;JA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;aK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ka&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;AK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;KA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontlowercasesmallcapsotf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;F&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;G&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;fa&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;fA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ga&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;gA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;aJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ja&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;AJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;JA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;aK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ka&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;AK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;KA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontlowercasesmallcapsotf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;fa&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;fA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ga&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;gA&lt;/div
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantsmallcapssynthesisexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,91 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;testfont&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;AS&lt;/span&gt;DF&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AS&lt;span style=&quot;font-size: 14px;&quot;&gt;DF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;ASDF&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid black 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AA&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;BA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid red 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;style=&quot;&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;B&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;A&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;A&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;A&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid blue 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfont; border: solid green 1px; margin: 5px;&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;A&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3fontvariantsmallcapssynthesishtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html                                (rev 0)
+++ trunk/LayoutTests/css3/font-variant-small-caps-synthesis.html        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,98 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+/* Only test OpenType fonts for now, because our TrueType font is busted when disabling features. */
+@font-face {
+    /* Opentype. &quot;J&quot; responds to smcp; &quot;K&quot; responds to c2sc */
+    font-family: &quot;testfontotf&quot;;
+    src: url(&quot;resources/FontWithFeatures.otf&quot;) format(&quot;opentype&quot;);
+}
+@font-face {
+    /* Opentype. &quot;f&quot; responds to smcp; &quot;g&quot; responds to c2sc */
+    font-family: &quot;testfontlowercasesmallcapsotf&quot;;
+    src: url(&quot;resources/FontWithFeaturesLowercaseSmallCaps.otf&quot;) format(&quot;opentype&quot;);
+}
+.test {
+    font-size: 20px;
+    display: inline-block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that font-variant synthesis is correctly applied. The test passes when a particular pattern of Xs and checks appear below. Also note that the correct size of the character is required.
+&lt;div style=&quot;border: solid black 1px;&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ASDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;asdf&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;asDF&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ASdf&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid black 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;aJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ja&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;AJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;JA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;aK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ka&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;AK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;KA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontlowercasesmallcapsotf; border: solid red 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot;&gt;AB&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;F&lt;/div&gt;
+&lt;div class=&quot;test&quot;&gt;G&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;fa&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;fA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;ga&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;Ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: small-caps;&quot;&gt;gA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontotf; border: solid blue 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;J&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;aJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ja&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;AJ&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;JA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;K&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;aK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ka&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;AK&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;KA&lt;/div&gt;
+&lt;/div&gt;
+&lt;div style=&quot;font-family: testfontlowercasesmallcapsotf; border: solid green 1px; margin: 5px; font-feature-settings: 'ntrl';&quot;&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;a&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;f&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;fa&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Af&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;fA&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;g&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;ga&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;Ag&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;font-variant-caps: all-small-caps;&quot;&gt;gA&lt;/div
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3resourcesFontWithFeaturesLowercaseSmallCapsotf"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.otf (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.otf                                (rev 0)
+++ trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.otf        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+OTTO
+\x80 CFF Vy\xD6\xEB\xAC&quot;OGSUBä»….&quot;\xFC\xBAOS/2H\xE0Yb'\xB8dcmap\xD5\xAF(jheadeD\xF9(\x886hheag7(\xC0$hmtx\xD4 \x86(\xE4\xD4maxpk)\xB8 name\xD7/\xEA)\xD8|post8T FontWithFeaturesOTF9\x87\x87\x85\xEEFontWithFeaturesOTF        
+ + !&quot;#$%&amp;'()*+,-./012345I\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7        g
+
+\xA7 G \xE7 \x87+'+\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7 \x87\xFF\xFF\xFF\xFF\xC8\xFF\xC8\xFF\xFFX\xFFX\xFF\xFF\xFF\xFD\xA8\xFF\xFD\xA8\xFF\xFF\xFF\xFF\xFF\xC8\xFF\xF4\xFF2\xFF2\xFF\xFA\xFF\xFF\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFE&gt;\xFF\xFE&gt;\xFF\xFE\xD4\xFF,\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\x
 FF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xF
 F\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE
 \xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp
 \xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90
 \xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp
 \xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp
 \xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF
 \xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF
 2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x
 90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x
 90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\x
 FEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\
 x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF
 2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2
 \xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90
 \xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp
 \xFF\xFF\xFF\xFF\xF4\xFF&amp;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp
+Z\xD0DFLT\xFF\xFF        
+ +liga\xBCclig\xC2dlig\xC8hlig\xCEcalt\xD4subs\xDAsups\xE0pcap\xE6c2pc\xECunic\xF2titl\xF8lnum\xFEonumpnum
+tnumfracafrcordn&quot;zero(hist.jp784jp83:jp90@jp04FsmplLtradRfwidXpwid^rubydsmcpjc2scp        
+  +@HPX`hpx\x80\x88\x90\x98\xA0\xA8\xB0\xB8\xC0\xC8\xD0\xD8\xE0\xE8\xF0\xF8 (0\xF8\xFE
+&quot;(.4:@FLRX^djpv|\x82\x88\x8E\x94\x9A\xA0\xA6\xAC        
+  + !\xF4TKBW\xFF\xFFf\xFF\xFC\xFF\xFF \xFF\xFFD
+ (AZaz&amp;Zz\xFF\xFFAa\xFF\xFF\xFF\xDA\xFF\xA0c\xD7w`_&lt;\xF5f5\xC8\xC82222222222222222222222222222222222222222222222222225\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF5B&amp;&amp;&amp;&amp;L&amp;r\x98&amp;\x9E\xC44\xE0&lt;6P&gt;\x860\xC42\xF4&lt;&amp;        &gt;b&amp;&lt;\xA0
+2\xDC &gt; @L+*\x8C*\xB6$\xE0$#&quot;(J*h\x92&quot;\x96*\xB8(\xE2
+*(2R2\x84$\xB6*\xDA84&lt;p *\x8C!4\xB6&quot;4\xEA$,%,J'&amp;v(*\x9C)4\xC6*4\xFA+4.,4b-:\x96.&lt;\xD0/          0*        ,1.        V22        \x843        \xB64&amp;        \xD05        \xF66*
+96
+&lt;;8
+r7
+\xAA8*
+\xC6:6
+\xF0&lt;8 &amp;FontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTF1.0FontWithFeaturesOTFkLigaturesTypekCommonLigaturesOnSelectorkContextualLigaturesOnSelectorkCommonLigaturesOffSelectorkContextualLigaturesOffSelectorkRareLigaturesOnSelectorkRareLigaturesOffSelectorkHistoricalLigaturesOnSelectorkHistoricalLigaturesOffSelectorkHistoricalLigaturesOnSelectorkContextualAlternatesTypekContextualAlternatesOnSelectorkContextualAlternatesOffSelectorkVerticalPositionTypedefaultU
 nusedSelectorkInferiorsSelectorkSuperiorsSelectorkOrdinalsSelectorkLetterCaseTypedefaultUnusedSelector14kStyleOptionsTypedefaultUnusedSelectorkTitlingCapsSelectorkNumberCaseTypedefaultUnusedSelectorkUpperCaseNumbersSelectorkLowerCaseNumbersSelectorkNumberSpacingTypedefaultUnusedSelectorkProportionalNumbersSelectorkMonospacedNumbersSelectorkFractionsTypedefaultUnusedSelectorkDiagonalFractionsSelectorkVerticalFractionsSelectorkTypographicExtrasTypekSlashedZeroOnSelectorkCharacterShapeTypedef
 aultUnusedSelectorkJIS1978CharactersSelectorkJIS1983CharactersSelectorkJIS1990CharactersSelectorkJIS2004CharactersSelectorkSimplifiedCharactersSelectorkTraditionalCharactersSelectorkTextSpacingTypedefaultUnusedSelectorkMonospacedTextSelectorkProportionalTextSelectorkRubyKanaTypekRubyKanaOnSelectorkLowerCaseTypedefaultUnusedSelectorkLowerCaseSmallCapsSelectorkLowerCasePetiteCapsSelectorkUpperCaseTypedefaultUnusedSelectorkUpperCaseSmallCapsSelectorkUpperCasePetiteCapsSelector
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscss3resourcesFontWithFeaturesLowercaseSmallCapsttf"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf (0 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf                                (rev 0)
+++ trunk/LayoutTests/css3/resources/FontWithFeaturesLowercaseSmallCaps.ttf        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+true \x80@OS/2H\xE0Yb\xCCdcmap\xD5\xAF0jfeat\xA7R`\x9Clglyf\xC8(\xD5\xC3headeD\xF9 6hheag7X$hmtx\xD4 \x86|\xD4loca\xAB9P\xD8maxpk( morx\xC9BH @name\xD7/\xF4!\x88|post0 \xF4TKBW\xFF\xFFf\xFF\xFC\xFF\xFF \xFF\xFFD
+ (AZaz&amp;Zz\xFF\xFFAa\xFF\xFF\xFF\xDA\xFF\xA0        \xB4$\xD8
+
+\xE0\x80+\xF0\x80\xF8\x80\x80 \x80 \x80$$(\x80'D\x80/P3%T\x805&amp;`\x807        &amp;  c#ccccc !&quot;%c()*+ ,-.c0124c69;c8:&lt;\xC8\xC8  \xC8X\xFD\xA8\xC8X\xFD\xA8\xC8\xC8\xB6\xBC\xC82\xFA\x902\xFE&gt;\xFE\xD4\xF42\xFF\x90\xFF\xCE\xFE&gt;,22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF
 \xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\
 xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\
 xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\
 xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\x
 CE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x
 90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xF
 Ep2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2
 \x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90\x902\xFEp22\xB6\xB6 \xF4\x902\xFEp\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90&amp;\x90\xFF\xCE\xFEp\xFEp\xFF\xCE\x90\xFEp2\x90
 \x902\xFEp\xEA\xB7\xD0\xD7_&lt;\xF5f5\xC8\xC8222222222222222222222222222222222222222222222222222'X\xA7\xF6E\x94\xE32\x81\xD0n\xBD [\xAA\xF9H\x97\xE65\x84\xD3&quot;q\xC0^\xAD\xFC        K        \x9A        \xE9
+8
+\x87
+\xD6 % t \xC3  a \xB0 \xFF+N+\x9D+\xEC;\x8A\xD9(w\xC65\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF5.D\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFF        D\xFF\xFF\xFF\xFF
+D\xFF\xFF\xFF\xFF D$\xFF\xFF\xFF\xFF D$\xFF\xFF\xFF\xFF+D
+c\xFF\xFF\xFF\xFFD
+\xFF\xFF\xFF\xFFD
+\xFF\xFF\xFF\xFFD
+\xFF\xFF\xFF\xFFDc\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFDc\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFDc\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFDc\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFD c\xFF\xFF\xFF\xFFD \xFF\xFF\xFF\xFF
 D \xFF\xFF\xFF\xFFD\xFF\xFF\xFF\xFFDc\xFF\xFF\xFF\xFF D\xFF\xFF\xFF\xFF!D\xFF\xFF\xFF\xFF&quot;D\xFF\xFF\xFF\xFF#D \xFF\xFF\xFF\xFF$D\xFF\xFF\xFF\xFF%D\xFF\xFF\xFF\xFF&amp;Dc\xFF\xFF\xFF\xFF'D\xFF\xFF\xFF\xFF(D\xFF\xFF\xFF\xFF
 )D\xFF\xFF\xFF\xFF*D%c\xFF\xFF\xFF\xFF+D%\xFF\xFF\xFF\xFF,D%\xFF\xFF\xFF\xFF-D&amp;c\xFF\xFF\xFF\xFF.D&amp;\xFF\xFF\xFF\xFF/D&amp;\xFF\xFF\xFF\xFF0B&amp;&amp;&amp;&amp;L&amp;r\x98&amp;\x9E\xC44\xE0&lt;6P&gt;\x860\xC42\xF4&lt;&amp;        &gt;b&amp;&lt;\xA0
+2\xDC &gt; @L+*\x8C*\xB6$\xE0$#&quot;(J*h\x92&quot;\x96*\xB8(\xE2
+*(2R2\x84$\xB6*\xDA84&lt;p *\x8C!4\xB6&quot;4\xEA$,%,J'&amp;v(*\x9C)4\xC6*4\xFA+4.,4b-:\x96.&lt;\xD0/          0*        ,1.        V22        \x843        \xB64&amp;        \xD05        \xF66*
+96
+&lt;;8
+r7
+\xAA8*
+\xC6:6
+\xF0&lt;8 &amp;FontWithFeaturesTTFFontWithFeaturesTTFFontWithFeaturesTTFFontWithFeaturesTTF1.0FontWithFeaturesTTFkLigaturesTypekCommonLigaturesOnSelectorkContextualLigaturesOnSelectorkCommonLigaturesOffSelectorkContextualLigaturesOffSelectorkRareLigaturesOnSelectorkRareLigaturesOffSelectorkHistoricalLigaturesOnSelectorkHistoricalLigaturesOffSelectorkHistoricalLigaturesOnSelectorkContextualAlternatesTypekContextualAlternatesOnSelectorkContextualAlternatesOffSelectorkVerticalPositionTypedefaultU
 nusedSelectorkInferiorsSelectorkSuperiorsSelectorkOrdinalsSelectorkLetterCaseTypedefaultUnusedSelector14kStyleOptionsTypedefaultUnusedSelectorkTitlingCapsSelectorkNumberCaseTypedefaultUnusedSelectorkUpperCaseNumbersSelectorkLowerCaseNumbersSelectorkNumberSpacingTypedefaultUnusedSelectorkProportionalNumbersSelectorkMonospacedNumbersSelectorkFractionsTypedefaultUnusedSelectorkDiagonalFractionsSelectorkVerticalFractionsSelectorkTypographicExtrasTypekSlashedZeroOnSelectorkCharacterShapeTypedef
 aultUnusedSelectorkJIS1978CharactersSelectorkJIS1983CharactersSelectorkJIS1990CharactersSelectorkJIS2004CharactersSelectorkSimplifiedCharactersSelectorkTraditionalCharactersSelectorkTextSpacingTypedefaultUnusedSelectorkMonospacedTextSelectorkProportionalTextSelectorkRubyKanaTypekRubyKanaOnSelectorkLowerCaseTypedefaultUnusedSelectorkLowerCaseSmallCapsSelectorkLowerCasePetiteCapsSelectorkUpperCaseTypedefaultUnusedSelectorkUpperCaseSmallCapsSelectorkUpperCasePetiteCapsSelector
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -1287,11 +1287,8 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/151469 imported/w3c/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document.html [ Pass Crash ]
</span><span class="cx"> 
</span><del>-# Temporarily disable font-features tests unil synthesis for font-variant-caps is implemented.
-webkit.org/b/149774 css3/font-feature-settings-font-face-rendering.html [ Pass Failure ImageOnlyFailure ]
-webkit.org/b/149774 css3/font-feature-settings-rendering.html [ Pass Failure ImageOnlyFailure ]
-webkit.org/b/149774 css3/font-variant-all.html [ Pass Failure ImageOnlyFailure ]
-webkit.org/b/149774 css3/font-variant-font-face-all.html [ Pass Failure ImageOnlyFailure ]
-webkit.org/b/149774 css3/font-variant-font-face-override.html [ Pass Failure ImageOnlyFailure ]
-
</del><span class="cx"> webkit.org/b/152009 [ Debug ElCapitan ] fast/canvas/canvas-too-large-to-draw.html [ Skip ]
</span><ins>+
+# Yosemite and El Capitan do not support font feature coverage queries.
+[ Yosemite ElCapitan ] css3/font-variant-small-caps-synthesis-coverage.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] css3/font-variant-petite-caps-synthesis-coverage.html [ ImageOnlyFailure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacfastwritingmodebrokenideographsmallcapsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -13,8 +13,8 @@
</span><span class="cx">               text run at (21,1) width 176: &quot;\x{7B2C}\x{4E8C}\x{6BB5}\x{843D} Paragraph 2&quot;
</span><span class="cx">         RenderBlock {DIV} at (278,1) size 277x275 [bgcolor=#FFFFEE]
</span><span class="cx">           RenderBlock {P} at (14,28) size 63x219 [bgcolor=#FFAAAA] [border: none (20px solid #FF8888) none (20px solid #FF8888)]
</span><del>-            RenderText {#text} at (21,1) size 20x175
-              text run at (21,1) width 175: &quot;\x{7B2C}\x{4E00}\x{6BB5}\x{843D} Paragraph 1&quot;
</del><ins>+            RenderText {#text} at (21,1) size 20x156
+              text run at (21,1) width 156: &quot;\x{7B2C}\x{4E00}\x{6BB5}\x{843D} Paragraph 1&quot;
</ins><span class="cx">           RenderBlock {P} at (90,28) size 63x219 [bgcolor=#FFAAAA] [border: none (20px solid #FF8888) none (20px solid #FF8888)]
</span><del>-            RenderText {#text} at (21,1) size 20x181
-              text run at (21,1) width 181: &quot;\x{7B2C}\x{4E8C}\x{6BB5}\x{843D} Paragraph 2&quot;
</del><ins>+            RenderText {#text} at (21,1) size 20x162
+              text run at (21,1) width 162: &quot;\x{7B2C}\x{4E8C}\x{6BB5}\x{843D} Paragraph 2&quot;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/ChangeLog        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -1,3 +1,60 @@
</span><ins>+2015-12-10  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        font-variant-caps does not work if the font does not support font features
+        https://bugs.webkit.org/show_bug.cgi?id=149774
+
+        Reviewed by Antti Koivisto.
+
+        This test implements synthesis for small-caps and all-small-caps. It does so by
+        moving font variant selection into a higher level (ComplexTextController).
+        In general, the approach is to use the pure font feature until we encounter
+        a character which needs to be uppercased, and which the font feature does not
+        support uppercasing. In this situation, we try again with synthesis. In this
+        case, synthesis means artificially uppercasing letters and rendering them with
+        a smaller font.
+
+        We require system support to know which glyphs a particular font feature supports.
+        Therefore, on operating systems which do not include this support, we will simply
+        say that the font feature does not support any glyphs.
+
+        Test: css3/font-variant-small-caps-synthesis.html
+              css3/font-variant-petite-caps-synthesis.html
+
+        * platform/graphics/Font.cpp:
+        (WebCore::Font::noSmallCapsFont): Return the same font, but without smcp or c2sc.
+        This function utilizes a cache.
+        * platform/graphics/Font.h:
+        (WebCore::Font::variantFont): Small caps should never go through this function
+        anymore.
+        * platform/graphics/FontCascade.h: Because we're moving variant selection into
+        a higher level, we remove the FontVariant argument from the lower-level call.
+        * platform/graphics/FontCascadeFonts.cpp:
+        (WebCore::FontCascadeFonts::glyphDataForVariant): Use early-return style.
+        (WebCore::FontCascadeFonts::glyphDataForNormalVariant): Ditto.
+        * platform/graphics/cocoa/FontCascadeCocoa.mm:
+        (WebCore::FontCascade::fontForCombiningCharacterSequence): Because we're moving
+        variant selection into a higher level, we remove the FontVariant argument from
+        the lower-level call.
+        * platform/graphics/cocoa/FontCocoa.mm:
+        (WebCore::Font::smallCapsSupportsCharacter):
+        (WebCore::Font::allSmallCapsSupportsCharacter):
+        (WebCore::smallCapsOpenTypeDictionary): Helper function for
+        smallCapsSupportsCharacter().
+        (WebCore::smallCapsTrueTypeDictionary): Ditto.
+        (WebCore::unionBitVectors):
+        (WebCore::Font::glyphsSupportedBySmallCaps): Compute a bit vector of supported
+        glyphs.
+        (WebCore::Font::glyphsSupportedByAllSmallCaps): Ditto.
+        (WebCore::createDerivativeFont): Moving common code into its own helper function.
+        (WebCore::Font::createFontWithoutSmallCaps):
+        (WebCore::Font::platformCreateScaledFont): Use the common code.
+        * platform/graphics/mac/ComplexTextController.cpp:
+        (WebCore::capitalized): What is the capitalized form of a character?
+        (WebCore::ComplexTextController::collectComplexTextRuns): Implement the core
+        logic of this patch. This includes the retry when we encounter a character which
+        is not supported by the font feature.
+        * platform/spi/cocoa/CoreTextSPI.h:
+
</ins><span class="cx"> 2015-12-10  Zan Dobersek  &lt;zdobersek@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [TexMap] Remove the TEXMAP_OPENGL_ES_2 define
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/Font.cpp (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/Font.cpp        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/Font.cpp        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -295,6 +295,18 @@
</span><span class="cx">     return m_derivedFontData-&gt;smallCaps.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+const Font&amp; Font::noSynthesizableFeaturesFont() const
+{
+    if (!m_derivedFontData)
+        m_derivedFontData = std::make_unique&lt;DerivedFontData&gt;(isCustomFont());
+    if (!m_derivedFontData-&gt;noSynthesizableFeatures)
+        m_derivedFontData-&gt;noSynthesizableFeatures = createFontWithoutSynthesizableFeatures();
+    ASSERT(m_derivedFontData-&gt;noSynthesizableFeatures != this);
+    return *m_derivedFontData-&gt;noSynthesizableFeatures;
+}
+#endif
+
</ins><span class="cx"> const Font* Font::emphasisMarkFont(const FontDescription&amp; fontDescription) const
</span><span class="cx"> {
</span><span class="cx">     if (!m_derivedFontData)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFonth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/Font.h (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/Font.h        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/Font.h        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -35,6 +35,8 @@
</span><span class="cx"> #if ENABLE(OPENTYPE_VERTICAL)
</span><span class="cx"> #include &quot;OpenTypeVerticalData.h&quot;
</span><span class="cx"> #endif
</span><ins>+#include &lt;wtf/BitVector.h&gt;
+#include &lt;wtf/Optional.h&gt;
</ins><span class="cx"> #include &lt;wtf/TypeCasts.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringHash.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -101,12 +103,16 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     const Font* smallCapsFont(const FontDescription&amp;) const;
</span><ins>+    const Font&amp; noSynthesizableFeaturesFont() const;
</ins><span class="cx">     const Font* emphasisMarkFont(const FontDescription&amp;) const;
</span><span class="cx">     const Font&amp; brokenIdeographFont() const;
</span><span class="cx">     const Font&amp; nonSyntheticItalicFont() const;
</span><span class="cx"> 
</span><span class="cx">     const Font* variantFont(const FontDescription&amp; description, FontVariant variant) const
</span><span class="cx">     {
</span><ins>+#if PLATFORM(COCOA)
+        ASSERT(variant != SmallCapsVariant);
+#endif
</ins><span class="cx">         switch (variant) {
</span><span class="cx">         case SmallCapsVariant:
</span><span class="cx">             return smallCapsFont(description);
</span><span class="lines">@@ -122,6 +128,8 @@
</span><span class="cx">         return const_cast&lt;Font*&gt;(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    bool variantCapsSupportsCharacterForSynthesis(FontVariantCaps, UChar32) const;
+
</ins><span class="cx">     const Font&amp; verticalRightOrientationFont() const;
</span><span class="cx">     const Font&amp; uprightOrientationFont() const;
</span><span class="cx"> 
</span><span class="lines">@@ -193,6 +201,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     CFDictionaryRef getCFStringAttributes(bool enableKerning, FontOrientation) const;
</span><ins>+    const BitVector&amp; glyphsSupportedBySmallCaps() const;
+    const BitVector&amp; glyphsSupportedByAllSmallCaps() const;
+    const BitVector&amp; glyphsSupportedByPetiteCaps() const;
+    const BitVector&amp; glyphsSupportedByAllPetiteCaps() const;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA) || USE(HARFBUZZ)
</span><span class="lines">@@ -226,6 +238,7 @@
</span><span class="cx"> 
</span><span class="cx">     void initCharWidths();
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;Font&gt; createFontWithoutSynthesizableFeatures() const;
</ins><span class="cx">     RefPtr&lt;Font&gt; createScaledFont(const FontDescription&amp;, float scaleFactor) const;
</span><span class="cx">     RefPtr&lt;Font&gt; platformCreateScaledFont(const FontDescription&amp;, float scaleFactor) const;
</span><span class="cx"> 
</span><span class="lines">@@ -275,6 +288,7 @@
</span><span class="cx"> 
</span><span class="cx">         bool forCustomFont;
</span><span class="cx">         RefPtr&lt;Font&gt; smallCaps;
</span><ins>+        RefPtr&lt;Font&gt; noSynthesizableFeatures;
</ins><span class="cx">         RefPtr&lt;Font&gt; emphasisMark;
</span><span class="cx">         RefPtr&lt;Font&gt; brokenIdeograph;
</span><span class="cx">         RefPtr&lt;Font&gt; verticalRightOrientation;
</span><span class="lines">@@ -290,6 +304,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     mutable HashMap&lt;unsigned, RetainPtr&lt;CFDictionaryRef&gt;&gt; m_CFStringAttributes;
</span><ins>+    mutable Optional&lt;BitVector&gt; m_glyphsSupportedBySmallCaps;
+    mutable Optional&lt;BitVector&gt; m_glyphsSupportedByAllSmallCaps;
+    mutable Optional&lt;BitVector&gt; m_glyphsSupportedByPetiteCaps;
+    mutable Optional&lt;BitVector&gt; m_glyphsSupportedByAllPetiteCaps;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA) || USE(HARFBUZZ)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascade.h (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascade.h        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.h        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -187,7 +187,7 @@
</span><span class="cx">     GlyphData glyphDataForCharacter(UChar32, bool mirror, FontVariant = AutoVariant) const;
</span><span class="cx">     
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-    const Font* fontForCombiningCharacterSequence(const UChar*, size_t length, FontVariant) const;
</del><ins>+    const Font* fontForCombiningCharacterSequence(const UChar*, size_t length) const;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     static bool isCJKIdeograph(UChar32);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadeFontscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascadeFonts.cpp (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascadeFonts.cpp        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/FontCascadeFonts.cpp        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -360,13 +360,13 @@
</span><span class="cx">         if (fontRanges.isNull())
</span><span class="cx">             break;
</span><span class="cx">         GlyphData data = fontRanges.glyphDataForCharacter(c);
</span><del>-        if (data.font) {
-            // The variantFont function should not normally return 0.
-            // But if it does, we will just render the capital letter big.
-            if (const Font* variantFont = data.font-&gt;variantFont(description, variant))
-                return variantFont-&gt;glyphDataForCharacter(c);
-            return data;
-        }
</del><ins>+        if (!data.font)
+            continue;
+        // The variantFont function should not normally return 0.
+        // But if it does, we will just render the capital letter big.
+        if (const Font* variantFont = data.font-&gt;variantFont(description, variant))
+            return variantFont-&gt;glyphDataForCharacter(c);
+        return data;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return glyphDataForSystemFallback(c, description, variant);
</span><span class="lines">@@ -379,23 +379,23 @@
</span><span class="cx">         if (fontRanges.isNull())
</span><span class="cx">             break;
</span><span class="cx">         GlyphData data = fontRanges.glyphDataForCharacter(c);
</span><del>-        if (data.font) {
-            if (data.font-&gt;platformData().orientation() == Vertical &amp;&amp; !data.font-&gt;isTextOrientationFallback()) {
-                if (!FontCascade::isCJKIdeographOrSymbol(c))
-                    return glyphDataForNonCJKCharacterWithGlyphOrientation(c, description.nonCJKGlyphOrientation(), data);
</del><ins>+        if (!data.font)
+            continue;
+        if (data.font-&gt;platformData().orientation() == Vertical &amp;&amp; !data.font-&gt;isTextOrientationFallback()) {
+            if (!FontCascade::isCJKIdeographOrSymbol(c))
+                return glyphDataForNonCJKCharacterWithGlyphOrientation(c, description.nonCJKGlyphOrientation(), data);
</ins><span class="cx"> 
</span><del>-                if (!data.font-&gt;hasVerticalGlyphs()) {
-                    // Use the broken ideograph font data. The broken ideograph font will use the horizontal width of glyphs
-                    // to make sure you get a square (even for broken glyphs like symbols used for punctuation).
-                    return glyphDataForVariant(c, description, BrokenIdeographVariant, fallbackIndex);
-                }
</del><ins>+            if (!data.font-&gt;hasVerticalGlyphs()) {
+                // Use the broken ideograph font data. The broken ideograph font will use the horizontal width of glyphs
+                // to make sure you get a square (even for broken glyphs like symbols used for punctuation).
+                return glyphDataForVariant(c, description, BrokenIdeographVariant, fallbackIndex);
+            }
</ins><span class="cx"> #if PLATFORM(COCOA) || USE(CAIRO)
</span><del>-                if (data.font-&gt;platformData().syntheticOblique())
-                    return glyphDataForCJKCharacterWithoutSyntheticItalic(c, data);
</del><ins>+            if (data.font-&gt;platformData().syntheticOblique())
+                return glyphDataForCJKCharacterWithoutSyntheticItalic(c, data);
</ins><span class="cx"> #endif
</span><del>-            }
-            return data;
</del><span class="cx">         }
</span><ins>+        return data;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return glyphDataForSystemFallback(c, description, NormalVariant);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCascadeCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -689,13 +689,13 @@
</span><span class="cx">     return controller.offsetForPosition(x, includePartialGlyphs);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const Font* FontCascade::fontForCombiningCharacterSequence(const UChar* characters, size_t length, FontVariant variant) const
</del><ins>+const Font* FontCascade::fontForCombiningCharacterSequence(const UChar* characters, size_t length) const
</ins><span class="cx"> {
</span><span class="cx">     UChar32 baseCharacter;
</span><span class="cx">     size_t baseCharacterLength = 0;
</span><span class="cx">     U16_NEXT(characters, baseCharacterLength, length, baseCharacter);
</span><span class="cx"> 
</span><del>-    GlyphData baseCharacterGlyphData = glyphDataForCharacter(baseCharacter, false, variant);
</del><ins>+    GlyphData baseCharacterGlyphData = glyphDataForCharacter(baseCharacter, false, NormalVariant);
</ins><span class="cx"> 
</span><span class="cx">     if (!baseCharacterGlyphData.glyph)
</span><span class="cx">         return nullptr;
</span><span class="lines">@@ -713,26 +713,20 @@
</span><span class="cx">         if (baseCharacter &gt;= 0x0600 &amp;&amp; baseCharacter &lt;= 0x06ff &amp;&amp; font-&gt;shouldNotBeUsedForArabic())
</span><span class="cx">             continue;
</span><span class="cx"> #endif
</span><del>-        if (variant == NormalVariant) {
-            if (font-&gt;platformData().orientation() == Vertical) {
-                if (isCJKIdeographOrSymbol(baseCharacter) &amp;&amp; !font-&gt;hasVerticalGlyphs()) {
-                    variant = BrokenIdeographVariant;
-                    font = &amp;font-&gt;brokenIdeographFont();
-                } else if (m_fontDescription.nonCJKGlyphOrientation() == NonCJKGlyphOrientation::Mixed) {
-                    const Font&amp; verticalRightFont = font-&gt;verticalRightOrientationFont();
-                    Glyph verticalRightGlyph = verticalRightFont.glyphForCharacter(baseCharacter);
-                    if (verticalRightGlyph == baseCharacterGlyphData.glyph)
-                        font = &amp;verticalRightFont;
-                } else {
-                    const Font&amp; uprightFont = font-&gt;uprightOrientationFont();
-                    Glyph uprightGlyph = uprightFont.glyphForCharacter(baseCharacter);
-                    if (uprightGlyph != baseCharacterGlyphData.glyph)
-                        font = &amp;uprightFont;
-                }
</del><ins>+        if (font-&gt;platformData().orientation() == Vertical) {
+            if (isCJKIdeographOrSymbol(baseCharacter) &amp;&amp; !font-&gt;hasVerticalGlyphs())
+                font = &amp;font-&gt;brokenIdeographFont();
+            else if (m_fontDescription.nonCJKGlyphOrientation() == NonCJKGlyphOrientation::Mixed) {
+                const Font&amp; verticalRightFont = font-&gt;verticalRightOrientationFont();
+                Glyph verticalRightGlyph = verticalRightFont.glyphForCharacter(baseCharacter);
+                if (verticalRightGlyph == baseCharacterGlyphData.glyph)
+                    font = &amp;verticalRightFont;
+            } else {
+                const Font&amp; uprightFont = font-&gt;uprightOrientationFont();
+                Glyph uprightGlyph = uprightFont.glyphForCharacter(baseCharacter);
+                if (uprightGlyph != baseCharacterGlyphData.glyph)
+                    font = &amp;uprightFont;
</ins><span class="cx">             }
</span><del>-        } else {
-            if (const Font* variantFont = font-&gt;variantFont(m_fontDescription, variant))
-                font = variantFont;
</del><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (font == baseCharacterGlyphData.font)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #import &lt;float.h&gt;
</span><span class="cx"> #import &lt;unicode/uchar.h&gt;
</span><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><ins>+#import &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/StdLibExtras.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -281,56 +282,271 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;Font&gt; Font::platformCreateScaledFont(const FontDescription&amp;, float scaleFactor) const
</del><ins>+bool Font::variantCapsSupportsCharacterForSynthesis(FontVariantCaps fontVariantCaps, UChar32 character) const
</ins><span class="cx"> {
</span><del>-    float size = m_platformData.size() * scaleFactor;
</del><ins>+#if (PLATFORM(IOS) &amp;&amp; TARGET_OS_IOS &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 90300) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101100 &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101104)
+    Glyph glyph = glyphForCharacter(character);
+    if (!glyph)
+        return false;
</ins><span class="cx"> 
</span><del>-#if USE(APPKIT)
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
</del><ins>+    switch (fontVariantCaps) {
+    case FontVariantCaps::Small: {
+        auto&amp; supported = glyphsSupportedBySmallCaps();
+        return supported.size() &gt; glyph &amp;&amp; supported.get(glyph);
+    }
+    case FontVariantCaps::Petite: {
+        auto&amp; supported = glyphsSupportedByPetiteCaps();
+        return supported.size() &gt; glyph &amp;&amp; supported.get(glyph);
+    }
+    case FontVariantCaps::AllSmall: {
+        auto&amp; supported = glyphsSupportedByAllSmallCaps();
+        return supported.size() &gt; glyph &amp;&amp; supported.get(glyph);
+    }
+    case FontVariantCaps::AllPetite: {
+        auto&amp; supported = glyphsSupportedByAllPetiteCaps();
+        return supported.size() &gt; glyph &amp;&amp; supported.get(glyph);
+    }
+    default:
+        // Synthesis only supports the variant-caps values listed above.
+        return true;
+    }
+#else
+    UNUSED_PARAM(character);
</ins><span class="cx"> 
</span><del>-    FontPlatformData scaledFontData(toCTFont([[NSFontManager sharedFontManager] convertFont:m_platformData.nsFont() toSize:size]), size, false, false, m_platformData.orientation());
</del><ins>+    switch (fontVariantCaps) {
+    case FontVariantCaps::Small:
+    case FontVariantCaps::Petite:
+    case FontVariantCaps::AllSmall:
+    case FontVariantCaps::AllPetite:
+        return false;
+    default:
+        // Synthesis only supports the variant-caps values listed above.
+        return true;
+    }
+#endif
+}
</ins><span class="cx"> 
</span><del>-    if (scaledFontData.font()) {
-        NSFontManager *fontManager = [NSFontManager sharedFontManager];
-        NSFontTraitMask fontTraits = [fontManager traitsOfFont:m_platformData.nsFont()];
</del><ins>+#if (PLATFORM(IOS) &amp;&amp; TARGET_OS_IOS &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 90300) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101100 &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101104)
+static RetainPtr&lt;CFDictionaryRef&gt; smallCapsOpenTypeDictionary(CFStringRef key, int rawValue)
+{
+    RetainPtr&lt;CFNumberRef&gt; value = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawValue));
+    CFTypeRef keys[] = { kCTFontOpenTypeFeatureTag, kCTFontOpenTypeFeatureValue };
+    CFTypeRef values[] = { key, value.get() };
+    return adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
+}
</ins><span class="cx"> 
</span><del>-        if (m_platformData.m_syntheticBold)
-            fontTraits |= NSBoldFontMask;
-        if (m_platformData.m_syntheticOblique)
-            fontTraits |= NSItalicFontMask;
</del><ins>+static RetainPtr&lt;CFDictionaryRef&gt; smallCapsTrueTypeDictionary(int rawKey, int rawValue)
+{
+    CFNumberRef key = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawKey);
+    CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawValue);
+    CFTypeRef keys[] = { kCTFontFeatureTypeIdentifierKey, kCTFontFeatureSelectorIdentifierKey };
+    CFTypeRef values[] = { key, value };
+    return adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
+}
</ins><span class="cx"> 
</span><del>-        NSFontTraitMask scaledFontTraits = [fontManager traitsOfFont:scaledFontData.nsFont()];
-        scaledFontData.m_syntheticBold = (fontTraits &amp; NSBoldFontMask) &amp;&amp; !(scaledFontTraits &amp; NSBoldFontMask);
-        scaledFontData.m_syntheticOblique = (fontTraits &amp; NSItalicFontMask) &amp;&amp; !(scaledFontTraits &amp; NSItalicFontMask);
-
-        return Font::create(scaledFontData);
</del><ins>+static void unionBitVectors(BitVector&amp; result, CFBitVectorRef source)
+{
+    CFIndex length = CFBitVectorGetCount(source);
+    result.ensureSize(length);
+    CFIndex min = 0;
+    while (min &lt; length) {
+        CFIndex nextIndex = CFBitVectorGetFirstIndexOfBit(source, CFRangeMake(min, length - min), 1);
+        if (nextIndex == kCFNotFound)
+            break;
+        result.set(nextIndex, true);
+        min = nextIndex + 1;
</ins><span class="cx">     }
</span><del>-    END_BLOCK_OBJC_EXCEPTIONS;
</del><ins>+}
</ins><span class="cx"> 
</span><del>-    return nullptr;
-#else
-    CTFontSymbolicTraits fontTraits = CTFontGetSymbolicTraits(m_platformData.font());
-    RetainPtr&lt;CTFontDescriptorRef&gt; fontDescriptor = adoptCF(CTFontCopyFontDescriptor(m_platformData.font()));
-    RetainPtr&lt;CTFontRef&gt; scaledFont = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), size, nullptr));
-    FontPlatformData scaledFontData(scaledFont.get(), size, false, false, m_platformData.orientation());
</del><ins>+static void injectOpenTypeCoverage(CFStringRef feature, CTFontRef font, BitVector&amp; result)
+{
+    RetainPtr&lt;CFBitVectorRef&gt; source = adoptCF(CTFontCopyGlyphCoverageForFeature(font, smallCapsOpenTypeDictionary(feature, 1).get()));
+    unionBitVectors(result, source.get());
+}
</ins><span class="cx"> 
</span><del>-    if (scaledFontData.font()) {
-        if (m_platformData.m_syntheticBold)
-            fontTraits |= kCTFontBoldTrait;
-        if (m_platformData.m_syntheticOblique)
-            fontTraits |= kCTFontItalicTrait;
</del><ins>+static void injectTrueTypeCoverage(int type, int selector, CTFontRef font, BitVector&amp; result)
+{
+    RetainPtr&lt;CFBitVectorRef&gt; source = adoptCF(CTFontCopyGlyphCoverageForFeature(font, smallCapsTrueTypeDictionary(type, selector).get()));
+    unionBitVectors(result, source.get());
+}
</ins><span class="cx"> 
</span><del>-        CTFontSymbolicTraits scaledFontTraits = CTFontGetSymbolicTraits(scaledFontData.font());
-        scaledFontData.m_syntheticBold = (fontTraits &amp; kCTFontBoldTrait) &amp;&amp; !(scaledFontTraits &amp; kCTFontTraitBold);
-        scaledFontData.m_syntheticOblique = (fontTraits &amp; kCTFontItalicTrait) &amp;&amp; !(scaledFontTraits &amp; kCTFontTraitItalic);
</del><ins>+const BitVector&amp; Font::glyphsSupportedBySmallCaps() const
+{
+    if (!m_glyphsSupportedBySmallCaps) {
+        m_glyphsSupportedBySmallCaps = BitVector();
+        injectOpenTypeCoverage(CFSTR(&quot;smcp&quot;), platformData().font(), m_glyphsSupportedBySmallCaps.value());
+        injectTrueTypeCoverage(kLowerCaseType, kLowerCaseSmallCapsSelector, platformData().font(), m_glyphsSupportedBySmallCaps.value());
+    }
+    return m_glyphsSupportedBySmallCaps.value();
+}
</ins><span class="cx"> 
</span><del>-        return Font::create(scaledFontData);
</del><ins>+const BitVector&amp; Font::glyphsSupportedByAllSmallCaps() const
+{
+    if (!m_glyphsSupportedByAllSmallCaps) {
+        m_glyphsSupportedByAllSmallCaps = BitVector();
+        injectOpenTypeCoverage(CFSTR(&quot;smcp&quot;), platformData().font(), m_glyphsSupportedByAllSmallCaps.value());
+        injectOpenTypeCoverage(CFSTR(&quot;c2sc&quot;), platformData().font(), m_glyphsSupportedByAllSmallCaps.value());
+        injectTrueTypeCoverage(kLowerCaseType, kLowerCaseSmallCapsSelector, platformData().font(), m_glyphsSupportedByAllSmallCaps.value());
+        injectTrueTypeCoverage(kUpperCaseType, kUpperCaseSmallCapsSelector, platformData().font(), m_glyphsSupportedByAllSmallCaps.value());
</ins><span class="cx">     }
</span><ins>+    return m_glyphsSupportedByAllSmallCaps.value();
+}
</ins><span class="cx"> 
</span><del>-    return nullptr;
</del><ins>+const BitVector&amp; Font::glyphsSupportedByPetiteCaps() const
+{
+    if (!m_glyphsSupportedByPetiteCaps) {
+        m_glyphsSupportedByPetiteCaps = BitVector();
+        injectOpenTypeCoverage(CFSTR(&quot;pcap&quot;), platformData().font(), m_glyphsSupportedByPetiteCaps.value());
+        injectTrueTypeCoverage(kLowerCaseType, kLowerCasePetiteCapsSelector, platformData().font(), m_glyphsSupportedByPetiteCaps.value());
+    }
+    return m_glyphsSupportedByPetiteCaps.value();
+}
+
+const BitVector&amp; Font::glyphsSupportedByAllPetiteCaps() const
+{
+    if (!m_glyphsSupportedByAllPetiteCaps) {
+        m_glyphsSupportedByAllPetiteCaps = BitVector();
+        injectOpenTypeCoverage(CFSTR(&quot;pcap&quot;), platformData().font(), m_glyphsSupportedByAllPetiteCaps.value());
+        injectOpenTypeCoverage(CFSTR(&quot;c2pc&quot;), platformData().font(), m_glyphsSupportedByAllPetiteCaps.value());
+        injectTrueTypeCoverage(kLowerCaseType, kLowerCasePetiteCapsSelector, platformData().font(), m_glyphsSupportedByAllPetiteCaps.value());
+        injectTrueTypeCoverage(kUpperCaseType, kUpperCasePetiteCapsSelector, platformData().font(), m_glyphsSupportedByAllPetiteCaps.value());
+    }
+    return m_glyphsSupportedByAllPetiteCaps.value();
+}
</ins><span class="cx"> #endif
</span><ins>+
+static RefPtr&lt;Font&gt; createDerivativeFont(CTFontRef font, float size, FontOrientation orientation, CTFontSymbolicTraits fontTraits, bool syntheticBold, bool syntheticItalic)
+{
+    if (!font)
+        return nullptr;
+
+    FontPlatformData scaledFontData(font, size, false, false, orientation);
+
+    if (syntheticBold)
+        fontTraits |= kCTFontBoldTrait;
+    if (syntheticItalic)
+        fontTraits |= kCTFontItalicTrait;
+
+    CTFontSymbolicTraits scaledFontTraits = CTFontGetSymbolicTraits(scaledFontData.font());
+    scaledFontData.m_syntheticBold = (fontTraits &amp; kCTFontBoldTrait) &amp;&amp; !(scaledFontTraits &amp; kCTFontTraitBold);
+    scaledFontData.m_syntheticOblique = (fontTraits &amp; kCTFontItalicTrait) &amp;&amp; !(scaledFontTraits &amp; kCTFontTraitItalic);
+
+    return Font::create(scaledFontData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool isOpenTypeFeature(CFDictionaryRef feature)
+{
+    return CFDictionaryContainsKey(feature, kCTFontOpenTypeFeatureTag) &amp;&amp; CFDictionaryContainsKey(feature, kCTFontOpenTypeFeatureValue);
+}
+
+static inline bool isTrueTypeFeature(CFDictionaryRef feature)
+{
+    return CFDictionaryContainsKey(feature, kCTFontFeatureTypeIdentifierKey) &amp;&amp; CFDictionaryContainsKey(feature, kCTFontFeatureSelectorIdentifierKey);
+}
+
+static inline Optional&lt;CFStringRef&gt; openTypeFeature(CFDictionaryRef feature)
+{
+    ASSERT(isOpenTypeFeature(feature));
+    CFStringRef tag = static_cast&lt;CFStringRef&gt;(CFDictionaryGetValue(feature, kCTFontOpenTypeFeatureTag));
+    int rawValue;
+    CFNumberRef value = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(feature, kCTFontOpenTypeFeatureValue));
+    auto success = CFNumberGetValue(value, kCFNumberIntType, &amp;rawValue);
+    ASSERT_UNUSED(success, success);
+    return rawValue ? Optional&lt;CFStringRef&gt;(tag) : Nullopt;
+}
+
+static inline std::pair&lt;int, int&gt; trueTypeFeature(CFDictionaryRef feature)
+{
+    ASSERT(isTrueTypeFeature(feature));
+    int rawType;
+    CFNumberRef type = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
+    auto success = CFNumberGetValue(type, kCFNumberIntType, &amp;rawType);
+    ASSERT_UNUSED(success, success);
+    int rawSelector;
+    CFNumberRef selector = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(feature, kCTFontFeatureSelectorIdentifierKey));
+    success = CFNumberGetValue(selector, kCFNumberIntType, &amp;rawSelector);
+    ASSERT_UNUSED(success, success);
+    return std::make_pair(rawType, rawSelector);
+}
+
+static inline RetainPtr&lt;CFDictionaryRef&gt; removedFeature(CFDictionaryRef feature)
+{
+    bool isOpenType = isOpenTypeFeature(feature);
+    bool isTrueType = isTrueTypeFeature(feature);
+    if (!isOpenType &amp;&amp; !isTrueType)
+        return feature; // We don't understand this font format.
+    RetainPtr&lt;CFMutableDictionaryRef&gt; result = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
+    if (isOpenType) {
+        auto featureTag = openTypeFeature(feature);
+        if (featureTag &amp;&amp; (CFEqual(featureTag.value(), CFSTR(&quot;smcp&quot;))
+            || CFEqual(featureTag.value(), CFSTR(&quot;c2sc&quot;))
+            || CFEqual(featureTag.value(), CFSTR(&quot;pcap&quot;))
+            || CFEqual(featureTag.value(), CFSTR(&quot;c2pc&quot;)))) {
+            int rawZero = 0;
+            RetainPtr&lt;CFNumberRef&gt; zero = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawZero));
+            CFDictionaryAddValue(result.get(), kCTFontOpenTypeFeatureTag, featureTag.value());
+            CFDictionaryAddValue(result.get(), kCTFontOpenTypeFeatureValue, zero.get());
+        } else {
+            CFDictionaryAddValue(result.get(), kCTFontOpenTypeFeatureTag, CFDictionaryGetValue(feature, kCTFontOpenTypeFeatureTag));
+            CFDictionaryAddValue(result.get(), kCTFontOpenTypeFeatureValue, CFDictionaryGetValue(feature, kCTFontOpenTypeFeatureValue));
+        }
+    }
+    if (isTrueType) {
+        auto trueTypeFeaturePair = trueTypeFeature(feature);
+        if (trueTypeFeaturePair.first == kLowerCaseType &amp;&amp; (trueTypeFeaturePair.second == kLowerCaseSmallCapsSelector || trueTypeFeaturePair.second == kLowerCasePetiteCapsSelector)) {
+            int rawSelector = kDefaultLowerCaseSelector;
+            RetainPtr&lt;CFNumberRef&gt; selector = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawSelector));
+            CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
+            CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, selector.get());
+        } else if (trueTypeFeaturePair.first == kUpperCaseType &amp;&amp; (trueTypeFeaturePair.second == kUpperCaseSmallCapsSelector || trueTypeFeaturePair.second == kUpperCasePetiteCapsSelector)) {
+            int rawSelector = kDefaultUpperCaseSelector;
+            RetainPtr&lt;CFNumberRef&gt; selector = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;rawSelector));
+            CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
+            CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, selector.get());
+        } else {
+            CFDictionaryAddValue(result.get(), kCTFontFeatureTypeIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureTypeIdentifierKey));
+            CFDictionaryAddValue(result.get(), kCTFontFeatureSelectorIdentifierKey, CFDictionaryGetValue(feature, kCTFontFeatureSelectorIdentifierKey));
+        }
+    }
+    return result;
+}
+
+static RetainPtr&lt;CTFontRef&gt; createCTFontWithoutSynthesizableFeatures(CTFontRef font)
+{
+    RetainPtr&lt;CFArrayRef&gt; features = static_cast&lt;CFArrayRef&gt;(CTFontCopyAttribute(font, kCTFontFeatureSettingsAttribute));
+    if (!features)
+        return font;
+    CFIndex featureCount = CFArrayGetCount(features.get());
+    RetainPtr&lt;CFMutableArrayRef&gt; newFeatures = adoptCF(CFArrayCreateMutable(kCFAllocatorDefault, featureCount, &amp;kCFTypeArrayCallBacks));
+    for (CFIndex i = 0; i &lt; featureCount; ++i) {
+        CFDictionaryRef feature = static_cast&lt;CFDictionaryRef&gt;(CFArrayGetValueAtIndex(features.get(), i));
+        CFArrayAppendValue(newFeatures.get(), removedFeature(feature).get());
+    }
+    CFTypeRef keys[] = { kCTFontFeatureSettingsAttribute };
+    CFTypeRef values[] = { newFeatures.get() };
+    RetainPtr&lt;CFDictionaryRef&gt; attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
+    RetainPtr&lt;CTFontDescriptorRef&gt; newDescriptor = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
+    return adoptCF(CTFontCreateCopyWithAttributes(font, CTFontGetSize(font), nullptr, newDescriptor.get()));
+}
+
+RefPtr&lt;Font&gt; Font::createFontWithoutSynthesizableFeatures() const
+{
+    float size = m_platformData.size();
+    CTFontSymbolicTraits fontTraits = CTFontGetSymbolicTraits(m_platformData.font());
+    RetainPtr&lt;CTFontRef&gt; ctFont = createCTFontWithoutSynthesizableFeatures(m_platformData.font());
+    return createDerivativeFont(ctFont.get(), size, m_platformData.orientation(), fontTraits, m_platformData.m_syntheticBold, m_platformData.m_syntheticOblique);
+}
+
+RefPtr&lt;Font&gt; Font::platformCreateScaledFont(const FontDescription&amp;, float scaleFactor) const
+{
+    float size = m_platformData.size() * scaleFactor;
+    CTFontSymbolicTraits fontTraits = CTFontGetSymbolicTraits(m_platformData.font());
+    RetainPtr&lt;CTFontDescriptorRef&gt; fontDescriptor = adoptCF(CTFontCopyFontDescriptor(m_platformData.font()));
+    RetainPtr&lt;CTFontRef&gt; scaledFont = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), size, nullptr));
+
+    return createDerivativeFont(scaledFont.get(), size, m_platformData.orientation(), fontTraits, m_platformData.m_syntheticBold, m_platformData.m_syntheticOblique);
+}
+
</ins><span class="cx"> void Font::determinePitch()
</span><span class="cx"> {
</span><span class="cx"> #if USE(APPKIT)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacComplexTextControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &quot;RenderText.h&quot;
</span><span class="cx"> #include &quot;TextBreakIterator.h&quot;
</span><span class="cx"> #include &quot;TextRun.h&quot;
</span><ins>+#include &lt;wtf/Optional.h&gt;
</ins><span class="cx"> #include &lt;wtf/StdLibExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/unicode/CharacterNames.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -290,6 +291,19 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+// FIXME: Capitalization is language-dependent and context-dependent and should operate on grapheme clusters instead of codepoints.
+static inline Optional&lt;UChar32&gt; capitalized(UChar32 baseCharacter)
+{
+    if (U_GET_GC_MASK(baseCharacter) &amp; U_GC_M_MASK)
+        return Nullopt;
+
+    UChar32 uppercaseCharacter = u_toupper(baseCharacter);
+    ASSERT(uppercaseCharacter == baseCharacter || uppercaseCharacter &lt;= 0xFFFF);
+    if (uppercaseCharacter != baseCharacter)
+        return uppercaseCharacter;
+    return Nullopt;
+}
+
</ins><span class="cx"> void ComplexTextController::collectComplexTextRuns()
</span><span class="cx"> {
</span><span class="cx">     if (!m_end)
</span><span class="lines">@@ -305,7 +319,11 @@
</span><span class="cx">     } else
</span><span class="cx">         cp = m_run.characters16();
</span><span class="cx"> 
</span><del>-    if (m_font.isSmallCaps())
</del><ins>+    auto fontVariantCaps = m_font.fontDescription().variantCaps();
+    bool engageAllSmallCapsProcessing = fontVariantCaps == FontVariantCaps::AllSmall || fontVariantCaps == FontVariantCaps::AllPetite;
+    bool engageSmallCapsProcessing = engageAllSmallCapsProcessing || fontVariantCaps == FontVariantCaps::Small || fontVariantCaps == FontVariantCaps::Petite;
+
+    if (engageAllSmallCapsProcessing || engageSmallCapsProcessing)
</ins><span class="cx">         m_smallCapsBuffer.resize(m_end);
</span><span class="cx"> 
</span><span class="cx">     unsigned indexOfFontTransition = 0;
</span><span class="lines">@@ -314,63 +332,100 @@
</span><span class="cx"> 
</span><span class="cx">     const Font* font;
</span><span class="cx">     const Font* nextFont;
</span><ins>+    const Font* synthesizedFont = nullptr;
+    const Font* smallSynthesizedFont = nullptr;
</ins><span class="cx"> 
</span><span class="cx">     unsigned markCount;
</span><del>-    const UChar* sequenceStart = curr;
</del><span class="cx">     UChar32 baseCharacter;
</span><span class="cx">     if (!advanceByCombiningCharacterSequence(curr, end, baseCharacter, markCount))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    UChar uppercaseCharacter = 0;
</del><ins>+    nextFont = m_font.fontForCombiningCharacterSequence(cp, curr - cp);
</ins><span class="cx"> 
</span><del>-    bool isSmallCaps;
-    bool nextIsSmallCaps = m_font.isSmallCaps() &amp;&amp; !(U_GET_GC_MASK(baseCharacter) &amp; U_GC_M_MASK) &amp;&amp; (uppercaseCharacter = u_toupper(baseCharacter)) != baseCharacter;
-    ASSERT(uppercaseCharacter == 0 || u_toupper(baseCharacter) &lt;= 0xFFFF);
</del><ins>+    bool isSmallCaps = false;
+    bool nextIsSmallCaps = false;
</ins><span class="cx"> 
</span><del>-    if (nextIsSmallCaps) {
-        m_smallCapsBuffer[sequenceStart - cp] = uppercaseCharacter;
-        for (unsigned i = 0; i &lt; markCount; ++i)
-            m_smallCapsBuffer[sequenceStart - cp + i + 1] = sequenceStart[i + 1];
</del><ins>+    auto capitalizedBase = capitalized(baseCharacter);
+    if (nextFont &amp;&amp; nextFont != Font::systemFallback() &amp;&amp; (capitalizedBase || engageAllSmallCapsProcessing)
+        &amp;&amp; !nextFont-&gt;variantCapsSupportsCharacterForSynthesis(fontVariantCaps, baseCharacter)) {
+        synthesizedFont = &amp;nextFont-&gt;noSynthesizableFeaturesFont();
+        smallSynthesizedFont = synthesizedFont-&gt;smallCapsFont(m_font.fontDescription());
+        m_smallCapsBuffer[0] = capitalizedBase ? capitalizedBase.value() : cp[0];
+        for (unsigned i = 1; cp + i &lt; curr; ++i)
+            m_smallCapsBuffer[i] = cp[i];
+        nextIsSmallCaps = true;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    nextFont = m_font.fontForCombiningCharacterSequence(sequenceStart, curr - sequenceStart, nextIsSmallCaps ? SmallCapsVariant : NormalVariant);
-
</del><span class="cx">     while (curr &lt; end) {
</span><span class="cx">         font = nextFont;
</span><span class="cx">         isSmallCaps = nextIsSmallCaps;
</span><del>-        int index = curr - cp;
</del><ins>+        unsigned index = curr - cp;
</ins><span class="cx"> 
</span><span class="cx">         if (!advanceByCombiningCharacterSequence(curr, end, baseCharacter, markCount))
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        if (m_font.isSmallCaps()) {
-            ASSERT(u_toupper(baseCharacter) &lt;= 0xFFFF);
-            uppercaseCharacter = u_toupper(baseCharacter);
-            nextIsSmallCaps = uppercaseCharacter != baseCharacter;
-            if (nextIsSmallCaps) {
-                m_smallCapsBuffer[index] = uppercaseCharacter;
</del><ins>+        if (synthesizedFont) {
+            if (auto capitalizedBase = capitalized(baseCharacter)) {
+                m_smallCapsBuffer[index] = capitalizedBase.value();
</ins><span class="cx">                 for (unsigned i = 0; i &lt; markCount; ++i)
</span><span class="cx">                     m_smallCapsBuffer[index + i + 1] = cp[index + i + 1];
</span><ins>+                nextIsSmallCaps = true;
+            } else {
+                if (engageAllSmallCapsProcessing) {
+                    for (unsigned i = 0; i &lt; curr - cp - index; ++i)
+                        m_smallCapsBuffer[index + i] = cp[index + i];
+                }
+                nextIsSmallCaps = engageAllSmallCapsProcessing;
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (baseCharacter == zeroWidthJoiner)
</span><span class="cx">             nextFont = font;
</span><span class="cx">         else
</span><del>-            nextFont = m_font.fontForCombiningCharacterSequence(cp + index, curr - cp - index, nextIsSmallCaps ? SmallCapsVariant : NormalVariant);
</del><ins>+            nextFont = m_font.fontForCombiningCharacterSequence(cp + index, curr - cp - index);
</ins><span class="cx"> 
</span><del>-        if (nextFont != font) {
-            int itemStart = static_cast&lt;int&gt;(indexOfFontTransition);
-            int itemLength = index - indexOfFontTransition;
-            collectComplexTextRunsForCharacters((isSmallCaps ? m_smallCapsBuffer.data() : cp) + itemStart, itemLength, itemStart, font);
</del><ins>+        capitalizedBase = capitalized(baseCharacter);
+        if (!synthesizedFont &amp;&amp; nextFont &amp;&amp; nextFont != Font::systemFallback() &amp;&amp; (capitalizedBase || engageAllSmallCapsProcessing)
+            &amp;&amp; !nextFont-&gt;variantCapsSupportsCharacterForSynthesis(fontVariantCaps, baseCharacter)) {
+            // Rather than synthesize each character individually, we should synthesize the entire &quot;run&quot; if any character requires synthesis.
+            synthesizedFont = &amp;nextFont-&gt;noSynthesizableFeaturesFont();
+            smallSynthesizedFont = synthesizedFont-&gt;smallCapsFont(m_font.fontDescription());
+            nextIsSmallCaps = true;
+            curr = cp + indexOfFontTransition;
+            continue;
+        }
+
+        if (nextFont != font || nextIsSmallCaps != isSmallCaps) {
+            unsigned itemLength = index - indexOfFontTransition;
+            if (itemLength) {
+                unsigned itemStart = indexOfFontTransition;
+                if (synthesizedFont) {
+                    if (isSmallCaps)
+                        collectComplexTextRunsForCharacters(m_smallCapsBuffer.data() + itemStart, itemLength, itemStart, smallSynthesizedFont);
+                    else
+                        collectComplexTextRunsForCharacters(cp + itemStart, itemLength, itemStart, synthesizedFont);
+                } else
+                    collectComplexTextRunsForCharacters(cp + itemStart, itemLength, itemStart, font);
+                if (nextFont != font) {
+                    synthesizedFont = nullptr;
+                    smallSynthesizedFont = nullptr;
+                    nextIsSmallCaps = false;
+                }
+            }
</ins><span class="cx">             indexOfFontTransition = index;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    int itemLength = m_end - indexOfFontTransition;
</del><ins>+    unsigned itemLength = m_end - indexOfFontTransition;
</ins><span class="cx">     if (itemLength) {
</span><del>-        int itemStart = indexOfFontTransition;
-        collectComplexTextRunsForCharacters((nextIsSmallCaps ? m_smallCapsBuffer.data() : cp) + itemStart, itemLength, itemStart, nextFont);
</del><ins>+        unsigned itemStart = indexOfFontTransition;
+        if (synthesizedFont) {
+            if (nextIsSmallCaps)
+                collectComplexTextRunsForCharacters(m_smallCapsBuffer.data() + itemStart, itemLength, itemStart, smallSynthesizedFont);
+            else
+                collectComplexTextRunsForCharacters(cp + itemStart, itemLength, itemStart, synthesizedFont);
+        } else
+            collectComplexTextRunsForCharacters(cp + itemStart, itemLength, itemStart, nextFont);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!m_run.ltr())
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformspicocoaCoreTextSPIh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h (193893 => 193894)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h        2015-12-10 08:28:19 UTC (rev 193893)
+++ trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h        2015-12-10 08:37:03 UTC (rev 193894)
</span><span class="lines">@@ -74,6 +74,7 @@
</span><span class="cx"> CTFontDescriptorRef CTFontDescriptorCreateForUIType(CTFontUIFontType, CGFloat size, CFStringRef language);
</span><span class="cx"> CTFontDescriptorRef CTFontDescriptorCreateWithTextStyle(CFStringRef style, CFStringRef size, CFStringRef language);
</span><span class="cx"> CTFontDescriptorRef CTFontDescriptorCreateCopyWithSymbolicTraits(CTFontDescriptorRef original, CTFontSymbolicTraits symTraitValue, CTFontSymbolicTraits symTraitMask);
</span><ins>+CFBitVectorRef CTFontCopyGlyphCoverageForFeature(CTFontRef, CFDictionaryRef feature);
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> #if !USE(APPLE_INTERNAL_SDK)
</span></span></pre>
</div>
</div>

</body>
</html>