| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008, 2010, 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 if (m_font) | 61 if (m_font) |
| 62 m_font->removeClient(this); | 62 m_font->removeClient(this); |
| 63 pruneTable(); | 63 pruneTable(); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void CSSFontFaceSource::pruneTable() | 66 void CSSFontFaceSource::pruneTable() |
| 67 { | 67 { |
| 68 if (m_fontDataTable.isEmpty()) | 68 if (m_fontDataTable.isEmpty()) |
| 69 return; | 69 return; |
| 70 | 70 |
| 71 for (FontDataTable::iterator it = m_fontDataTable.begin(); it != m_fontDataT
able.end(); ++it) { |
| 72 if (SimpleFontData* fontData = it->value.get()) |
| 73 fontData->clearCSSFontFaceSource(); |
| 74 } |
| 71 m_fontDataTable.clear(); | 75 m_fontDataTable.clear(); |
| 72 } | 76 } |
| 73 | 77 |
| 74 bool CSSFontFaceSource::isLocal() const | 78 bool CSSFontFaceSource::isLocal() const |
| 75 { | 79 { |
| 76 if (m_font) | 80 if (m_font) |
| 77 return false; | 81 return false; |
| 78 #if ENABLE(SVG_FONTS) | 82 #if ENABLE(SVG_FONTS) |
| 79 if (m_svgFontFaceElement) | 83 if (m_svgFontFaceElement) |
| 80 return false; | 84 return false; |
| 81 #endif | 85 #endif |
| 82 return true; | 86 return true; |
| 83 } | 87 } |
| 84 | 88 |
| 89 bool CSSFontFaceSource::isLoading() const |
| 90 { |
| 91 if (m_font) |
| 92 return !m_font->stillNeedsLoad() && !m_font->isLoaded(); |
| 93 return false; |
| 94 } |
| 95 |
| 85 bool CSSFontFaceSource::isLoaded() const | 96 bool CSSFontFaceSource::isLoaded() const |
| 86 { | 97 { |
| 87 if (m_font) | 98 if (m_font) |
| 88 return m_font->isLoaded(); | 99 return m_font->isLoaded(); |
| 89 return true; | 100 return true; |
| 90 } | 101 } |
| 91 | 102 |
| 92 bool CSSFontFaceSource::isValid() const | 103 bool CSSFontFaceSource::isValid() const |
| 93 { | 104 { |
| 94 if (m_font) | 105 if (m_font) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 fontDescription.orientation(), fontDescription.widthVariant(
)), true, false); | 197 fontDescription.orientation(), fontDescription.widthVariant(
)), true, false); |
| 187 } | 198 } |
| 188 } else { | 199 } else { |
| 189 #if ENABLE(SVG_FONTS) | 200 #if ENABLE(SVG_FONTS) |
| 190 // In-Document SVG Fonts | 201 // In-Document SVG Fonts |
| 191 if (m_svgFontFaceElement) | 202 if (m_svgFontFaceElement) |
| 192 fontData = SimpleFontData::create(SVGFontData::create(m_svgFontF
aceElement.get()), fontDescription.computedPixelSize(), syntheticBold, synthetic
Italic); | 203 fontData = SimpleFontData::create(SVGFontData::create(m_svgFontF
aceElement.get()), fontDescription.computedPixelSize(), syntheticBold, synthetic
Italic); |
| 193 #endif | 204 #endif |
| 194 } | 205 } |
| 195 } else { | 206 } else { |
| 196 // Kick off the load. Do it soon rather than now, because we may be in t
he middle of layout, | |
| 197 // and the loader may invoke arbitrary delegate or event handler code. | |
| 198 fontSelector->beginLoadingFontSoon(m_font.get()); | |
| 199 | |
| 200 // This temporary font is not retained and should not be returned. | 207 // This temporary font is not retained and should not be returned. |
| 201 FontCachePurgePreventer fontCachePurgePreventer; | 208 FontCachePurgePreventer fontCachePurgePreventer; |
| 202 SimpleFontData* temporaryFont = fontCache()->getNonRetainedLastResortFal
lbackFont(fontDescription); | 209 SimpleFontData* temporaryFont = fontCache()->getNonRetainedLastResortFal
lbackFont(fontDescription); |
| 203 fontData = SimpleFontData::create(temporaryFont->platformData(), true, t
rue); | 210 fontData = SimpleFontData::create(temporaryFont->platformData(), true, t
rue); |
| 211 fontData->setCSSFontFaceSource(this); |
| 204 } | 212 } |
| 205 | 213 |
| 206 return fontData; // No release, because fontData is a reference to a RefPtr
that is held in the m_fontDataTable. | 214 return fontData; // No release, because fontData is a reference to a RefPtr
that is held in the m_fontDataTable. |
| 207 } | 215 } |
| 208 | 216 |
| 209 #if ENABLE(SVG_FONTS) | 217 #if ENABLE(SVG_FONTS) |
| 210 SVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const | 218 SVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const |
| 211 { | 219 { |
| 212 return m_svgFontFaceElement.get(); | 220 return m_svgFontFaceElement.get(); |
| 213 } | 221 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 return false; | 255 return false; |
| 248 return fontCache()->isPlatformFontAvailable(fontDescription, m_string, true)
; | 256 return fontCache()->isPlatformFontAvailable(fontDescription, m_string, true)
; |
| 249 } | 257 } |
| 250 | 258 |
| 251 void CSSFontFaceSource::willUseFontData() | 259 void CSSFontFaceSource::willUseFontData() |
| 252 { | 260 { |
| 253 if (m_font) | 261 if (m_font) |
| 254 m_font->willUseFontData(); | 262 m_font->willUseFontData(); |
| 255 } | 263 } |
| 256 | 264 |
| 265 void CSSFontFaceSource::beginLoadingFontSoon() |
| 266 { |
| 267 ASSERT(m_face); |
| 268 ASSERT(m_font); |
| 269 m_face->beginLoadingFontSoon(m_font.get()); |
| 270 } |
| 271 |
| 257 void CSSFontFaceSource::FontLoadHistograms::loadStarted() | 272 void CSSFontFaceSource::FontLoadHistograms::loadStarted() |
| 258 { | 273 { |
| 259 if (!m_loadStartTime) | 274 if (!m_loadStartTime) |
| 260 m_loadStartTime = currentTimeMS(); | 275 m_loadStartTime = currentTimeMS(); |
| 261 } | 276 } |
| 262 | 277 |
| 263 void CSSFontFaceSource::FontLoadHistograms::recordLocalFont(bool loadSuccess) | 278 void CSSFontFaceSource::FontLoadHistograms::recordLocalFont(bool loadSuccess) |
| 264 { | 279 { |
| 265 if (!m_loadStartTime) { | 280 if (!m_loadStartTime) { |
| 266 HistogramSupport::histogramEnumeration("WebFont.LocalFontUsed", loadSucc
ess ? 1 : 0, 2); | 281 HistogramSupport::histogramEnumeration("WebFont.LocalFontUsed", loadSucc
ess ? 1 : 0, 2); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 288 if (size < 50 * 1024) | 303 if (size < 50 * 1024) |
| 289 return "WebFont.DownloadTime.1.10KBTo50KB"; | 304 return "WebFont.DownloadTime.1.10KBTo50KB"; |
| 290 if (size < 100 * 1024) | 305 if (size < 100 * 1024) |
| 291 return "WebFont.DownloadTime.2.50KBTo100KB"; | 306 return "WebFont.DownloadTime.2.50KBTo100KB"; |
| 292 if (size < 1024 * 1024) | 307 if (size < 1024 * 1024) |
| 293 return "WebFont.DownloadTime.3.100KBTo1MB"; | 308 return "WebFont.DownloadTime.3.100KBTo1MB"; |
| 294 return "WebFont.DownloadTime.4.Over1MB"; | 309 return "WebFont.DownloadTime.4.Over1MB"; |
| 295 } | 310 } |
| 296 | 311 |
| 297 } | 312 } |
| OLD | NEW |