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"
16 class RemoteFontFaceSource : public CSSFontFaceSource, public FontResourceClient {
18 explicit RemoteFontFaceSource(FontResource*, PassRefPtrWillBeRawPtr<FontLoader>);
19 virtual ~RemoteFontFaceSource();
21 virtual FontResource* resource() override { return m_font.get(); }
22 virtual bool isLoading() const override;
23 virtual bool isLoaded() const override;
24 virtual bool isValid() const override;
26 void beginLoadIfNeeded() override;
27 virtual bool ensureFontData();
29 virtual void didStartFontLoad(FontResource*) override;
30 virtual void fontLoaded(FontResource*) override;
31 virtual void fontLoadWaitLimitExceeded(FontResource*) override;
34 virtual bool hadBlankText() override { return m_histograms.hadBlankText(); }
35 void paintRequested() { m_histograms.fallbackFontPainted(); }
37 virtual void trace(Visitor*) override;
40 virtual PassRefPtr<SimpleFontData> createFontData(const FontDescription&) override;
41 PassRefPtr<SimpleFontData> createLoadingFallbackFontData(const FontDescription&);
45 class FontLoadHistograms {
47 FontLoadHistograms() : m_loadStartTime(0), m_fallbackPaintTime(0) { }
49 void fallbackFontPainted();
50 void recordRemoteFont(const FontResource*);
51 void recordFallbackTime(const FontResource*);
52 bool hadBlankText() { return m_fallbackPaintTime; }
54 const char* histogramName(const FontResource*);
55 double m_loadStartTime;
56 double m_fallbackPaintTime;
59 ResourcePtr<FontResource> m_font;
60 RefPtrWillBeMember<FontLoader> m_fontLoader;
61 FontLoadHistograms m_histograms;