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