CSSFontFaceSource.h [plain text]
#pragma once
#include "CachedFontClient.h"
#include "CachedResourceHandle.h"
#include <JavaScriptCore/ArrayBufferView.h>
#include <wtf/WeakPtr.h>
#include <wtf/text/AtomString.h>
namespace WebCore {
class CSSFontFace;
class CSSFontSelector;
class Font;
struct FontCustomPlatformData;
class FontDescription;
struct FontSelectionSpecifiedCapabilities;
struct FontVariantSettings;
class SVGFontFaceElement;
class SharedBuffer;
template <typename T> class FontTaggedSettings;
typedef FontTaggedSettings<int> FontFeatureSettings;
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 AtomString& familyNameOrURI() const { return m_familyNameOrURI; }
void opportunisticallyStartFontDataURLLoading(CSSFontSelector&);
void load(CSSFontSelector*);
RefPtr<Font> font(const FontDescription&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, FontSelectionSpecifiedCapabilities);
CachedFont* cachedFont() const { return m_font.get(); }
bool requiresExternalResource() const { return m_font; }
bool isSVGFontFaceSource() const;
private:
bool shouldIgnoreFontLoadCompletions() const;
void fontLoaded(CachedFont&) override;
void setStatus(Status);
AtomString m_familyNameOrURI; CachedResourceHandle<CachedFont> m_font; CSSFontFace& m_face;
RefPtr<SharedBuffer> m_generatedOTFBuffer;
RefPtr<JSC::ArrayBufferView> m_immediateSource;
std::unique_ptr<FontCustomPlatformData> m_immediateFontCustomPlatformData;
WeakPtr<SVGFontFaceElement> m_svgFontFaceElement;
std::unique_ptr<FontCustomPlatformData> m_inDocumentCustomPlatformData;
Status m_status { Status::Pending };
bool m_hasSVGFontFaceElement;
};
}