<!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>[185632] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/185632">185632</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2015-06-16 18:26:22 -0700 (Tue, 16 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Source/WebCore:
REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/184899">r184899</a>): [Cocoa] font-variant: small-caps is not honored with web fonts
https://bugs.webkit.org/show_bug.cgi?id=145873
&lt;rdar://problem/21314282&gt;

Reviewed by Dean Jackson.

When font-variant: small-caps is applied, we create a smaller version of the original font
and draw capital characters in that smaller font. CGFontRefs do not have an intrinsic size,
and web fonts historically only had a CGFontRef, which means that there was no need to
convert the CGFontRef to be smaller (as opposed to regular fonts, which had a CTFontRef and
therefore needed the conversion). Instead, we just changed m_size, which represents
the size that the text should be drawn in.

However, <a href="http://trac.webkit.org/projects/webkit/changeset/184899">r184899</a> gave CTFontRefs to web fonts. This means that now the FontPlatformData's
m_size variable disagreed with the CTFontRef member. The solution here is to unify the web
font and regular font codepaths, and treat them the same throughout.

Note that this patch removes the last use of the m_isCustomFont variable. As soon as we
entirely migrate to CORETEXT_WEB_FONTS, we should delete this variable.

Test: fast/text/small-caps-web-font.html

* platform/graphics/cocoa/FontCocoa.mm:
(WebCore::Font::platformCreateScaledFont): Treat web fonts the same as regular fonts.
* platform/text/TextFlags.h: Add a comment regarding teh deletion of m_isCustomFont.

LayoutTests:
font-variant: small-caps is not honored with web fonts
https://bugs.webkit.org/show_bug.cgi?id=145873
&lt;rdar://problem/21314282&gt;

Reviewed by Dean Jackson.

* fast/text/small-caps-web-font-expected.html: Added.
* fast/text/small-caps-web-font.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCocoamm">trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextFlagsh">trunk/Source/WebCore/platform/text/TextFlags.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasttextsmallcapswebfontexpectedhtml">trunk/LayoutTests/fast/text/small-caps-web-font-expected.html</a></li>
<li><a href="#trunkLayoutTestsfasttextsmallcapswebfonthtml">trunk/LayoutTests/fast/text/small-caps-web-font.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (185631 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-06-17 01:06:56 UTC (rev 185631)
+++ trunk/LayoutTests/ChangeLog        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-06-16  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        font-variant: small-caps is not honored with web fonts
+        https://bugs.webkit.org/show_bug.cgi?id=145873
+        &lt;rdar://problem/21314282&gt;
+
+        Reviewed by Dean Jackson.
+
+        * fast/text/small-caps-web-font-expected.html: Added.
+        * fast/text/small-caps-web-font.html: Added.
+
</ins><span class="cx"> 2015-06-16  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Inlining in the DFG trashes ByteCodeParser::m_currentInstruction for the calling function
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextsmallcapswebfontexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/small-caps-web-font-expected.html (0 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/small-caps-web-font-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/small-caps-web-font-expected.html        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;WebAhem&quot;;
+    src: url(&quot;../../resources/Ahem.ttf&quot;) format(truetype);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that small-caps works with webfonts. This test passes if
+there are two black rectangles below which butt up against each other.
+&lt;div style=&quot;font: 100px WebAhem;&quot;&gt;A&lt;span style=&quot;font-size: 70px;&quot;&gt;bcdefg&lt;/span&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextsmallcapswebfonthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/small-caps-web-font.html (0 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/small-caps-web-font.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/small-caps-web-font.html        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: &quot;WebAhem&quot;;
+    src: url(&quot;../../resources/Ahem.ttf&quot;) format(truetype);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that small-caps works with webfonts. This test passes if
+there are two black rectangles below which butt up against each other.
+&lt;div style=&quot;font: 100px WebAhem; font-variant: small-caps;&quot;&gt;Abcdefg&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185631 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-17 01:06:56 UTC (rev 185631)
+++ trunk/Source/WebCore/ChangeLog        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2015-06-16  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        REGRESSION(r184899): [Cocoa] font-variant: small-caps is not honored with web fonts
+        https://bugs.webkit.org/show_bug.cgi?id=145873
+        &lt;rdar://problem/21314282&gt;
+
+        Reviewed by Dean Jackson.
+
+        When font-variant: small-caps is applied, we create a smaller version of the original font
+        and draw capital characters in that smaller font. CGFontRefs do not have an intrinsic size,
+        and web fonts historically only had a CGFontRef, which means that there was no need to
+        convert the CGFontRef to be smaller (as opposed to regular fonts, which had a CTFontRef and
+        therefore needed the conversion). Instead, we just changed m_size, which represents
+        the size that the text should be drawn in.
+
+        However, r184899 gave CTFontRefs to web fonts. This means that now the FontPlatformData's
+        m_size variable disagreed with the CTFontRef member. The solution here is to unify the web
+        font and regular font codepaths, and treat them the same throughout.
+
+        Note that this patch removes the last use of the m_isCustomFont variable. As soon as we
+        entirely migrate to CORETEXT_WEB_FONTS, we should delete this variable.
+
+        Test: fast/text/small-caps-web-font.html
+
+        * platform/graphics/cocoa/FontCocoa.mm:
+        (WebCore::Font::platformCreateScaledFont): Treat web fonts the same as regular fonts.
+        * platform/text/TextFlags.h: Add a comment regarding teh deletion of m_isCustomFont.
+
</ins><span class="cx"> 2015-06-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         [Content Extensions] Implement branch compaction for DFA bytecode.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm (185631 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-06-17 01:06:56 UTC (rev 185631)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -311,11 +311,13 @@
</span><span class="cx"> 
</span><span class="cx"> PassRefPtr&lt;Font&gt; Font::platformCreateScaledFont(const FontDescription&amp;, float scaleFactor) const
</span><span class="cx"> {
</span><ins>+#if !CORETEXT_WEB_FONTS
</ins><span class="cx">     if (isCustomFont()) {
</span><span class="cx">         FontPlatformData scaledFontData(m_platformData);
</span><span class="cx">         scaledFontData.m_size = scaledFontData.m_size * scaleFactor;
</span><span class="cx">         return Font::create(scaledFontData, true, false);
</span><span class="cx">     }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     float size = m_platformData.size() * scaleFactor;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextFlagsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextFlags.h (185631 => 185632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextFlags.h        2015-06-17 01:06:56 UTC (rev 185631)
+++ trunk/Source/WebCore/platform/text/TextFlags.h        2015-06-17 01:26:22 UTC (rev 185632)
</span><span class="lines">@@ -27,6 +27,8 @@
</span><span class="cx"> #define TextFlags_h
</span><span class="cx"> 
</span><span class="cx"> // &lt;rdar://problem/16980736&gt;: Web fonts crash on certain OSes when using CTFontManagerCreateFontDescriptorFromData()
</span><ins>+// FIXME: When we have moved entirely to CORETEXT_WEB_FONTS, remove the isCustomFont member variable from Font, since it will no longer be used.
+// See https://bug-145873-attachments.webkit.org/attachment.cgi?id=254710
</ins><span class="cx"> #if (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &lt; 80000) || (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101000)
</span><span class="cx"> #define CORETEXT_WEB_FONTS 0
</span><span class="cx"> #else
</span></span></pre>
</div>
</div>

</body>
</html>