Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(771)

Side by Side Diff: Source/core/fetch/FontResource.cpp

Issue 656913006: Remove SVG fonts (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update tests for landing Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2009 Torch Mobile, Inc. 3 * Copyright (C) 2009 Torch Mobile, Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 18 matching lines...) Expand all
29 29
30 #include "core/dom/TagCollection.h" 30 #include "core/dom/TagCollection.h"
31 #include "core/fetch/ResourceClientWalker.h" 31 #include "core/fetch/ResourceClientWalker.h"
32 #include "core/html/parser/TextResourceDecoder.h" 32 #include "core/html/parser/TextResourceDecoder.h"
33 #include "platform/SharedBuffer.h" 33 #include "platform/SharedBuffer.h"
34 #include "platform/fonts/FontCustomPlatformData.h" 34 #include "platform/fonts/FontCustomPlatformData.h"
35 #include "platform/fonts/FontPlatformData.h" 35 #include "platform/fonts/FontPlatformData.h"
36 #include "public/platform/Platform.h" 36 #include "public/platform/Platform.h"
37 #include "wtf/CurrentTime.h" 37 #include "wtf/CurrentTime.h"
38 38
39 #if ENABLE(SVG_FONTS)
40 #include "core/SVGNames.h"
41 #include "core/dom/XMLDocument.h"
42 #include "core/html/HTMLCollection.h"
43 #include "core/svg/SVGFontElement.h"
44 #endif
45
46 namespace blink { 39 namespace blink {
47 40
48 static const double fontLoadWaitLimitSec = 3.0; 41 static const double fontLoadWaitLimitSec = 3.0;
49 42
50 enum FontPackageFormat { 43 enum FontPackageFormat {
51 PackageFormatUnknown, 44 PackageFormatUnknown,
52 PackageFormatSFNT, 45 PackageFormatSFNT,
53 PackageFormatWOFF, 46 PackageFormatWOFF,
54 PackageFormatWOFF2, 47 PackageFormatWOFF2,
55 PackageFormatSVG, 48 PackageFormatSVG,
(...skipping 24 matching lines...) Expand all
80 , m_exceedsFontLoadWaitLimit(false) 73 , m_exceedsFontLoadWaitLimit(false)
81 , m_corsFailed(false) 74 , m_corsFailed(false)
82 , m_fontLoadWaitLimitTimer(this, &FontResource::fontLoadWaitLimitCallback) 75 , m_fontLoadWaitLimitTimer(this, &FontResource::fontLoadWaitLimitCallback)
83 { 76 {
84 } 77 }
85 78
86 FontResource::~FontResource() 79 FontResource::~FontResource()
87 { 80 {
88 } 81 }
89 82
90 void FontResource::trace(Visitor* visitor)
91 {
92 #if ENABLE(SVG_FONTS)
93 visitor->trace(m_externalSVGDocument);
94 #endif
95 Resource::trace(visitor);
96 }
97
98 void FontResource::didScheduleLoad() 83 void FontResource::didScheduleLoad()
99 { 84 {
100 if (m_state == Unloaded) 85 if (m_state == Unloaded)
101 m_state = LoadScheduled; 86 m_state = LoadScheduled;
102 } 87 }
103 88
104 void FontResource::didUnscheduleLoad() 89 void FontResource::didUnscheduleLoad()
105 { 90 {
106 if (m_state == LoadScheduled) 91 if (m_state == LoadScheduled)
107 m_state = Unloaded; 92 m_state = Unloaded;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } else { 131 } else {
147 setStatus(DecodeError); 132 setStatus(DecodeError);
148 recordPackageFormatHistogram(PackageFormatUnknown); 133 recordPackageFormatHistogram(PackageFormatUnknown);
149 } 134 }
150 } 135 }
151 return m_fontData; 136 return m_fontData;
152 } 137 }
153 138
154 FontPlatformData FontResource::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant widthVariant) 139 FontPlatformData FontResource::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant widthVariant)
155 { 140 {
156 #if ENABLE(SVG_FONTS)
157 if (m_externalSVGDocument)
158 return FontPlatformData(size, bold, italic);
159 #endif
160 ASSERT(m_fontData); 141 ASSERT(m_fontData);
161 return m_fontData->fontPlatformData(size, bold, italic, orientation, widthVa riant); 142 return m_fontData->fontPlatformData(size, bold, italic, orientation, widthVa riant);
162 } 143 }
163 144
164 #if ENABLE(SVG_FONTS)
165 bool FontResource::ensureSVGFontData()
166 {
167 if (!m_externalSVGDocument && !errorOccurred() && !isLoading()) {
168 if (m_data) {
169 m_externalSVGDocument = XMLDocument::createSVG();
170
171 OwnPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("a pplication/xml");
172 String svgSource = decoder->decode(m_data->data(), m_data->size());
173 svgSource = svgSource + decoder->flush();
174
175 m_externalSVGDocument->setContent(svgSource);
176
177 if (decoder->sawError())
178 m_externalSVGDocument = nullptr;
179 }
180 if (m_externalSVGDocument) {
181 recordPackageFormatHistogram(PackageFormatSVG);
182 } else {
183 setStatus(DecodeError);
184 recordPackageFormatHistogram(PackageFormatUnknown);
185 }
186 }
187
188 return m_externalSVGDocument;
189 }
190
191 SVGFontElement* FontResource::getSVGFontById(const String& fontName) const
192 {
193 RefPtrWillBeRawPtr<TagCollection> collection = m_externalSVGDocument->getEle mentsByTagNameNS(SVGNames::fontTag.namespaceURI(), SVGNames::fontTag.localName() );
194 if (!collection)
195 return 0;
196
197 unsigned collectionLength = collection->length();
198 if (!collectionLength)
199 return 0;
200
201 #if ENABLE(ASSERT)
202 for (unsigned i = 0; i < collectionLength; ++i) {
203 ASSERT(collection->item(i));
204 ASSERT(isSVGFontElement(collection->item(i)));
205 }
206 #endif
207
208 if (fontName.isEmpty())
209 return toSVGFontElement(collection->item(0));
210
211 for (unsigned i = 0; i < collectionLength; ++i) {
212 SVGFontElement* element = toSVGFontElement(collection->item(i));
213 if (element->getIdAttribute() == fontName)
214 return element;
215 }
216
217 return 0;
218 }
219 #endif
220
221 bool FontResource::isSafeToUnlock() const 145 bool FontResource::isSafeToUnlock() const
222 { 146 {
223 return m_data->hasOneRef(); 147 return m_data->hasOneRef();
224 } 148 }
225 149
226 void FontResource::fontLoadWaitLimitCallback(Timer<FontResource>*) 150 void FontResource::fontLoadWaitLimitCallback(Timer<FontResource>*)
227 { 151 {
228 if (!isLoading()) 152 if (!isLoading())
229 return; 153 return;
230 m_exceedsFontLoadWaitLimit = true; 154 m_exceedsFontLoadWaitLimit = true;
(...skipping 10 matching lines...) Expand all
241 165
242 void FontResource::checkNotify() 166 void FontResource::checkNotify()
243 { 167 {
244 m_fontLoadWaitLimitTimer.stop(); 168 m_fontLoadWaitLimitTimer.stop();
245 ResourceClientWalker<FontResourceClient> w(m_clients); 169 ResourceClientWalker<FontResourceClient> w(m_clients);
246 while (FontResourceClient* c = w.next()) 170 while (FontResourceClient* c = w.next())
247 c->fontLoaded(this); 171 c->fontLoaded(this);
248 } 172 }
249 173
250 } 174 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698