| Index: third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
|
| diff --git a/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp b/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
|
| index c1c0ca97bf8743bf76e5d49cd9e2574837829d86..35b1b099cdc99624dae1b5e11110189b12da7115 100644
|
| --- a/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
|
| +++ b/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
|
| @@ -47,16 +47,16 @@ bool FontFallbackIterator::needsHintList() const
|
| bool FontFallbackIterator::alreadyLoadingRangeForHintChar(UChar32 hintChar)
|
| {
|
| for (auto it = m_trackedLoadingRangeSets.begin(); it != m_trackedLoadingRangeSets.end(); ++it) {
|
| - if (it->contains(hintChar))
|
| + if ((*it)->contains(hintChar))
|
| return true;
|
| }
|
| return false;
|
| }
|
|
|
| -bool FontFallbackIterator::rangeSetContributesForHint(const Vector<UChar32> hintList, const FontDataForRangeSet& segmentedFace)
|
| +bool FontFallbackIterator::rangeSetContributesForHint(const Vector<UChar32> hintList, const FontDataForRangeSet* segmentedFace)
|
| {
|
| for (auto it = hintList.begin(); it != hintList.end(); ++it) {
|
| - if (segmentedFace.contains(*it)) {
|
| + if (segmentedFace->contains(*it)) {
|
| if (!alreadyLoadingRangeForHintChar(*it))
|
| return true;
|
| }
|
| @@ -73,18 +73,18 @@ void FontFallbackIterator::willUseRange(const AtomicString& family, const FontDa
|
| selector->willUseRange(m_fontDescription, family, rangeSet);
|
| }
|
|
|
| -const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hintList)
|
| +const PassRefPtr<FontDataForRangeSet> FontFallbackIterator::next(const Vector<UChar32>& hintList)
|
| {
|
| if (m_fallbackStage == OutOfLuck)
|
| - return FontDataForRangeSet();
|
| + return adoptRef(new FontDataForRangeSet());
|
|
|
| if (m_fallbackStage == FallbackPriorityFonts) {
|
| // Only try one fallback priority font,
|
| // then proceed to regular system fallback.
|
| m_fallbackStage = SystemFonts;
|
| - FontDataForRangeSet fallbackPriorityFontRange(fallbackPriorityFont(hintList[0]));
|
| - if (fallbackPriorityFontRange.hasFontData())
|
| - return fallbackPriorityFontRange;
|
| + RefPtr<FontDataForRangeSet> fallbackPriorityFontRange = adoptRef(new FontDataForRangeSet(fallbackPriorityFont(hintList[0])));
|
| + if (fallbackPriorityFontRange->hasFontData())
|
| + return fallbackPriorityFontRange.release();
|
| return next(hintList);
|
| }
|
|
|
| @@ -93,7 +93,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
|
| ASSERT(hintList.size());
|
| RefPtr<SimpleFontData> systemFont = uniqueSystemFontForHint(hintList[0]);
|
| if (systemFont)
|
| - return FontDataForRangeSet(systemFont);
|
| + return adoptRef(new FontDataForRangeSetFromCache(systemFont));
|
|
|
| // If we don't have options from the system fallback anymore or had
|
| // previously returned them, we only have the last resort font left.
|
| @@ -104,7 +104,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
|
| m_fallbackStage = OutOfLuck;
|
| RefPtr<SimpleFontData> lastResort = fontCache->getLastResortFallbackFont(m_fontDescription).get();
|
| RELEASE_ASSERT(lastResort);
|
| - return FontDataForRangeSet(lastResort);
|
| + return adoptRef(new FontDataForRangeSetFromCache(lastResort));
|
| }
|
|
|
| ASSERT(m_fallbackStage == FontGroupFonts
|
| @@ -129,7 +129,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
|
| m_currentFontDataIndex++;
|
| if (!fontData->isLoading()) {
|
| RefPtr<SimpleFontData> nonSegmented = const_cast<SimpleFontData*>(toSimpleFontData(fontData));
|
| - return FontDataForRangeSet(nonSegmented);
|
| + return adoptRef(new FontDataForRangeSetFromCache(nonSegmented));
|
| }
|
| return next(hintList);
|
| }
|
| @@ -143,7 +143,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
|
| }
|
|
|
| ASSERT(m_segmentedFaceIndex < segmented->numFaces());
|
| - FontDataForRangeSet currentSegmentedFace = segmented->faceAt(m_segmentedFaceIndex);
|
| + RefPtr<FontDataForRangeSet> currentSegmentedFace = segmented->faceAt(m_segmentedFaceIndex);
|
| m_segmentedFaceIndex++;
|
|
|
| if (m_segmentedFaceIndex == segmented->numFaces()) {
|
| @@ -153,8 +153,8 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
|
| m_currentFontDataIndex++;
|
| }
|
|
|
| - if (rangeSetContributesForHint(hintList, currentSegmentedFace)) {
|
| - const SimpleFontData* fontData = currentSegmentedFace.fontData();
|
| + if (rangeSetContributesForHint(hintList, currentSegmentedFace.get())) {
|
| + const SimpleFontData* fontData = currentSegmentedFace->fontData();
|
| if (const CustomFontData* customFontData = fontData->customFontData())
|
| customFontData->beginLoadIfNeeded();
|
| if (!fontData->isLoading())
|
|
|