<!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>[201570] 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/201570">201570</a></dd>
<dt>Author</dt> <dd>ryanhaddad@apple.com</dd>
<dt>Date</dt> <dd>2016-06-01 14:40:16 -0700 (Wed, 01 Jun 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/201551">r201551</a> and <a href="http://trac.webkit.org/projects/webkit/changeset/201552">r201552</a>.
https://bugs.webkit.org/show_bug.cgi?id=158275
This change caused 3 API tests to crash on ios-simulator
(Requested by ryanhaddad on #webkit).
Reverted changesets:
"Precache primary font in a secondary thread"
https://bugs.webkit.org/show_bug.cgi?id=158243
http://trac.webkit.org/changeset/201551
"Remove accidental fprintf."
http://trac.webkit.org/changeset/201552
Patch by Commit Queue <commit-queue@webkit.org> on 2016-06-01</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFacecpp">trunk/Source/WebCore/css/CSSFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceh">trunk/Source/WebCore/css/CSSFontFace.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceSourcecpp">trunk/Source/WebCore/css/CSSFontFaceSource.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceSourceh">trunk/Source/WebCore/css/CSSFontFaceSource.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorcpp">trunk/Source/WebCore/css/CSSFontSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorh">trunk/Source/WebCore/css/CSSFontSelector.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSSegmentedFontFacecpp">trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSSegmentedFontFaceh">trunk/Source/WebCore/css/CSSSegmentedFontFace.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCachecpp">trunk/Source/WebCore/platform/graphics/FontCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCacheh">trunk/Source/WebCore/platform/graphics/FontCache.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadecpp">trunk/Source/WebCore/platform/graphics/FontCascade.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontSelectorh">trunk/Source/WebCore/platform/graphics/FontSelector.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp">trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/ChangeLog        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-06-01 Commit Queue <commit-queue@webkit.org>
+
+ Unreviewed, rolling out r201551 and r201552.
+ https://bugs.webkit.org/show_bug.cgi?id=158275
+
+ This change caused 3 API tests to crash on ios-simulator
+ (Requested by ryanhaddad on #webkit).
+
+ Reverted changesets:
+
+ "Precache primary font in a secondary thread"
+ https://bugs.webkit.org/show_bug.cgi?id=158243
+ http://trac.webkit.org/changeset/201551
+
+ "Remove accidental fprintf."
+ http://trac.webkit.org/changeset/201552
+
</ins><span class="cx"> 2016-06-01 Chris Fleizach <cfleizach@apple.com>
</span><span class="cx">
</span><span class="cx"> AX: iOS: VoiceOver can't access attachments in mail messages
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontFace.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -520,19 +520,6 @@
</span><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<ResolvedFontFamily> CSSFontFace::resolveFamilies() const
-{
- Vector<ResolvedFontFamily> result;
- for (auto& source : m_sources) {
- if (source->familyNameOrURI().isEmpty())
- continue;
- if (source->status() == CSSFontFaceSource::Status::Failure)
- continue;
- result.append({ source->familyNameOrURI(), source->url() });
- }
- return result;
-}
-
</del><span class="cx"> #if ENABLE(SVG_FONTS)
</span><span class="cx"> bool CSSFontFace::hasSVGFontFaceSource() const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontFace.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx">
</span><span class="cx"> #include "CSSFontFaceRule.h"
</span><span class="cx"> #include "FontFeatureSettings.h"
</span><del>-#include "FontSelector.h"
</del><span class="cx"> #include "TextFlags.h"
</span><span class="cx"> #include <memory>
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="lines">@@ -136,8 +135,6 @@
</span><span class="cx"> // We don't guarantee that the FontFace wrapper will be the same every time you ask for it.
</span><span class="cx"> Ref<FontFace> wrapper();
</span><span class="cx">
</span><del>- Vector<ResolvedFontFamily> resolveFamilies() const;
-
</del><span class="cx"> #if ENABLE(SVG_FONTS)
</span><span class="cx"> bool hasSVGFontFaceSource() const;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFaceSource.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFaceSource.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontFaceSource.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -188,13 +188,6 @@
</span><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Optional<URL> CSSFontFaceSource::url() const
-{
- if (!m_font)
- return Nullopt;
- return m_font->url();
-}
-
</del><span class="cx"> #if ENABLE(SVG_FONTS)
</span><span class="cx"> bool CSSFontFaceSource::isSVGFontFaceSource() const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFaceSource.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFaceSource.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontFaceSource.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx">
</span><span class="cx"> #include "CachedFontClient.h"
</span><span class="cx"> #include "CachedResourceHandle.h"
</span><del>-#include "URL.h"
</del><span class="cx"> #include <runtime/ArrayBufferView.h>
</span><span class="cx"> #include <wtf/text/AtomicString.h>
</span><span class="cx">
</span><span class="lines">@@ -72,8 +71,6 @@
</span><span class="cx"> bool isSVGFontFaceSource() const;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- Optional<URL> url() const;
-
</del><span class="cx"> private:
</span><span class="cx"> void fontLoaded(CachedFont&) override;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -334,22 +334,4 @@
</span><span class="cx"> return FontCache::singleton().fontForFamily(fontDescription, settings->pictographFontFamily());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<ResolvedFontFamily> CSSFontSelector::resolveFamilies(const Vector<AtomicString>& families, const FontDescription& fontDescription, UChar32 character)
-{
- Vector<ResolvedFontFamily> result;
-
- for (auto& family : families) {
- if (family.isEmpty())
- continue;
- auto* segmentedFace = m_cssFontFaceSet->getFontFace(fontDescription.traitsMask(), family);
- if (!segmentedFace) {
- result.append({ resolveGenericFamily(m_document, fontDescription, family), { } });
- continue;
- }
- result.appendVector(segmentedFace->resolveFamilies(character));
- }
-
- return result;
</del><span class="cx"> }
</span><del>-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSFontSelector.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -64,8 +64,6 @@
</span><span class="cx"> size_t fallbackFontCount() override;
</span><span class="cx"> RefPtr<Font> fallbackFontAt(const FontDescription&, size_t) override;
</span><span class="cx">
</span><del>- Vector<ResolvedFontFamily> resolveFamilies(const Vector<AtomicString>&, const FontDescription&, UChar32) override;
-
</del><span class="cx"> void clearDocument();
</span><span class="cx">
</span><span class="cx"> void addFontFaceRule(StyleRuleFontFace&, bool isInitiatingElementInUserAgentShadowTree);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSSegmentedFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -138,20 +138,4 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<ResolvedFontFamily> CSSSegmentedFontFace::resolveFamilies(UChar32 character) const
-{
- for (auto& face : m_fontFaces) {
- bool inRange = face->ranges().isEmpty();
- for (auto& range : face->ranges()) {
- if (character >= range.from && character <= range.to) {
- inRange = true;
- break;
- }
- }
- if (inRange)
- return face->resolveFamilies();
- }
- return { };
</del><span class="cx"> }
</span><del>-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorecssCSSSegmentedFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSSegmentedFontFace.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSSegmentedFontFace.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/css/CSSSegmentedFontFace.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx">
</span><span class="cx"> #include "CSSFontFace.h"
</span><span class="cx"> #include "FontCache.h"
</span><del>-#include "FontSelector.h"
</del><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="lines">@@ -58,8 +57,6 @@
</span><span class="cx"> void ref() override { RefCounted<CSSSegmentedFontFace>::ref(); }
</span><span class="cx"> void deref() override { RefCounted<CSSSegmentedFontFace>::deref(); }
</span><span class="cx">
</span><del>- Vector<ResolvedFontFamily> resolveFamilies(UChar32 character) const;
-
</del><span class="cx"> private:
</span><span class="cx"> CSSSegmentedFontFace();
</span><span class="cx"> void fontLoaded(CSSFontFace&) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/platform/graphics/FontCache.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -106,7 +106,6 @@
</span><span class="cx"> , m_fontFaceFeatures(fontFaceFeatures ? *fontFaceFeatures : FontFeatureSettings())
</span><span class="cx"> , m_fontFaceVariantSettings(fontFaceVariantSettings ? *fontFaceVariantSettings : FontVariantSettings())
</span><span class="cx"> { }
</span><del>- FontPlatformDataCacheKey(const FontPlatformDataCacheKey&) = default;
</del><span class="cx">
</span><span class="cx"> explicit FontPlatformDataCacheKey(HashTableDeletedValueType t)
</span><span class="cx"> : m_fontDescriptionKey(t)
</span><span class="lines">@@ -160,16 +159,6 @@
</span><span class="cx"> return cache;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if PLATFORM(COCOA) && ENABLE(PLATFORM_FONT_LOOKUP)
-using PrecacheMap = HashMap<FontPlatformDataCacheKey, FontCache::PrecacheTask*, FontPlatformDataCacheKeyHash, WTF::SimpleClassHashTraits<FontPlatformDataCacheKey>>;
-
-static PrecacheMap& precacheTasksInProgress()
-{
- static NeverDestroyed<PrecacheMap> map;
- return map;
-}
-#endif
-
</del><span class="cx"> static AtomicString alternateFamilyName(const AtomicString& familyName)
</span><span class="cx"> {
</span><span class="cx"> switch (familyName.length()) {
</span><span class="lines">@@ -254,12 +243,6 @@
</span><span class="cx">
</span><span class="cx"> FontPlatformDataCacheKey key(familyName, fontDescription, fontFaceFeatures, fontFaceVariantSettings);
</span><span class="cx">
</span><del>-#if PLATFORM(COCOA) && ENABLE(PLATFORM_FONT_LOOKUP)
- auto* precacheTask = precacheTasksInProgress().get(key);
- if (precacheTask)
- platformCancelPrecache(*precacheTask);
-#endif
-
</del><span class="cx"> auto addResult = fontPlatformDataCache().add(key, nullptr);
</span><span class="cx"> FontPlatformDataCache::iterator it = addResult.iterator;
</span><span class="cx"> if (addResult.isNewEntry) {
</span><span class="lines">@@ -506,66 +489,6 @@
</span><span class="cx"> purgeInactiveFontData();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if PLATFORM(COCOA) && ENABLE(PLATFORM_FONT_LOOKUP)
-void FontCache::precache(const Vector<AtomicString>& resolvedFamilies, const FontDescription& fontDescription)
-{
- if (resolvedFamilies.isEmpty())
- return;
- auto& family = resolvedFamilies.first();
-
- FontPlatformDataCacheKey key(family, fontDescription, nullptr, nullptr);
-
- // Maybe we have it already?
- auto it = fontPlatformDataCache().find(key);
- if (it != fontPlatformDataCache().end()) {
- if (it->value)
- return;
-
- // We already know this font isn't available. Try the next.
- Vector<AtomicString> remainingFamilies;
- remainingFamilies.appendRange(resolvedFamilies.begin() + 1, resolvedFamilies.end());
- precache(remainingFamilies, fontDescription);
- return;
- }
-
- auto taskAdd = precacheTasksInProgress().add(key, nullptr);
- if (!taskAdd.isNewEntry)
- return;
-
- auto& task = platformPrecache(family, fontDescription, [key, resolvedFamilies, fontDescription] (auto platformData, bool wasCanceled) {
- precacheTasksInProgress().remove(key);
-
- if (wasCanceled)
- return;
-
- if (platformData) {
- fontPlatformDataCache().add(key, WTFMove(platformData));
- return;
- }
-
- // Didn't find the font. Try the next one.
- Vector<AtomicString> remainingFamilies;
-
- auto alternateName = alternateFamilyName(resolvedFamilies.first());
- if (!alternateName.isNull()) {
- remainingFamilies = resolvedFamilies;
- remainingFamilies.first() = alternateName;
- } else {
- fontPlatformDataCache().add(key, nullptr);
- remainingFamilies.appendRange(resolvedFamilies.begin() + 1, resolvedFamilies.end());
- }
-
- singleton().precache(remainingFamilies, fontDescription);
- });
-
- taskAdd.iterator->value = &task;
-}
-#else
-void FontCache::precache(const Vector<AtomicString>&, const FontDescription&)
-{
-}
-#endif
-
</del><span class="cx"> #if !PLATFORM(COCOA)
</span><span class="cx"> RefPtr<Font> FontCache::similarFont(const FontDescription&, const AtomicString&)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/platform/graphics/FontCache.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -193,8 +193,6 @@
</span><span class="cx"> WEBCORE_EXPORT Ref<Font> fontForPlatformData(const FontPlatformData&);
</span><span class="cx"> RefPtr<Font> similarFont(const FontDescription&, const AtomicString& family);
</span><span class="cx">
</span><del>- void precache(const Vector<AtomicString>& resolvedFamilies, const FontDescription&);
-
</del><span class="cx"> void addClient(FontSelector&);
</span><span class="cx"> void removeClient(FontSelector&);
</span><span class="cx">
</span><span class="lines">@@ -214,8 +212,6 @@
</span><span class="cx"> RefPtr<OpenTypeVerticalData> verticalData(const FontPlatformData&);
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- struct PrecacheTask;
-
</del><span class="cx"> private:
</span><span class="cx"> FontCache();
</span><span class="cx"> ~FontCache() = delete;
</span><span class="lines">@@ -231,12 +227,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> std::unique_ptr<FontPlatformData> createFontPlatformData(const FontDescription&, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings);
</span><span class="cx">
</span><del>-#if PLATFORM(COCOA) && ENABLE(PLATFORM_FONT_LOOKUP)
- using PrecacheCompletionHandler = std::function<void (std::unique_ptr<FontPlatformData>, bool wasCanceled)>;
- PrecacheTask& platformPrecache(const AtomicString& family, const FontDescription&, PrecacheCompletionHandler&&);
- void platformCancelPrecache(PrecacheTask&);
-#endif
-
</del><span class="cx"> Timer m_purgeTimer;
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascade.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -261,29 +261,6 @@
</span><span class="cx"> entry->fonts->pruneSystemFallbacks();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static void precachePrimaryFamily(const FontCascadeDescription& fontDescription, FontSelector& fontSelector)
-{
- Vector<AtomicString> families;
- for (unsigned i = 0; i < fontDescription.familyCount(); ++i)
- families.append(fontDescription.familyAt(i));
-
- // Primary family lookup falls back to the standard family.
- families.append(standardFamily);
-
- auto resolvedPrimaryFamilies = fontSelector.resolveFamilies(families, fontDescription, ' ');
-
- Vector<AtomicString> resolvedPrimaryFamilyNames;
- for (auto& family : resolvedPrimaryFamilies) {
- // This doesn't handle web fonts for now.
- if (family.url)
- break;
- resolvedPrimaryFamilyNames.append(family.name);
- }
-
- // Asynchronously find first available font and precache it so it is likely to be available when needed.
- FontCache::singleton().precache(resolvedPrimaryFamilyNames, fontDescription);
-}
-
</del><span class="cx"> static Ref<FontCascadeFonts> retrieveOrAddCachedFonts(const FontCascadeDescription& fontDescription, RefPtr<FontSelector>&& fontSelector)
</span><span class="cx"> {
</span><span class="cx"> auto key = makeFontCascadeCacheKey(fontDescription, fontSelector.get());
</span><span class="lines">@@ -293,9 +270,6 @@
</span><span class="cx"> if (!addResult.isNewEntry && keysMatch(addResult.iterator->value->key, key))
</span><span class="cx"> return addResult.iterator->value->fonts.get();
</span><span class="cx">
</span><del>- if (fontSelector)
- precachePrimaryFamily(fontDescription, *fontSelector);
-
</del><span class="cx"> auto& newEntry = addResult.iterator->value;
</span><span class="cx"> newEntry = std::make_unique<FontCascadeCacheEntry>(WTFMove(key), FontCascadeFonts::create(WTFMove(fontSelector)));
</span><span class="cx"> Ref<FontCascadeFonts> glyphs = newEntry->fonts.get();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontSelectorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontSelector.h (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontSelector.h        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/platform/graphics/FontSelector.h        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><span class="cx"> #include "FontRanges.h"
</span><del>-#include "URL.h"
</del><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="lines">@@ -45,11 +44,6 @@
</span><span class="cx"> virtual bool isLoading() const = 0;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-struct ResolvedFontFamily {
- AtomicString name;
- Optional<URL> url;
-};
-
</del><span class="cx"> class FontSelector : public RefCounted<FontSelector> {
</span><span class="cx"> public:
</span><span class="cx"> virtual ~FontSelector() { }
</span><span class="lines">@@ -64,8 +58,6 @@
</span><span class="cx"> virtual void registerForInvalidationCallbacks(FontSelectorClient&) = 0;
</span><span class="cx"> virtual void unregisterForInvalidationCallbacks(FontSelectorClient&) = 0;
</span><span class="cx">
</span><del>- virtual Vector<ResolvedFontFamily> resolveFamilies(const Vector<AtomicString>& families, const FontDescription&, UChar32 character) = 0;
-
</del><span class="cx"> virtual unsigned uniqueId() const = 0;
</span><span class="cx"> virtual unsigned version() const = 0;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp (201569 => 201570)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2016-06-01 21:31:46 UTC (rev 201569)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2016-06-01 21:40:16 UTC (rev 201570)
</span><span class="lines">@@ -34,8 +34,6 @@
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> #include <wtf/MainThread.h>
</span><span class="cx"> #include <wtf/NeverDestroyed.h>
</span><del>-#include <wtf/RunLoop.h>
-#include <wtf/WorkQueue.h>
</del><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="lines">@@ -662,19 +660,27 @@
</span><span class="cx"> whitelist.add(item);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static RetainPtr<CTFontRef> fontWithFamily(const String& family, CTFontSymbolicTraits desiredTraits, FontWeight weight, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, float size, bool isWhitelisted)
</del><ins>+#if ENABLE(PLATFORM_FONT_LOOKUP)
+static RetainPtr<CTFontRef> platformFontLookupWithFamily(const AtomicString& family, CTFontSymbolicTraits requestedTraits, FontWeight weight, float size)
</ins><span class="cx"> {
</span><ins>+ const auto& whitelist = fontWhitelist();
+ if (whitelist.size() && !whitelist.contains(family))
+ return nullptr;
+
+ return adoptCF(CTFontCreateForCSS(family.string().createCFString().get(), toCoreTextFontWeight(weight), requestedTraits, size));
+}
+#endif
+
+static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, CTFontSymbolicTraits desiredTraits, FontWeight weight, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, float size)
+{
</ins><span class="cx"> if (family.isEmpty())
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="cx"> RetainPtr<CTFontRef> foundFont = platformFontWithFamilySpecialCase(family, weight, desiredTraits, size);
</span><span class="cx"> if (!foundFont) {
</span><span class="cx"> #if ENABLE(PLATFORM_FONT_LOOKUP)
</span><del>- if (!isWhitelisted)
- return nullptr;
- foundFont = adoptCF(CTFontCreateForCSS(family.createCFString().get(), toCoreTextFontWeight(weight), desiredTraits, size));
</del><ins>+ foundFont = platformFontLookupWithFamily(family, desiredTraits, weight, size);
</ins><span class="cx"> #else
</span><del>- UNUSED_PARAM(isWhitelisted);
</del><span class="cx"> foundFont = platformFontWithFamily(family, desiredTraits, weight, textRenderingMode, size);
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="lines">@@ -713,24 +719,24 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-// This is only thread safe with ENABLE(PLATFORM_FONT_LOOKUP) due to fontWithFamily() implementation
-static std::unique_ptr<FontPlatformData> createFontPlatformDataThreadSafe(const FontDescription& fontDescription, const String& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, bool isWhitelisted, bool shouldAutoActivateIfNeeded)
</del><ins>+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
</ins><span class="cx"> {
</span><span class="cx"> CTFontSymbolicTraits traits = computeTraits(fontDescription);
</span><span class="cx"> float size = fontDescription.computedPixelSize();
</span><span class="cx">
</span><del>- RetainPtr<CTFontRef> font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size, isWhitelisted);
</del><ins>+ RetainPtr<CTFontRef> font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(MAC)
</span><del>- if (!font && shouldAutoActivateIfNeeded) {
</del><ins>+ if (!font) {
+ if (!shouldAutoActivateFontIfNeeded(family))
+ return nullptr;
+
</ins><span class="cx"> // Auto activate the font before looking for it a second time.
</span><span class="cx"> // Ignore the result because we want to use our own algorithm to actually find the font.
</span><del>- autoActivateFont(family, size);
</del><ins>+ autoActivateFont(family.string(), size);
</ins><span class="cx">
</span><del>- font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size, isWhitelisted);
</del><ins>+ font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</ins><span class="cx"> }
</span><del>-#else
- UNUSED_PARAM(shouldAutoActivateIfNeeded);
</del><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (!font)
</span><span class="lines">@@ -742,19 +748,6 @@
</span><span class="cx"> return std::make_unique<FontPlatformData>(font.get(), size, syntheticBold, syntheticOblique, fontDescription.orientation(), fontDescription.widthVariant(), fontDescription.textRenderingMode());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
-{
- const auto& whitelist = fontWhitelist();
- bool isWhitelisted = whitelist.isEmpty() || whitelist.contains(family);
-
- bool shouldAutoActivateIfNeeded = false;
-#if PLATFORM(MAC)
- shouldAutoActivateIfNeeded = shouldAutoActivateFontIfNeeded(family);
-#endif
-
- return createFontPlatformDataThreadSafe(fontDescription, family, fontFaceFeatures, fontFaceVariantSettings, isWhitelisted, shouldAutoActivateIfNeeded);
-}
-
</del><span class="cx"> typedef HashSet<RetainPtr<CTFontRef>, WTF::RetainPtrObjectHash<CTFontRef>, WTF::RetainPtrObjectHashTraits<CTFontRef>> FallbackDedupSet;
</span><span class="cx"> static FallbackDedupSet& fallbackDedupSet()
</span><span class="cx"> {
</span><span class="lines">@@ -803,53 +796,4 @@
</span><span class="cx"> return fontForPlatformData(alternateFont);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(PLATFORM_FONT_LOOKUP)
-struct FontCache::PrecacheTask {
- String family;
- FontDescription fontDescription;
- bool shouldAutoActivateIfNeeded { false };
- bool isWhitelisted { true };
- PrecacheCompletionHandler completionHandler;
-
- std::unique_ptr<FontPlatformData> result;
- std::atomic_bool isCanceled { false };
-};
-
-FontCache::PrecacheTask& FontCache::platformPrecache(const AtomicString& family, const FontDescription& fontDescription, PrecacheCompletionHandler&& completionHandler)
-{
- static WorkQueue& queue = WorkQueue::create("org.webkit.font-precache", WorkQueue::Type::Serial, WorkQueue::QOS::UserInitiated).leakRef();
-
- auto task = std::make_unique<PrecacheTask>();
- task->family = family;
- task->fontDescription = fontDescription;
- const auto& whitelist = fontWhitelist();
- task->isWhitelisted = whitelist.isEmpty() || whitelist.contains(family);
-#if PLATFORM(MAC)
- task->shouldAutoActivateIfNeeded = shouldAutoActivateFontIfNeeded(family);
-#endif
- task->completionHandler = WTFMove(completionHandler);
-
- auto& resultTask = *task;
-
- queue.dispatch([task = task.release()] {
- if (!task->isCanceled) {
- auto family = task->family.isolatedCopy();
- task->result = createFontPlatformDataThreadSafe(task->fontDescription, family, nullptr, nullptr, task->isWhitelisted, task->shouldAutoActivateIfNeeded);
- }
-
- RunLoop::main().dispatch([task] {
- std::unique_ptr<PrecacheTask> deleter(task);
- task->completionHandler(WTFMove(task->result), task->isCanceled);
- });
- });
-
- return resultTask;
</del><span class="cx"> }
</span><del>-
-void FontCache::platformCancelPrecache(FontCache::PrecacheTask& task)
-{
- task.isCanceled = true;
-}
-#endif
-
-}
</del></span></pre>
</div>
</div>
</body>
</html>