Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Unified Diff: third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp

Issue 1429713004: Implement CSS font-display (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: failure does not mean loaded Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
diff --git a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
index 6f68e61ac9619288fe64f8cc9d1f668d0f5db6ad..49a7e1aad8d3fe69125bfb77a1198c6b56951644 100644
--- a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
+++ b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
@@ -16,9 +16,11 @@
namespace blink {
-RemoteFontFaceSource::RemoteFontFaceSource(FontResource* font, PassRefPtrWillBeRawPtr<FontLoader> fontLoader)
+RemoteFontFaceSource::RemoteFontFaceSource(FontResource* font, PassRefPtrWillBeRawPtr<FontLoader> fontLoader, FontDisplay display)
: m_font(font)
, m_fontLoader(fontLoader)
+ , m_display(display)
+ , m_period(display == FontDisplaySwap ? SwapPeriod : BlockPeriod)
{
m_font->addClient(this);
}
@@ -80,24 +82,50 @@ void RemoteFontFaceSource::fontLoaded(FontResource*)
}
}
-void RemoteFontFaceSource::fontLoadWaitLimitExceeded(FontResource*)
+void RemoteFontFaceSource::fontLoadShortLimitExceeded(FontResource*)
{
+ if (m_display == FontDisplayFallback)
+ switchToSwapPeriod();
+ else if (m_display == FontDisplayOptional)
+ switchToFailurePeriod();
+}
+
+void RemoteFontFaceSource::fontLoadLongLimitExceeded(FontResource*)
+{
+ if (m_display == FontDisplayAuto || m_display == FontDisplayBlock)
+ switchToSwapPeriod();
+ else if (m_display == FontDisplayFallback)
+ switchToFailurePeriod();
+}
+
+void RemoteFontFaceSource::switchToSwapPeriod()
+{
+ ASSERT(m_period == BlockPeriod);
+ m_period = SwapPeriod;
+
pruneTable();
if (m_face) {
m_fontLoader->fontFaceInvalidated();
- m_face->fontLoadWaitLimitExceeded(this);
+ m_face->didBecomeVisibleFallback(this);
}
m_histograms.recordFallbackTime(m_font.get());
}
+void RemoteFontFaceSource::switchToFailurePeriod()
+{
+ if (m_period == BlockPeriod)
+ switchToSwapPeriod();
+ ASSERT(m_period == SwapPeriod);
+ m_period = FailurePeriod;
+}
+
PassRefPtr<SimpleFontData> RemoteFontFaceSource::createFontData(const FontDescription& fontDescription)
{
if (!isLoaded())
return createLoadingFallbackFontData(fontDescription);
- // Create new FontPlatformData from our CGFontRef, point size and ATSFontRef.
- if (!m_font->ensureCustomFontData())
+ if (!m_font->ensureCustomFontData() || m_period == FailurePeriod)
return nullptr;
m_histograms.recordFallbackTime(m_font.get());
@@ -117,7 +145,7 @@ PassRefPtr<SimpleFontData> RemoteFontFaceSource::createLoadingFallbackFontData(c
ASSERT_NOT_REACHED();
return nullptr;
}
- RefPtr<CSSCustomFontData> cssFontData = CSSCustomFontData::create(this, m_font->exceedsFontLoadWaitLimit() ? CSSCustomFontData::VisibleFallback : CSSCustomFontData::InvisibleFallback);
+ RefPtr<CSSCustomFontData> cssFontData = CSSCustomFontData::create(this, m_period == BlockPeriod ? CSSCustomFontData::InvisibleFallback : CSSCustomFontData::VisibleFallback);
return SimpleFontData::create(temporaryFont->platformData(), cssFontData);
}

Powered by Google App Engine
This is Rietveld 408576698