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. 4 5#ifndef RemoteFontFaceSource_h 6#define RemoteFontFaceSource_h 7 8#include "core/css/CSSFontFaceSource.h" 9#include "core/fetch/FontResource.h" 10#include "core/fetch/ResourcePtr.h" 11 12namespace blink { 13 14class FontLoader; 15 16class RemoteFontFaceSource : public CSSFontFaceSource, public FontResourceClient { 17public: 18 explicit RemoteFontFaceSource(FontResource*, PassRefPtrWillBeRawPtr<FontLoader>); 19 virtual ~RemoteFontFaceSource(); 20 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; 25 26 void beginLoadIfNeeded() OVERRIDE; 27 virtual bool ensureFontData(); 28 29#if ENABLE(SVG_FONTS) 30 virtual bool isSVGFontFaceSource() const { return false; } 31#endif 32 33 virtual void didStartFontLoad(FontResource*) OVERRIDE; 34 virtual void fontLoaded(FontResource*) OVERRIDE; 35 virtual void fontLoadWaitLimitExceeded(FontResource*) OVERRIDE; 36 37 // For UMA reporting 38 virtual bool hadBlankText() OVERRIDE { return m_histograms.hadBlankText(); } 39 void paintRequested() { m_histograms.fallbackFontPainted(); } 40 41 virtual void trace(Visitor*) OVERRIDE; 42 43protected: 44 virtual PassRefPtr<SimpleFontData> createFontData(const FontDescription&) OVERRIDE; 45 PassRefPtr<SimpleFontData> createLoadingFallbackFontData(const FontDescription&); 46 void pruneTable(); 47 48private: 49 class FontLoadHistograms { 50 public: 51 FontLoadHistograms() : m_loadStartTime(0), m_fallbackPaintTime(0) { } 52 void loadStarted(); 53 void fallbackFontPainted(); 54 void recordRemoteFont(const FontResource*); 55 void recordFallbackTime(const FontResource*); 56 bool hadBlankText() { return m_fallbackPaintTime; } 57 private: 58 const char* histogramName(const FontResource*); 59 double m_loadStartTime; 60 double m_fallbackPaintTime; 61 }; 62 63 ResourcePtr<FontResource> m_font; 64 RefPtrWillBeMember<FontLoader> m_fontLoader; 65 FontLoadHistograms m_histograms; 66}; 67 68} // namespace blink 69 70#endif 71