18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Torch Mobile, Inc. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedFont.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// FIXME: This should really be a blacklist instead of a whitelist 312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG) || PLATFORM(QT) || PLATFORM(GTK) || (PLATFORM(CHROMIUM) && (OS(WINDOWS) || OS(LINUX) || OS(FREEBSD) || USE(SKIA_MAC_ON_CHROME))) || PLATFORM(HAIKU) || OS(WINCE) || PLATFORM(ANDROID) || PLATFORM(BREWMP) 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#define STORE_FONT_CUSTOM_PLATFORM_DATA 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClientWalker.h" 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "CachedResourceLoader.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FontPlatformData.h" 39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "MemoryCache.h" 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SharedBuffer.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "TextResourceDecoder.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FontCustomPlatformData.h" 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NodeList.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGElement.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontElement.h" 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGGElement.h" 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGNames.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCachedFont::CachedFont(const String &url) 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : CachedResource(url, FontResource) 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_fontData(0) 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_loadInitiated(false) 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCachedFont::~CachedFont() 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete m_fontData; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 725abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid CachedFont::load(CachedResourceLoader*) 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't load the file yet. Wait for an access before triggering the load. 756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen setLoading(true); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid CachedFont::didAddClient(CachedResourceClient* c) 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!isLoading()) 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project c->fontLoaded(this); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CachedFont::data(PassRefPtr<SharedBuffer> data, bool allDataReceived) 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allDataReceived) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data = data; 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setEncodedSize(m_data.get() ? m_data->size() : 0); 916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen setLoading(false); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkNotify(); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 955abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid CachedFont::beginLoadIfNeeded(CachedResourceLoader* dl) 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_loadInitiated) { 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_loadInitiated = true; 99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch dl->load(this, false); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CachedFont::ensureCustomFontData() 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA 1066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!m_fontData && !errorOccurred() && !isLoading() && m_data) { 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData = createFontCustomPlatformData(m_data.get()); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_fontData) 1096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner setStatus(DecodeError); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_fontData; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1152bde8e466a4451c7319e3a072d118917957d6554Steve BlockFontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, TextOrientation textOrientation, FontWidthVariant widthVariant, FontRenderingMode renderingMode) 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_externalSVGDocument) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FontPlatformData(size, bold, italic); 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_fontData); 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, textOrientation, widthVariant, renderingMode); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FontPlatformData(); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CachedFont::ensureSVGFontData() 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!m_externalSVGDocument && !errorOccurred() && !isLoading() && m_data) { 13306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen m_externalSVGDocument = SVGDocument::create(0, KURL()); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml"); 1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch String svgSource = decoder->decode(m_data->data(), m_data->size()); 1372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch svgSource += decoder->flush(); 1382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_externalSVGDocument->setContent(svgSource); 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (decoder->sawError()) 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_externalSVGDocument = 0; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_externalSVGDocument; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSVGFontElement* CachedFont::getSVGFontById(const String& fontName) const 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<NodeList> list = m_externalSVGDocument->getElementsByTagNameNS(SVGNames::fontTag.namespaceURI(), SVGNames::fontTag.localName()); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!list) 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen unsigned listLength = list->length(); 1556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!listLength) 1566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return 0; 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#ifndef NDEBUG 1596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen for (unsigned i = 0; i < listLength; ++i) { 1606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ASSERT(list->item(i)); 1616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ASSERT(list->item(i)->hasTagName(SVGNames::fontTag)); 1626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 1636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif 1646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (fontName.isEmpty()) 1666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return static_cast<SVGFontElement*>(list->item(0)); 1676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen for (unsigned i = 0; i < listLength; ++i) { 169545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch SVGFontElement* element = static_cast<SVGFontElement*>(list->item(i)); 170545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (element->getIdAttribute() == fontName) 171545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return element; 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CachedFont::allClientsRemoved() 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_fontData) { 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete m_fontData; 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData = 0; 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CachedFont::checkNotify() 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (isLoading()) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CachedResourceClientWalker w(m_clients); 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (CachedResourceClient *c = w.next()) 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project c->fontLoaded(this); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid CachedFont::error(CachedResource::Status status) 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner setStatus(status); 2026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(errorOccurred()); 2036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen setLoading(false); 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkNotify(); 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 208