Chromium Code Reviews| 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..6e355db1f64efbfa7c00974883ce10c4c03feb6d 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); |
| } |
| @@ -44,17 +46,17 @@ void RemoteFontFaceSource::pruneTable() |
| bool RemoteFontFaceSource::isLoading() const |
| { |
| - return !m_font->stillNeedsLoad() && !m_font->isLoaded(); |
| + return m_period != FailurePeriod && !m_font->stillNeedsLoad() && !m_font->isLoaded(); |
| } |
| bool RemoteFontFaceSource::isLoaded() const |
| { |
| - return m_font->isLoaded(); |
| + return m_period == FailurePeriod || m_font->isLoaded(); |
|
Yoav Weiss
2015/11/02 08:57:28
So failure is defined as loaded? Can you add a lin
Kunihiko Sakamoto
2015/11/04 02:32:51
This is to make the RemoteFontFaceSource behave as
Kunihiko Sakamoto
2015/11/17 05:47:43
Changed it not to treat failure period as loaded,
|
| } |
| bool RemoteFontFaceSource::isValid() const |
| { |
| - return !m_font->errorOccurred(); |
| + return m_period != FailurePeriod && !m_font->errorOccurred(); |
| } |
| void RemoteFontFaceSource::didStartFontLoad(FontResource*) |
| @@ -80,17 +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->fontDataInvalidated(this); |
| } |
| m_histograms.recordFallbackTime(m_font.get()); |
| } |
| +void RemoteFontFaceSource::switchToFailurePeriod() |
| +{ |
| + if (m_period == BlockPeriod) |
| + switchToSwapPeriod(); |
| + ASSERT(m_period == SwapPeriod); |
| + m_period = FailurePeriod; |
| + |
| + pruneTable(); |
| + if (m_face) { |
| + m_fontLoader->fontFaceInvalidated(); |
| + m_face->fontLoaded(this); |
| + } |
| +} |
| + |
| PassRefPtr<SimpleFontData> RemoteFontFaceSource::createFontData(const FontDescription& fontDescription) |
| { |
| if (!isLoaded()) |
| @@ -117,7 +152,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); |
| } |