416036f326c818d72d372c224730b01685c85a4e
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / RemoteFontFaceSource.h
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
12 namespace WebCore {
13
14 class RemoteFontFaceSource : public CSSFontFaceSource, public FontResourceClient {
15 public:
16     explicit RemoteFontFaceSource(FontResource*);
17     virtual ~RemoteFontFaceSource();
18
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;
23
24     void beginLoadIfNeeded();
25     virtual bool ensureFontData();
26
27 #if ENABLE(SVG_FONTS)
28     virtual bool isSVGFontFaceSource() const { return false; }
29 #endif
30
31     virtual void didStartFontLoad(FontResource*) OVERRIDE;
32     virtual void fontLoaded(FontResource*) OVERRIDE;
33     virtual void fontLoadWaitLimitExceeded(FontResource*) OVERRIDE;
34     virtual void corsFailed(FontResource*) OVERRIDE;
35
36     // For UMA reporting
37     virtual bool hadBlankText() OVERRIDE { return m_histograms.hadBlankText(); }
38     void paintRequested() { m_histograms.fallbackFontPainted(); }
39
40 protected:
41     virtual PassRefPtr<SimpleFontData> createFontData(const FontDescription&) OVERRIDE;
42     PassRefPtr<SimpleFontData> createLoadingFallbackFontData(const FontDescription&);
43     void pruneTable();
44
45 private:
46     class FontLoadHistograms {
47     public:
48         FontLoadHistograms() : m_loadStartTime(0), m_fallbackPaintTime(0), m_corsFailed(false) { }
49         void loadStarted();
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; }
55     private:
56         const char* histogramName(const FontResource*);
57         double m_loadStartTime;
58         double m_fallbackPaintTime;
59         bool m_corsFailed;
60     };
61
62     ResourcePtr<FontResource> m_font;
63     FontLoadHistograms m_histograms;
64 };
65
66 } // namespace WebCore
67
68 #endif