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"
10 #include "core/dom/ElementTraversal.h"
11 #include "core/svg/SVGFontData.h"
12 #include "core/svg/SVGFontElement.h"
13 #include "core/svg/SVGFontFaceElement.h"
14 #include "platform/fonts/FontDescription.h"
15 #include "platform/fonts/SimpleFontData.h"
19 SVGRemoteFontFaceSource::SVGRemoteFontFaceSource(const String& uri, FontResource* font)
20 : RemoteFontFaceSource(font)
25 SVGRemoteFontFaceSource::~SVGRemoteFontFaceSource()
29 bool SVGRemoteFontFaceSource::ensureFontData()
31 return resource()->ensureSVGFontData();
34 PassRefPtr<SimpleFontData> SVGRemoteFontFaceSource::createFontData(const FontDescription& fontDescription)
37 return createLoadingFallbackFontData(fontDescription);
39 // Parse the external SVG document, and extract the <font> element.
40 if (!resource()->ensureSVGFontData())
43 if (!m_externalSVGFontElement) {
44 String fragmentIdentifier;
45 size_t start = m_uri.find('#');
46 if (start != kNotFound)
47 fragmentIdentifier = m_uri.substring(start + 1);
48 m_externalSVGFontElement = resource()->getSVGFontById(fragmentIdentifier);
51 if (!m_externalSVGFontElement)
54 // Select first <font-face> child
55 if (SVGFontFaceElement* fontFaceElement = Traversal<SVGFontFaceElement>::firstChild(*m_externalSVGFontElement)) {
56 return SimpleFontData::create(
57 SVGFontData::create(fontFaceElement),
58 fontDescription.effectiveFontSize(),
59 fontDescription.isSyntheticBold(),
60 fontDescription.isSyntheticItalic());
65 } // namespace WebCore
67 #endif // ENABLE(SVG_FONTS)