| Index: Source/core/css/CSSFontFace.cpp
|
| diff --git a/Source/core/css/CSSFontFace.cpp b/Source/core/css/CSSFontFace.cpp
|
| index 40d6fa384799edcf82a9f45b544d7cfef2f287ff..9ae257e4d2bc61f2933c3f3b8282a04823f2b6c0 100644
|
| --- a/Source/core/css/CSSFontFace.cpp
|
| +++ b/Source/core/css/CSSFontFace.cpp
|
| @@ -126,13 +126,16 @@
|
| return nullptr;
|
| }
|
|
|
| -bool CSSFontFace::maybeScheduleFontLoad(const FontDescription& fontDescription, UChar32 character)
|
| -{
|
| - if (m_ranges.contains(character)) {
|
| +void CSSFontFace::willUseFontData(const FontDescription& fontDescription)
|
| +{
|
| + // Kicks off font load here only if the @font-face has no unicode-range.
|
| + // @font-faces with unicode-range will be loaded when a GlyphPage for the
|
| + // font is created.
|
| + // FIXME: Pass around the text to render from RenderText, and kick download
|
| + // if m_ranges intersects with the text. Make sure this does not cause
|
| + // performance regression.
|
| + if (m_ranges.isEntireRange())
|
| load(fontDescription);
|
| - return true;
|
| - }
|
| - return false;
|
| }
|
|
|
| void CSSFontFace::load(const FontDescription& fontDescription, CSSFontSelector* fontSelector)
|
| @@ -214,14 +217,6 @@
|
| m_ranges.shrink(targetIndex);
|
| }
|
|
|
| -bool CSSFontFace::UnicodeRangeSet::contains(UChar32 c) const
|
| -{
|
| - if (isEntireRange())
|
| - return true;
|
| - Vector<UnicodeRange>::const_iterator it = std::lower_bound(m_ranges.begin(), m_ranges.end(), c);
|
| - return it != m_ranges.end() && it->contains(c);
|
| -}
|
| -
|
| bool CSSFontFace::UnicodeRangeSet::intersectsWith(const String& text) const
|
| {
|
| if (text.isEmpty())
|
| @@ -235,7 +230,8 @@
|
| while (index < text.length()) {
|
| UChar32 c = text.characterStartingAt(index);
|
| index += U16_LENGTH(c);
|
| - if (contains(c))
|
| + Vector<UnicodeRange>::const_iterator it = std::lower_bound(m_ranges.begin(), m_ranges.end(), c);
|
| + if (it != m_ranges.end() && it->contains(c))
|
| return true;
|
| }
|
| return false;
|
|
|