<!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>[185200] trunk/Source/WebCore</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/185200">185200</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2015-06-04 09:50:38 -0700 (Thu, 04 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Cocoa] Clean up m_font inside FontPlatformData
https://bugs.webkit.org/show_bug.cgi?id=145634

Patch by Myles C. Maxfield &lt;mmaxfield@apple.com&gt; on 2015-06-04
Reviewed by Andreas Kling.

FontPlatformDatas are used as keys in a HashMap. This means that they need
to be able to represent a &quot;deleted&quot; value. Previously, this &quot;deleted&quot; value
was represented as setting the pointer value of m_font to -1, and guarding
all uses of m_font to make sure it wasn't -1 before dereferencing it.

This patch simplifies FontPlatformData to represent a &quot;deleted&quot; value using
a separate boolean member variable. This class is already big enough that
the increased space is negligable (the class already contains two CoreText
fonts in addition to a CoreGraphics font). Because of this simplification,
m_font can now be a RetainPtr, instead of being manually retained and
released.

There is still a long way to go before FontPlatformData is acceptably
clean and understandable. This patch improves one aspect of it, and more
improvements will eventually follow.

No new tests because there is no behavior change.

* platform/graphics/FontCache.cpp: Remove unused variable.
* platform/graphics/FontPlatformData.cpp:
(WebCore::FontPlatformData::FontPlatformData): Clean up all the PLATFORM
macros in favor of a single bool. Also, update to include new state.
(WebCore::FontPlatformData::operator=): Update to include new state.
* platform/graphics/FontPlatformData.h:
(WebCore::FontPlatformData::font): Update to account for RetainPtr.
(WebCore::FontPlatformData::nsFont): Ditto.
(WebCore::FontPlatformData::setNSFont): Ditto.
(WebCore::FontPlatformData::hash): Update to include new state.
(WebCore::FontPlatformData::operator==): Ditto.
(WebCore::FontPlatformData::isHashTableDeletedValue): Use new state.
(WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
(WebCore::FontPlatformData::isValidCTFontRef): Deleted.
* platform/graphics/cocoa/FontPlatformDataCocoa.mm:
(WebCore::FontPlatformData::platformDataInit): No need for manual retain
and release.
(WebCore::FontPlatformData::platformDataAssign): Ditto.
(WebCore::FontPlatformData::platformIsEqual): Update to account for
RetanPtr.
(WebCore::FontPlatformData::setFont): No need for manual retain and
release.
(WebCore::FontPlatformData::FontPlatformData): Deleted.
(WebCore::FontPlatformData::~FontPlatformData): Deleted.
* platform/graphics/win/FontPlatformDataCairoWin.cpp:
(WebCore::FontPlatformData::~FontPlatformData): m_scaledFont is always
valid.
(WebCore::FontPlatformData::platformDataAssign): Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCachecpp">trunk/Source/WebCore/platform/graphics/FontCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp">trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatah">trunk/Source/WebCore/platform/graphics/FontPlatformData.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontPlatformDataCocoamm">trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicswinFontPlatformDataCairoWincpp">trunk/Source/WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/ChangeLog        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -1,3 +1,57 @@
</span><ins>+2015-06-04  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [Cocoa] Clean up m_font inside FontPlatformData
+        https://bugs.webkit.org/show_bug.cgi?id=145634
+
+        Reviewed by Andreas Kling.
+
+        FontPlatformDatas are used as keys in a HashMap. This means that they need
+        to be able to represent a &quot;deleted&quot; value. Previously, this &quot;deleted&quot; value
+        was represented as setting the pointer value of m_font to -1, and guarding
+        all uses of m_font to make sure it wasn't -1 before dereferencing it.
+
+        This patch simplifies FontPlatformData to represent a &quot;deleted&quot; value using
+        a separate boolean member variable. This class is already big enough that
+        the increased space is negligable (the class already contains two CoreText
+        fonts in addition to a CoreGraphics font). Because of this simplification,
+        m_font can now be a RetainPtr, instead of being manually retained and
+        released.
+
+        There is still a long way to go before FontPlatformData is acceptably
+        clean and understandable. This patch improves one aspect of it, and more
+        improvements will eventually follow.
+
+        No new tests because there is no behavior change.
+
+        * platform/graphics/FontCache.cpp: Remove unused variable.
+        * platform/graphics/FontPlatformData.cpp:
+        (WebCore::FontPlatformData::FontPlatformData): Clean up all the PLATFORM
+        macros in favor of a single bool. Also, update to include new state.
+        (WebCore::FontPlatformData::operator=): Update to include new state.
+        * platform/graphics/FontPlatformData.h:
+        (WebCore::FontPlatformData::font): Update to account for RetainPtr.
+        (WebCore::FontPlatformData::nsFont): Ditto.
+        (WebCore::FontPlatformData::setNSFont): Ditto.
+        (WebCore::FontPlatformData::hash): Update to include new state.
+        (WebCore::FontPlatformData::operator==): Ditto.
+        (WebCore::FontPlatformData::isHashTableDeletedValue): Use new state.
+        (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
+        (WebCore::FontPlatformData::isValidCTFontRef): Deleted.
+        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+        (WebCore::FontPlatformData::platformDataInit): No need for manual retain
+        and release.
+        (WebCore::FontPlatformData::platformDataAssign): Ditto.
+        (WebCore::FontPlatformData::platformIsEqual): Update to account for
+        RetanPtr.
+        (WebCore::FontPlatformData::setFont): No need for manual retain and
+        release.
+        (WebCore::FontPlatformData::FontPlatformData): Deleted.
+        (WebCore::FontPlatformData::~FontPlatformData): Deleted.
+        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
+        (WebCore::FontPlatformData::~FontPlatformData): m_scaledFont is always
+        valid.
+        (WebCore::FontPlatformData::platformDataAssign): Ditto.
+
</ins><span class="cx"> 2015-06-03  Carlos Alberto Lopez Perez  &lt;clopez@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] [Wayland] Build is broken on trunk
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.cpp (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.cpp        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/platform/graphics/FontCache.cpp        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -342,7 +342,6 @@
</span><span class="cx"> 
</span><span class="cx"> struct FontDataCacheKeyTraits : WTF::GenericHashTraits&lt;FontPlatformData&gt; {
</span><span class="cx">     static const bool emptyValueIsZero = true;
</span><del>-    static const bool needsDestruction = true;
</del><span class="cx">     static const FontPlatformData&amp; emptyValue()
</span><span class="cx">     {
</span><span class="cx">         static NeverDestroyed&lt;FontPlatformData&gt; key(0.f, false, false);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -35,15 +35,8 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> FontPlatformData::FontPlatformData(WTF::HashTableDeletedValueType)
</span><del>-#if PLATFORM(WIN)
-    : m_font(WTF::HashTableDeletedValue)
-#elif PLATFORM(COCOA)
-    : m_font(hashTableDeletedFontValue())
-#endif
</del><ins>+    : m_isHashTableDeletedValue(true)
</ins><span class="cx"> {
</span><del>-#if USE(CAIRO)
-    m_scaledFont = hashTableDeletedFontValue();
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FontPlatformData::FontPlatformData()
</span><span class="lines">@@ -70,6 +63,7 @@
</span><span class="cx"> FontPlatformData::FontPlatformData(const FontPlatformData&amp; source)
</span><span class="cx">     : FontPlatformData(source.m_size, source.m_syntheticBold, source.m_syntheticOblique, source.m_orientation, source.m_widthVariant)
</span><span class="cx"> {
</span><ins>+    m_isHashTableDeletedValue = source.m_isHashTableDeletedValue;
</ins><span class="cx">     m_isColorBitmapFont = source.m_isColorBitmapFont;
</span><span class="cx">     m_isCompositeFontReference = source.m_isCompositeFontReference;
</span><span class="cx">     platformDataInit(source);
</span><span class="lines">@@ -81,6 +75,7 @@
</span><span class="cx">     if (this == &amp;other)
</span><span class="cx">         return *this;
</span><span class="cx"> 
</span><ins>+    m_isHashTableDeletedValue = other.m_isHashTableDeletedValue;
</ins><span class="cx">     m_syntheticBold = other.m_syntheticBold;
</span><span class="cx">     m_syntheticOblique = other.m_syntheticOblique;
</span><span class="cx">     m_orientation = other.m_orientation;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.h (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx">     HFONT hfont() const { return m_font ? m_font-&gt;get() : 0; }
</span><span class="cx">     bool useGDI() const { return m_useGDI; }
</span><span class="cx"> #elif PLATFORM(COCOA)
</span><del>-    CTFontRef font() const { return m_font; }
</del><ins>+    CTFontRef font() const { return m_font.get(); }
</ins><span class="cx">     void setFont(CTFontRef);
</span><span class="cx"> 
</span><span class="cx">     CTFontRef ctFont() const;
</span><span class="lines">@@ -118,8 +118,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(APPKIT)
</span><span class="cx">     // FIXME: Remove this when all NSFont usage is removed.
</span><del>-    NSFont *nsFont() const { return (NSFont *)m_font; }
-    void setNSFont(NSFont *font) { setFont((CTFontRef)font); }
</del><ins>+    NSFont *nsFont() const { return reinterpret_cast&lt;NSFont *&gt;(const_cast&lt;__CTFont*&gt;(m_font.get())); }
+    void setNSFont(NSFont *font) { setFont(reinterpret_cast&lt;CTFontRef&gt;(font)); }
</ins><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -151,11 +151,11 @@
</span><span class="cx"> #elif OS(DARWIN)
</span><span class="cx"> #if USE(APPKIT)
</span><span class="cx">         ASSERT(m_font || !m_cgFont);
</span><del>-        uintptr_t hashCodes[3] = { (uintptr_t)m_font, m_widthVariant, static_cast&lt;uintptr_t&gt;(m_orientation &lt;&lt; 2 | m_syntheticBold &lt;&lt; 1 | m_syntheticOblique) };
</del><ins>+        uintptr_t hashCodes[3] = { reinterpret_cast&lt;uintptr_t&gt;(const_cast&lt;__CTFont*&gt;(m_font.get())), m_widthVariant, static_cast&lt;uintptr_t&gt;(m_isHashTableDeletedValue &lt;&lt; 3 | m_orientation &lt;&lt; 2 | m_syntheticBold &lt;&lt; 1 | m_syntheticOblique) };
</ins><span class="cx"> #else
</span><span class="cx">         ASSERT(m_font || !m_cgFont || m_isEmoji);
</span><del>-        uintptr_t hashCodes[3] = { static_cast&lt;uintptr_t&gt;(CFHash(m_font)), m_widthVariant, static_cast&lt;uintptr_t&gt;(m_isEmoji &lt;&lt; 3 | m_orientation &lt;&lt; 2 | m_syntheticBold &lt;&lt; 1 | m_syntheticOblique) };
-#endif // !PLATFORM(IOS)
</del><ins>+        uintptr_t hashCodes[3] = { static_cast&lt;uintptr_t&gt;(CFHash(m_font.get())), m_widthVariant, static_cast&lt;uintptr_t&gt;(m_isHashTableDeletedValue &lt;&lt; 4 | m_isEmoji &lt;&lt; 3 | m_orientation &lt;&lt; 2 | m_syntheticBold &lt;&lt; 1 | m_syntheticOblique) };
+#endif
</ins><span class="cx">         return StringHasher::hashMemory&lt;sizeof(hashCodes)&gt;(hashCodes);
</span><span class="cx"> #elif USE(CAIRO)
</span><span class="cx">         return PtrHash&lt;cairo_scaled_font_t*&gt;::hash(m_scaledFont);
</span><span class="lines">@@ -167,6 +167,7 @@
</span><span class="cx">     bool operator==(const FontPlatformData&amp; other) const
</span><span class="cx">     {
</span><span class="cx">         return platformIsEqual(other)
</span><ins>+            &amp;&amp; m_isHashTableDeletedValue == other.m_isHashTableDeletedValue
</ins><span class="cx">             &amp;&amp; m_size == other.m_size
</span><span class="cx">             &amp;&amp; m_syntheticBold == other.m_syntheticBold
</span><span class="cx">             &amp;&amp; m_syntheticOblique == other.m_syntheticOblique
</span><span class="lines">@@ -178,13 +179,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool isHashTableDeletedValue() const
</span><span class="cx">     {
</span><del>-#if PLATFORM(WIN) &amp;&amp; !USE(CAIRO)
-        return m_font.isHashTableDeletedValue();
-#elif PLATFORM(COCOA)
-        return m_font == hashTableDeletedFontValue();
-#elif USE(CAIRO)
-        return m_scaledFont == hashTableDeletedFontValue();
-#endif
</del><ins>+        return m_isHashTableDeletedValue;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA) || PLATFORM(WIN)
</span><span class="lines">@@ -200,16 +195,11 @@
</span><span class="cx">     void platformDataInit(const FontPlatformData&amp;);
</span><span class="cx">     const FontPlatformData&amp; platformDataAssign(const FontPlatformData&amp;);
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-    static CTFontRef hashTableDeletedFontValue() { return reinterpret_cast&lt;CTFontRef&gt;(-1); }
-    static bool isValidCTFontRef(CTFontRef font) { return font &amp;&amp; font != hashTableDeletedFontValue(); }
</del><span class="cx">     CGFloat ctFontSize() const;
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(WIN)
</span><span class="cx">     void platformDataInit(HFONT, float size, HDC, WCHAR* faceName);
</span><span class="cx"> #endif
</span><del>-#if USE(CAIRO)
-    static cairo_scaled_font_t* hashTableDeletedFontValue() { return reinterpret_cast&lt;cairo_scaled_font_t*&gt;(-1); }
-#endif
</del><span class="cx"> 
</span><span class="cx"> public:
</span><span class="cx">     bool m_syntheticBold { false };
</span><span class="lines">@@ -224,7 +214,7 @@
</span><span class="cx"> private:
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     // FIXME: Get rid of one of these. These two fonts are subtly different, and it is not obvious which one to use where.
</span><del>-    CTFontRef m_font { nullptr };
</del><ins>+    RetainPtr&lt;CTFontRef&gt; m_font;
</ins><span class="cx">     mutable RetainPtr&lt;CTFontRef&gt; m_ctFont;
</span><span class="cx"> #elif PLATFORM(WIN)
</span><span class="cx">     RefPtr&lt;SharedGDIObject&lt;HFONT&gt;&gt; m_font;
</span><span class="lines">@@ -239,6 +229,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool m_isColorBitmapFont { false };
</span><span class="cx">     bool m_isCompositeFontReference { false };
</span><ins>+    bool m_isHashTableDeletedValue { false };
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(WIN)
</span><span class="cx">     bool m_useGDI { false };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontPlatformDataCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -46,20 +46,17 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT_ARG(font, font);
</span><span class="cx">     m_font = font;
</span><del>-    CFRetain(m_font);
</del><span class="cx">     m_isColorBitmapFont = CTFontGetSymbolicTraits(font) &amp; kCTFontTraitColorGlyphs;
</span><span class="cx">     m_isCompositeFontReference = CTFontGetSymbolicTraits(font) &amp; kCTFontCompositeTrait;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FontPlatformData::~FontPlatformData()
</span><span class="cx"> {
</span><del>-    if (isValidCTFontRef(m_font))
-        CFRelease(m_font);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FontPlatformData::platformDataInit(const FontPlatformData&amp; f)
</span><span class="cx"> {
</span><del>-    m_font = isValidCTFontRef(f.m_font) ? static_cast&lt;CTFontRef&gt;(const_cast&lt;void *&gt;(CFRetain(f.m_font))) : f.m_font;
</del><ins>+    m_font = f.m_font;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     m_isEmoji = f.m_isEmoji;
</span><span class="lines">@@ -74,12 +71,8 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     m_isEmoji = f.m_isEmoji;
</span><span class="cx"> #endif
</span><del>-    if (isValidCTFontRef(m_font) &amp;&amp; isValidCTFontRef(f.m_font) &amp;&amp; CFEqual(m_font, f.m_font))
</del><ins>+    if (m_font &amp;&amp; f.m_font &amp;&amp; CFEqual(m_font.get(), f.m_font.get()))
</ins><span class="cx">         return *this;
</span><del>-    if (isValidCTFontRef(f.m_font))
-        CFRetain(f.m_font);
-    if (isValidCTFontRef(m_font))
-        CFRelease(m_font);
</del><span class="cx">     m_font = f.m_font;
</span><span class="cx">     m_ctFont = f.m_ctFont;
</span><span class="cx"> 
</span><span class="lines">@@ -91,14 +84,14 @@
</span><span class="cx">     bool result = false;
</span><span class="cx">     if (m_font || other.m_font) {
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-        result = isValidCTFontRef(m_font) &amp;&amp; isValidCTFontRef(other.m_font) &amp;&amp; CFEqual(m_font, other.m_font);
</del><ins>+        result = m_font &amp;&amp; other.m_font &amp;&amp; CFEqual(m_font.get(), other.m_font.get());
</ins><span class="cx"> #if !ASSERT_DISABLED
</span><span class="cx">         if (result)
</span><span class="cx">             ASSERT(m_isEmoji == other.m_isEmoji);
</span><span class="cx"> #endif
</span><span class="cx"> #else
</span><span class="cx">         result = m_font == other.m_font;
</span><del>-#endif // PLATFORM(IOS)
</del><ins>+#endif
</ins><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> #if PLATFORM(IOS) &amp;&amp; !ASSERT_DISABLED
</span><span class="lines">@@ -111,19 +104,15 @@
</span><span class="cx"> void FontPlatformData::setFont(CTFontRef font)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_ARG(font, font);
</span><del>-    ASSERT(m_font != reinterpret_cast&lt;CTFontRef&gt;(-1));
</del><span class="cx"> 
</span><span class="cx">     if (m_font == font)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    CFRetain(font);
-    if (m_font)
-        CFRelease(m_font);
</del><span class="cx">     m_font = font;
</span><span class="cx">     m_size = CTFontGetSize(font);
</span><span class="cx">     m_cgFont = adoptCF(CTFontCopyGraphicsFont(font, nullptr));
</span><span class="cx"> 
</span><del>-    CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_font);
</del><ins>+    CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_font.get());
</ins><span class="cx">     m_isColorBitmapFont = traits &amp; kCTFontTraitColorGlyphs;
</span><span class="cx">     m_isCompositeFontReference = traits &amp; kCTFontCompositeTrait;
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicswinFontPlatformDataCairoWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp (185199 => 185200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp        2015-06-04 14:25:50 UTC (rev 185199)
+++ trunk/Source/WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp        2015-06-04 16:50:38 UTC (rev 185200)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx"> 
</span><span class="cx"> FontPlatformData::~FontPlatformData()
</span><span class="cx"> {
</span><del>-    if (m_scaledFont &amp;&amp; m_scaledFont != hashTableDeletedFontValue())
</del><ins>+    if (m_scaledFont)
</ins><span class="cx">         cairo_scaled_font_destroy(m_scaledFont);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">     m_font = other.m_font;
</span><span class="cx">     m_useGDI = other.m_useGDI;
</span><span class="cx"> 
</span><del>-    if (m_scaledFont &amp;&amp; m_scaledFont != hashTableDeletedFontValue())
</del><ins>+    if (m_scaledFont)
</ins><span class="cx">         cairo_scaled_font_destroy(m_scaledFont);
</span><span class="cx"> 
</span><span class="cx">     m_scaledFont = cairo_scaled_font_reference(other.m_scaledFont);
</span></span></pre>
</div>
</div>

</body>
</html>