#ifndef CSSFontSelector_h
#define CSSFontSelector_h
#include "core/css/FontFaceCache.h"
#include "core/fetch/ResourcePtr.h"
#include "heap/Handle.h"
#include "platform/Timer.h"
#include "platform/fonts/FontSelector.h"
#include "platform/fonts/GenericFontFamilySettings.h"
#include "wtf/Forward.h"
#include "wtf/HashMap.h"
#include "wtf/HashSet.h"
namespace WebCore {
class CSSFontFace;
class CSSFontFaceRule;
class CSSFontSelectorClient;
class CSSSegmentedFontFace;
class FontResource;
class Document;
class FontDescription;
class StyleRuleFontFace;
class FontLoader {
public:
explicit FontLoader(ResourceFetcher*);
void addFontToBeginLoading(FontResource*);
void loadPendingFonts();
void clearResourceFetcher();
private:
void beginLoadTimerFired(Timer<FontLoader>*);
Timer<FontLoader> m_beginLoadingTimer;
Vector<ResourcePtr<FontResource> > m_fontsToBeginLoading;
ResourceFetcher* m_resourceFetcher;
};
class CSSFontSelector FINAL : public FontSelector {
public:
static PassRefPtr<CSSFontSelector> create(Document* document)
{
return adoptRef(new CSSFontSelector(document));
}
virtual ~CSSFontSelector();
virtual unsigned version() const OVERRIDE { return m_fontFaceCache.version(); }
virtual PassRefPtr<FontData> getFontData(const FontDescription&, const AtomicString&) OVERRIDE;
virtual void willUseFontData(const FontDescription&, const AtomicString& family) OVERRIDE;
void clearDocument();
void fontLoaded();
virtual void fontCacheInvalidated() OVERRIDE;
void registerForInvalidationCallbacks(CSSFontSelectorClient*);
#if !ENABLE(OILPAN)
void unregisterForInvalidationCallbacks(CSSFontSelectorClient*);
#endif
Document* document() const { return m_document; }
FontFaceCache* fontFaceCache() { return &m_fontFaceCache; }
const GenericFontFamilySettings& genericFontFamilySettings() const { return m_genericFontFamilySettings; }
void updateGenericFontFamilySettings(Document&);
void beginLoadingFontSoon(FontResource*);
void loadPendingFonts();
private:
explicit CSSFontSelector(Document*);
void dispatchInvalidationCallbacks();
Document* m_document;
FontFaceCache m_fontFaceCache;
WillBePersistentHeapHashSet<RawPtrWillBeWeakMember<CSSFontSelectorClient> > m_clients;
FontLoader m_fontLoader;
GenericFontFamilySettings m_genericFontFamilySettings;
};
}
#endif