CSSFontFaceSource.h [plain text]
#ifndef CSSFontFaceSource_h
#define CSSFontFaceSource_h
#include "CachedFontClient.h"
#include "CachedResourceHandle.h"
#include <runtime/ArrayBufferView.h>
#include <wtf/text/AtomicString.h>
namespace WebCore {
class CSSFontFace;
class CSSFontSelector;
class Font;
struct FontCustomPlatformData;
class FontDescription;
class FontFeatureSettings;
struct FontVariantSettings;
class SVGFontFaceElement;
class SharedBuffer;
class CSSFontFaceSource final : public CachedFontClient {
WTF_MAKE_FAST_ALLOCATED;
public:
CSSFontFaceSource(CSSFontFace& owner, const String& familyNameOrURI, CachedFont* = nullptr, SVGFontFaceElement* = nullptr, RefPtr<JSC::ArrayBufferView>&& = nullptr);
virtual ~CSSFontFaceSource();
enum class Status {
Pending,
Loading,
Success,
Failure
};
Status status() const { return m_status; }
const AtomicString& familyNameOrURI() const { return m_familyNameOrURI; }
void load(CSSFontSelector&);
RefPtr<Font> font(const FontDescription&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&);
#if ENABLE(SVG_FONTS)
bool isSVGFontFaceSource() const;
#endif
private:
void fontLoaded(CachedFont&) override;
void setStatus(Status);
AtomicString m_familyNameOrURI; CachedResourceHandle<CachedFont> m_font; CSSFontFace& m_face;
RefPtr<SharedBuffer> m_generatedOTFBuffer;
RefPtr<JSC::ArrayBufferView> m_immediateSource;
std::unique_ptr<FontCustomPlatformData> m_immediateFontCustomPlatformData;
#if ENABLE(SVG_FONTS)
RefPtr<SVGFontFaceElement> m_svgFontFaceElement;
#endif
std::unique_ptr<FontCustomPlatformData> m_inDocumentCustomPlatformData;
Status m_status { Status::Pending };
};
}
#endif