<!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>[194287] branches/safari-601-branch</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/194287">194287</a></dd>
<dt>Author</dt> <dd>matthew_hanson@apple.com</dd>
<dt>Date</dt> <dd>2015-12-18 13:11:15 -0800 (Fri, 18 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/193894">r193894</a>. rdar://problem/23769758</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari601branchLayoutTestsplatformmacTestExpectations">branches/safari-601-branch/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#branchessafari601branchLayoutTestsplatformmacfastwritingmodebrokenideographsmallcapsexpectedtxt">branches/safari-601-branch/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt</a></li>
<li><a href="#branchessafari601branchSourceWebCoreChangeLog">branches/safari-601-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsFontcpp">branches/safari-601-branch/Source/WebCore/platform/graphics/Font.cpp</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsFonth">branches/safari-601-branch/Source/WebCore/platform/graphics/Font.h</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsFontCascadeh">branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascade.h</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsFontCascadeFontscpp">branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascadeFonts.cpp</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsFontDescriptionh">branches/safari-601-branch/Source/WebCore/platform/graphics/FontDescription.h</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicscocoaFontCascadeCocoamm">branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicscocoaFontCocoamm">branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsiosFontCacheIOSmm">branches/safari-601-branch/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformgraphicsmacComplexTextControllercpp">branches/safari-601-branch/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp</a></li>
<li><a href="#branchessafari601branchSourceWebCoreplatformspicocoaCoreTextSPIh">branches/safari-601-branch/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h</a></li>
<li><a href="#branchessafari601branchSourceWebCorerenderingRenderThemeIOSmm">branches/safari-601-branch/Source/WebCore/rendering/RenderThemeIOS.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesiscoverageexpectedhtml">branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesiscoveragehtml">branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesisexpectedhtml">branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesishtml">branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesiscoverageexpectedhtml">branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesiscoveragehtml">branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesisexpectedhtml">branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html</a></li>
<li><a href="#branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesishtml">branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesiscoverageexpectedhtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage-expected.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesiscoveragehtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-coverage.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesisexpectedhtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis-expected.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantpetitecapssynthesishtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-petite-caps-synthesis.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesiscoverageexpectedhtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage-expected.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesiscoveragehtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-coverage.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesisexpectedhtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis-expected.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestscss3fontvariantsmallcapssynthesishtml"></a>
<div class="addfile"><h4>Added: branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis.html (0 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis.html                                (rev 0)
+++ branches/safari-601-branch/LayoutTests/css3/font-variant-small-caps-synthesis.html        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/LayoutTests/platform/mac/TestExpectations (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/platform/mac/TestExpectations        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/LayoutTests/platform/mac/TestExpectations        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -1372,3 +1372,7 @@
</span><span class="cx"> webkit.org/b/149774 css3/font-variant-all.html [ Pass Failure ImageOnlyFailure ] 
</span><span class="cx"> webkit.org/b/149774 css3/font-variant-font-face-all.html [ Pass Failure ImageOnlyFailure ] 
</span><span class="cx"> webkit.org/b/149774 css3/font-variant-font-face-override.html [ Pass Failure ImageOnlyFailure ] 
</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="branchessafari601branchLayoutTestsplatformmacfastwritingmodebrokenideographsmallcapsexpectedtxt"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/LayoutTests/platform/mac/fast/writing-mode/broken-ideograph-small-caps-expected.txt        2015-12-18 21:11:15 UTC (rev 194287)
</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="branchessafari601branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/ChangeLog (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/ChangeLog        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/ChangeLog        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -1,3 +1,64 @@
</span><ins>+2015-12-17  Matthew Hanson  &lt;matthew_hanson@apple.com&gt;
+
+        Merge r193894. rdar://problem/23769758
+
+    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-18  Matthew Hanson  &lt;matthew_hanson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge r192582. rdar://problem/23910980
</span></span></pre></div>
<a id="branchessafari601branchSourceWebCoreplatformgraphicsFontcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/Font.cpp (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/Font.cpp        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/Font.cpp        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -307,6 +307,18 @@
</span><span class="cx">     return m_derivedFontData-&gt;smallCaps;
</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"> PassRefPtr&lt;Font&gt; Font::emphasisMarkFont(const FontDescription&amp; fontDescription) const
</span><span class="cx"> {
</span><span class="cx">     if (!m_derivedFontData)
</span></span></pre></div>
<a id="branchessafari601branchSourceWebCoreplatformgraphicsFonth"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/Font.h (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/Font.h        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/Font.h        2015-12-18 21:11:15 UTC (rev 194287)
</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">@@ -104,9 +106,13 @@
</span><span class="cx">     PassRefPtr&lt;Font&gt; emphasisMarkFont(const FontDescription&amp;) const;
</span><span class="cx">     PassRefPtr&lt;Font&gt; brokenIdeographFont() const;
</span><span class="cx">     PassRefPtr&lt;Font&gt; nonSyntheticItalicFont() const;
</span><ins>+    const Font&amp; noSynthesizableFeaturesFont() const;
</ins><span class="cx"> 
</span><span class="cx">     PassRefPtr&lt;Font&gt; 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">     PassRefPtr&lt;Font&gt; verticalRightOrientationFont() const;
</span><span class="cx">     PassRefPtr&lt;Font&gt; uprightOrientationFont() const;
</span><span class="cx"> 
</span><span class="lines">@@ -194,7 +202,12 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     CFDictionaryRef getCFStringAttributes(bool enableKerning, FontOrientation) const;
</span><ins>+
</ins><span class="cx">     bool hasCustomTracking() const { return isSystemFont(); }
</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">@@ -229,6 +242,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">     PassRefPtr&lt;Font&gt; createScaledFont(const FontDescription&amp;, float scaleFactor) const;
</span><span class="cx">     PassRefPtr&lt;Font&gt; platformCreateScaledFont(const FontDescription&amp;, float scaleFactor) const;
</span><span class="cx"> 
</span><span class="lines">@@ -274,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">@@ -292,6 +307,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="branchessafari601branchSourceWebCoreplatformgraphicsFontCascadeh"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascade.h (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascade.h        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascade.h        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -191,7 +191,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="branchessafari601branchSourceWebCoreplatformgraphicsFontCascadeFontscpp"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascadeFonts.cpp (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascadeFonts.cpp        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/FontCascadeFonts.cpp        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -296,15 +296,15 @@
</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.
-            RefPtr&lt;Font&gt; variantFont = data.font-&gt;variantFont(description, variant);
-            if (!variantFont)
-                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.
+        RefPtr&lt;Font&gt; variantFont = data.font-&gt;variantFont(description, variant);
+        if (!variantFont)
+            return data;
</ins><span class="cx"> 
</span><del>-            return variantFont-&gt;glyphDataForCharacter(c);
-        }
</del><ins>+        return variantFont-&gt;glyphDataForCharacter(c);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return glyphDataForSystemFallback(c, description, variant);
</span><span class="lines">@@ -317,23 +317,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="branchessafari601branchSourceWebCoreplatformgraphicsFontDescriptionh"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/FontDescription.h (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/FontDescription.h        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/FontDescription.h        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -204,7 +204,7 @@
</span><span class="cx">     {
</span><span class="cx">         return familiesEqualForTextAutoSizing(other)
</span><span class="cx">             &amp;&amp; m_specifiedSize == other.m_specifiedSize
</span><del>-            &amp;&amp; variantSettings() == other.other.variantSettings()
</del><ins>+            &amp;&amp; variantSettings() == other.variantSettings()
</ins><span class="cx">             &amp;&amp; m_isAbsoluteSize == other.m_isAbsoluteSize;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="branchessafari601branchSourceWebCoreplatformgraphicscocoaFontCascadeCocoamm"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -756,13 +756,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 0;
</span><span class="lines">@@ -780,26 +780,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 = font-&gt;brokenIdeographFont().get();
-                } else if (m_fontDescription.nonCJKGlyphOrientation() == NonCJKGlyphOrientationVerticalRight) {
-                    Font* verticalRightFont = font-&gt;verticalRightOrientationFont().get();
-                    Glyph verticalRightGlyph = verticalRightFont-&gt;glyphForCharacter(baseCharacter);
-                    if (verticalRightGlyph == baseCharacterGlyphData.glyph)
-                        font = verticalRightFont;
-                } else {
-                    Font* uprightFont = font-&gt;uprightOrientationFont().get();
-                    Glyph uprightGlyph = uprightFont-&gt;glyphForCharacter(baseCharacter);
-                    if (uprightGlyph != baseCharacterGlyphData.glyph)
-                        font = uprightFont;
-                }
</del><ins>+        if (font-&gt;platformData().orientation() == Vertical) {
+            if (isCJKIdeographOrSymbol(baseCharacter) &amp;&amp; !font-&gt;hasVerticalGlyphs())
+                font = font-&gt;brokenIdeographFont().get();
+            else if (m_fontDescription.nonCJKGlyphOrientation() == NonCJKGlyphOrientationVerticalRight) {
+                Font* verticalRightFont = font-&gt;verticalRightOrientationFont().get();
+                Glyph verticalRightGlyph = verticalRightFont-&gt;glyphForCharacter(baseCharacter);
+                if (verticalRightGlyph == baseCharacterGlyphData.glyph)
+                    font = verticalRightFont;
+            } else {
+                Font* uprightFont = font-&gt;uprightOrientationFont().get();
+                Glyph uprightGlyph = uprightFont-&gt;glyphForCharacter(baseCharacter);
+                if (uprightGlyph != baseCharacterGlyphData.glyph)
+                    font = uprightFont;
</ins><span class="cx">             }
</span><del>-        } else {
-            if (const Font* variantFont = font-&gt;variantFont(m_fontDescription, variant).get())
-                font = variantFont;
</del><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (font == baseCharacterGlyphData.font)
</span></span></pre></div>
<a id="branchessafari601branchSourceWebCoreplatformgraphicscocoaFontCocoamm"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-12-18 21:11:15 UTC (rev 194287)
</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">@@ -314,64 +315,271 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&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>-#if !CORETEXT_WEB_FONTS
-    if (isCustomFont()) {
-        FontPlatformData scaledFontData(m_platformData);
-        scaledFontData.m_size = scaledFontData.m_size * scaleFactor;
-        return Font::create(scaledFontData, true, false);
</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;
+
+    switch (fontVariantCaps) {
+    case FontVariantCaps::Small: {
+        auto&amp; supported = glyphsSupportedBySmallCaps();
+        return supported.size() &gt; glyph &amp;&amp; supported.get(glyph);
</ins><span class="cx">     }
</span><ins>+    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);
+
+    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;
+    }
</ins><span class="cx"> #endif
</span><ins>+}
</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)
+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 USE(APPKIT)
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
</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>-    FontPlatformData scaledFontData(reinterpret_cast&lt;CTFontRef&gt;([[NSFontManager sharedFontManager] convertFont:m_platformData.nsFont() toSize:size]), size, false, false, m_platformData.orientation());
</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>-    if (scaledFontData.font()) {
-        NSFontManager *fontManager = [NSFontManager sharedFontManager];
-        NSFontTraitMask fontTraits = [fontManager traitsOfFont:m_platformData.nsFont()];
</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 (m_platformData.m_syntheticBold)
-            fontTraits |= NSBoldFontMask;
-        if (m_platformData.m_syntheticOblique)
-            fontTraits |= NSItalicFontMask;
</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>-        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);
</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><del>-    END_BLOCK_OBJC_EXCEPTIONS;
</del><ins>+    return m_glyphsSupportedByAllSmallCaps.value();
+}
</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>+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();
+}
</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>+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();
+}
+#endif
</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>+static RefPtr&lt;Font&gt; createDerivativeFont(CTFontRef font, float size, FontOrientation orientation, CTFontSymbolicTraits fontTraits, bool syntheticBold, bool syntheticItalic)
+{
+    if (!font)
+        return nullptr;
</ins><span class="cx"> 
</span><del>-        return Font::create(scaledFontData);
</del><ins>+    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);
+}
+
+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));
+        }
</ins><span class="cx">     }
</span><ins>+    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;
+}
</ins><span class="cx"> 
</span><del>-    return nullptr;
-#endif
</del><ins>+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()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+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);
+}
+
+PassRefPtr&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="branchessafari601branchSourceWebCoreplatformgraphicsiosFontCacheIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     if (!substituteFont)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    substituteFont = applyFontFeatureSettings(substituteFont.get(), description.featureSettings(), description.variantSettings());
</del><ins>+    substituteFont = applyFontFeatureSettings(substituteFont.get(), nullptr, nullptr, description.featureSettings(), description.variantSettings());
</ins><span class="cx"> 
</span><span class="cx">     CTFontSymbolicTraits originalTraits = CTFontGetSymbolicTraits(ctFont);
</span><span class="cx">     CTFontSymbolicTraits actualTraits = 0;
</span><span class="lines">@@ -700,7 +700,7 @@
</span><span class="cx">     if (!ctFont)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    ctFont = applyFontFeatureSettings(ctFont.get(), fontDescription.featureSettings(), fontDescription.variantSettings());
</del><ins>+    ctFont = applyFontFeatureSettings(ctFont.get(), nullptr, nullptr, fontDescription.featureSettings(), fontDescription.variantSettings());
</ins><span class="cx"> 
</span><span class="cx">     CTFontSymbolicTraits actualTraits = 0;
</span><span class="cx">     if (isFontWeightBold(fontDescription.weight()) || fontDescription.italic())
</span></span></pre></div>
<a id="branchessafari601branchSourceWebCoreplatformgraphicsmacComplexTextControllercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp        2015-12-18 21:11:15 UTC (rev 194287)
</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">@@ -289,6 +290,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">@@ -304,7 +318,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">@@ -312,74 +330,103 @@
</span><span class="cx">     const UChar* end = cp + m_end;
</span><span class="cx"> 
</span><span class="cx">     const Font* font;
</span><del>-    bool isMissingGlyph;
</del><span class="cx">     const Font* nextFont;
</span><del>-    bool nextIsMissingGlyph;
</del><ins>+    const Font* synthesizedFont = nullptr;
+    RefPtr&lt;Font&gt; 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>-    nextIsMissingGlyph = false;
-    nextFont = m_font.fontForCombiningCharacterSequence(sequenceStart, curr - sequenceStart, nextIsSmallCaps ? SmallCapsVariant : NormalVariant);
-    if (!nextFont)
-        nextIsMissingGlyph = true;
</del><ins>+    nextFont = m_font.fontForCombiningCharacterSequence(cp, curr - cp);
</ins><span class="cx"> 
</span><span class="cx">     while (curr &lt; end) {
</span><span class="cx">         font = nextFont;
</span><del>-        isMissingGlyph = nextIsMissingGlyph;
</del><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><del>-        nextIsMissingGlyph = false;
</del><span class="cx">         if (baseCharacter == zeroWidthJoiner)
</span><span class="cx">             nextFont = font;
</span><del>-        else {
-            nextFont = m_font.fontForCombiningCharacterSequence(cp + index, curr - cp - index, nextIsSmallCaps ? SmallCapsVariant : NormalVariant);
-            if (!nextFont)
-                nextIsMissingGlyph = true;
</del><ins>+        else
+            nextFont = m_font.fontForCombiningCharacterSequence(cp + index, curr - cp - index);
+
+        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;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (nextFont != font || nextIsMissingGlyph != isMissingGlyph) {
-            int itemStart = static_cast&lt;int&gt;(indexOfFontTransition);
-            int itemLength = index - indexOfFontTransition;
-            collectComplexTextRunsForCharacters((isSmallCaps ? m_smallCapsBuffer.data() : cp) + itemStart, itemLength, itemStart, !isMissingGlyph ? font : 0);
</del><ins>+        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.get());
+                    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, !nextIsMissingGlyph ? nextFont : 0);
</del><ins>+        unsigned itemStart = indexOfFontTransition;
+        if (synthesizedFont) {
+            if (nextIsSmallCaps)
+                collectComplexTextRunsForCharacters(m_smallCapsBuffer.data() + itemStart, itemLength, itemStart, smallSynthesizedFont.get());
+            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="branchessafari601branchSourceWebCoreplatformspicocoaCoreTextSPIh"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -76,6 +76,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>
<a id="branchessafari601branchSourceWebCorerenderingRenderThemeIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-601-branch/Source/WebCore/rendering/RenderThemeIOS.mm (194286 => 194287)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-601-branch/Source/WebCore/rendering/RenderThemeIOS.mm        2015-12-18 21:03:53 UTC (rev 194286)
+++ branches/safari-601-branch/Source/WebCore/rendering/RenderThemeIOS.mm        2015-12-18 21:11:15 UTC (rev 194287)
</span><span class="lines">@@ -1271,7 +1271,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(fontDescriptor);
</span><span class="cx">     RetainPtr&lt;CTFontRef&gt; font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr));
</span><del>-    font = applyFontFeatureSettings(font.get(), nullptr, nullptr, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variantSettings());
</del><ins>+    font = applyFontFeatureSettings(font.get(), nullptr, nullptr, fontDescription.featureSettings(), fontDescription.variantSettings());
</ins><span class="cx">     fontDescription.setIsAbsoluteSize(true);
</span><span class="cx">     fontDescription.setOneFamily(textStyle);
</span><span class="cx">     fontDescription.setSpecifiedSize(CTFontGetSize(font.get()));
</span></span></pre>
</div>
</div>

</body>
</html>