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.
5 #ifndef RemoteFontFaceSource_h
6 #define RemoteFontFaceSource_h
8 #include "core/css/CSSFontFaceSource.h"
9 #include "core/fetch/FontResource.h"
10 #include "core/fetch/ResourcePtr.h"
14 class RemoteFontFaceSource : public CSSFontFaceSource, public FontResourceClient {
16 explicit RemoteFontFaceSource(FontResource*);
17 virtual ~RemoteFontFaceSource();
19 virtual FontResource* resource() OVERRIDE { return m_font.get(); }
20 virtual bool isLoading() const OVERRIDE;
21 virtual bool isLoaded() const OVERRIDE;
22 virtual bool isValid() const OVERRIDE;
24 void beginLoadIfNeeded();
25 virtual bool ensureFontData();
28 virtual bool isSVGFontFaceSource() const { return false; }
31 virtual void didStartFontLoad(FontResource*) OVERRIDE;
32 virtual void fontLoaded(FontResource*) OVERRIDE;
33 virtual void fontLoadWaitLimitExceeded(FontResource*) OVERRIDE;
34 virtual void corsFailed(FontResource*) OVERRIDE;
37 virtual bool hadBlankText() OVERRIDE { return m_histograms.hadBlankText(); }
38 void paintRequested() { m_histograms.fallbackFontPainted(); }
41 virtual PassRefPtr<SimpleFontData> createFontData(const FontDescription&) OVERRIDE;
42 PassRefPtr<SimpleFontData> createLoadingFallbackFontData(const FontDescription&);
46 class FontLoadHistograms {
48 FontLoadHistograms() : m_loadStartTime(0), m_fallbackPaintTime(0), m_corsFailed(false) { }
50 void fallbackFontPainted();
51 void recordRemoteFont(const FontResource*);
52 void recordFallbackTime(const FontResource*);
53 void corsFailed() { m_corsFailed = true; }
54 bool hadBlankText() { return m_fallbackPaintTime; }
56 const char* histogramName(const FontResource*);
57 double m_loadStartTime;
58 double m_fallbackPaintTime;
62 ResourcePtr<FontResource> m_font;
63 FontLoadHistograms m_histograms;
66 } // namespace WebCore