1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "core/svg/SVGRemoteFontFaceSource.h"
9 #include "core/SVGNames.h"
10 #include "core/css/FontLoader.h"
11 #include "core/dom/ElementTraversal.h"
12 #include "core/svg/SVGFontData.h"
13 #include "core/svg/SVGFontElement.h"
14 #include "core/svg/SVGFontFaceElement.h"
15 #include "platform/fonts/FontDescription.h"
16 #include "platform/fonts/SimpleFontData.h"
20 SVGRemoteFontFaceSource::SVGRemoteFontFaceSource(const String& uri, FontResource* font, PassRefPtrWillBeRawPtr<FontLoader> fontLoader)
21 : RemoteFontFaceSource(font, fontLoader)
26 SVGRemoteFontFaceSource::~SVGRemoteFontFaceSource()
30 bool SVGRemoteFontFaceSource::ensureFontData()
32 return resource()->ensureSVGFontData();
35 PassRefPtr<SimpleFontData> SVGRemoteFontFaceSource::createFontData(const FontDescription& fontDescription)
38 return createLoadingFallbackFontData(fontDescription);
40 // Parse the external SVG document, and extract the <font> element.
41 if (!resource()->ensureSVGFontData())
44 if (!m_externalSVGFontElement) {
45 String fragmentIdentifier;
46 size_t start = m_uri.find('#');
47 if (start != kNotFound)
48 fragmentIdentifier = m_uri.substring(start + 1);
49 m_externalSVGFontElement = resource()->getSVGFontById(fragmentIdentifier);
52 if (!m_externalSVGFontElement)
55 // Select first <font-face> child
56 if (SVGFontFaceElement* fontFaceElement = Traversal<SVGFontFaceElement>::firstChild(*m_externalSVGFontElement)) {
57 return SimpleFontData::create(
58 SVGFontData::create(fontFaceElement),
59 fontDescription.effectiveFontSize(),
60 fontDescription.isSyntheticBold(),
61 fontDescription.isSyntheticItalic());
66 void SVGRemoteFontFaceSource::trace(Visitor* visitor)
68 visitor->trace(m_externalSVGFontElement);
69 RemoteFontFaceSource::trace(visitor);
74 #endif // ENABLE(SVG_FONTS)