18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSFontFaceSource.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedFont.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSFontFace.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSFontSelector.h" 325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "CachedResourceLoader.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FontCache.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FontDescription.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GlyphPageTreeNode.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SimpleFontData.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FontCustomPlatformData.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontData.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGFontElement.h" 42e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "SVGFontFaceElement.h" 43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "SVGNames.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGURIReference.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSFontFaceSource::CSSFontFaceSource(const String& str, CachedFont* font) 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_string(str) 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_font(font) 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_face(0) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_hasExternalSVGFont(false) 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_font) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_font->addClient(this); 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSFontFaceSource::~CSSFontFaceSource() 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_font) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_font->removeClient(this); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pruneTable(); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSFontFaceSource::pruneTable() 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_fontDataTable.isEmpty()) 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 72148e59acccda9790f6db649b46652f92fa042715Victoria Lease 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashMap<unsigned, SimpleFontData*>::iterator end = m_fontDataTable.end(); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashMap<unsigned, SimpleFontData*>::iterator it = m_fontDataTable.begin(); it != end; ++it) 75148e59acccda9790f6db649b46652f92fa042715Victoria Lease m_face->retireCustomFont(it->second); 76148e59acccda9790f6db649b46652f92fa042715Victoria Lease 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontDataTable.clear(); 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CSSFontFaceSource::isLoaded() const 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_font) 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_font->isLoaded(); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CSSFontFaceSource::isValid() const 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_font) 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !m_font->errorOccurred(); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSFontFaceSource::fontLoaded(CachedFont*) 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 96366835cb6750a97a5e29e0abcc6e3e6705411a72Russell Brenner pruneTable(); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_face) 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_face->fontLoaded(this); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescription, bool syntheticBold, bool syntheticItalic, CSSFontSelector* fontSelector) 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the font hasn't loaded or an error occurred, then we've got nothing. 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isValid()) 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_font && !m_svgFontFaceElement) { 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_font) { 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block SimpleFontData* fontData = fontCache()->getCachedFontData(fontDescription, m_string); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We're local. Just return a SimpleFontData from the normal cache. 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return fontData; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // See if we have a mapping in our FontData cache. 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block unsigned hashKey = (fontDescription.computedPixelSize() + 1) << 6 | fontDescription.widthVariant() << 4 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block | (fontDescription.textOrientation() == TextOrientationUpright ? 8 : 0) | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SimpleFontData* cachedData = m_fontDataTable.get(hashKey)) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return cachedData; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OwnPtr<SimpleFontData> fontData; 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If we are still loading, then we let the system pick a font. 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isLoaded()) { 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_font) { 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 1302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (m_hasExternalSVGFont) { 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // For SVG fonts parse the external SVG document, and extract the <font> element. 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_font->ensureSVGFontData()) 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_externalSVGFontElement) 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_externalSVGFontElement = m_font->getSVGFontById(SVGURIReference::getTarget(m_string)); 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_externalSVGFontElement) 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SVGFontFaceElement* fontFaceElement = 0; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Select first <font-face> child 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Node* fontChild = m_externalSVGFontElement->firstChild(); fontChild; fontChild = fontChild->nextSibling()) { 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (fontChild->hasTagName(SVGNames::font_faceTag)) { 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontFaceElement = static_cast<SVGFontFaceElement*>(fontChild); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (fontFaceElement) { 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_svgFontFaceElement) { 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We're created using a CSS @font-face rule, that means we're not associated with a SVGFontFaceElement. 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Use the imported <font-face> tag as referencing font-face element for these cases. 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_svgFontFaceElement = fontFaceElement; 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 158dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch fontData.set(new SimpleFontData(adoptPtr(new SVGFontData(fontFaceElement)), fontDescription.computedPixelSize(), syntheticBold, syntheticItalic)); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Create new FontPlatformData from our CGFontRef, point size and ATSFontRef. 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_font->ensureCustomFontData()) 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block fontData.set(new SimpleFontData(m_font->platformDataFromCustomData(fontDescription.computedPixelSize(), syntheticBold, syntheticItalic, fontDescription.orientation(), 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block fontDescription.textOrientation(), fontDescription.widthVariant(), fontDescription.renderingMode()), true, false)); 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG_FONTS) 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // In-Document SVG Fonts 173dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (m_svgFontFaceElement) 1742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block fontData.set(new SimpleFontData(adoptPtr(new SVGFontData(m_svgFontFaceElement.get())), fontDescription.computedPixelSize(), syntheticBold, syntheticItalic)); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Kick off the load now. 1795abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (CachedResourceLoader* cachedResourceLoader = fontSelector->cachedResourceLoader()) 1805abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_font->beginLoadIfNeeded(cachedResourceLoader); 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: m_string is a URL so it makes no sense to pass it as a family name. 1828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block SimpleFontData* tempData = fontCache()->getCachedFontData(fontDescription, m_string); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!tempData) 184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project tempData = fontCache()->getLastResortFallbackFont(fontDescription); 1858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block fontData.set(new SimpleFontData(tempData->platformData(), true, true)); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 189e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SimpleFontData* fontDataRawPtr = fontData.leakPtr(); 190e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke m_fontDataTable.set(hashKey, fontDataRawPtr); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 192e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return fontDataRawPtr; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if ENABLE(SVG_FONTS) 1962fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockSVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const 1972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return m_svgFontFaceElement.get(); 1992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2012fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid CSSFontFaceSource::setSVGFontFaceElement(PassRefPtr<SVGFontFaceElement> element) 2022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_svgFontFaceElement = element; 2042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerbool CSSFontFaceSource::isSVGFontFaceSource() const 2076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 2082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return m_svgFontFaceElement || m_hasExternalSVGFont; 2096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 2106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif 2116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 212e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 213