summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSFontFaceSource.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSFontFaceSource.h')
-rw-r--r--Source/WebCore/css/CSSFontFaceSource.h82
1 files changed, 42 insertions, 40 deletions
diff --git a/Source/WebCore/css/CSSFontFaceSource.h b/Source/WebCore/css/CSSFontFaceSource.h
index 818a3269c..4d0065219 100644
--- a/Source/WebCore/css/CSSFontFaceSource.h
+++ b/Source/WebCore/css/CSSFontFaceSource.h
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -23,72 +23,74 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef CSSFontFaceSource_h
-#define CSSFontFaceSource_h
+#pragma once
#include "CachedFontClient.h"
#include "CachedResourceHandle.h"
-#include "Timer.h"
-#include <wtf/HashMap.h>
+#include <runtime/ArrayBufferView.h>
#include <wtf/text/AtomicString.h>
namespace WebCore {
-class CachedFont;
class CSSFontFace;
class CSSFontSelector;
+class Font;
+struct FontCustomPlatformData;
class FontDescription;
-class SimpleFontData;
-#if ENABLE(SVG_FONTS)
-class SVGFontElement;
+struct FontVariantSettings;
class SVGFontFaceElement;
-#endif
+class SharedBuffer;
-class CSSFontFaceSource : public CachedFontClient {
+template <typename T> class FontTaggedSettings;
+typedef FontTaggedSettings<int> FontFeatureSettings;
+
+class CSSFontFaceSource final : public CachedFontClient {
+ WTF_MAKE_FAST_ALLOCATED;
public:
- CSSFontFaceSource(const String&, CachedFont* = 0);
+ CSSFontFaceSource(CSSFontFace& owner, const String& familyNameOrURI, CachedFont* = nullptr, SVGFontFaceElement* = nullptr, RefPtr<JSC::ArrayBufferView>&& = nullptr);
virtual ~CSSFontFaceSource();
- bool isLoaded() const;
- bool isValid() const;
-
- const AtomicString& string() const { return m_string; }
+ // => Success
+ // //
+ // Pending => Loading
+ // \\.
+ // => Failure
+ enum class Status {
+ Pending,
+ Loading,
+ Success,
+ Failure
+ };
+ Status status() const { return m_status; }
- void setFontFace(CSSFontFace* face) { m_face = face; }
+ const AtomicString& familyNameOrURI() const { return m_familyNameOrURI; }
- virtual void fontLoaded(CachedFont*);
-
- PassRefPtr<SimpleFontData> getFontData(const FontDescription&, bool syntheticBold, bool syntheticItalic, CSSFontSelector*);
-
- void pruneTable();
+ void load(CSSFontSelector&);
+ RefPtr<Font> font(const FontDescription&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&);
#if ENABLE(SVG_FONTS)
- SVGFontFaceElement* svgFontFaceElement() const;
- void setSVGFontFaceElement(PassRefPtr<SVGFontFaceElement>);
bool isSVGFontFaceSource() const;
- void setHasExternalSVGFont(bool value) { m_hasExternalSVGFont = value; }
-#endif
-
-#if ENABLE(FONT_LOAD_EVENTS)
- bool isDecodeError() const;
- bool ensureFontData();
#endif
private:
- void startLoadingTimerFired(Timer<CSSFontFaceSource>*);
+ void fontLoaded(CachedFont&) override;
+
+ void setStatus(Status);
- AtomicString m_string; // URI for remote, built-in font name for local.
+ AtomicString m_familyNameOrURI; // URI for remote, built-in font name for local.
CachedResourceHandle<CachedFont> m_font; // For remote fonts, a pointer to our cached resource.
- CSSFontFace* m_face; // Our owning font face.
- HashMap<unsigned, RefPtr<SimpleFontData>> m_fontDataTable; // The hash key is composed of size synthetic styles.
+ CSSFontFace& m_face; // Our owning font face.
+
+ RefPtr<SharedBuffer> m_generatedOTFBuffer;
+ RefPtr<JSC::ArrayBufferView> m_immediateSource;
+ std::unique_ptr<FontCustomPlatformData> m_immediateFontCustomPlatformData;
#if ENABLE(SVG_FONTS)
RefPtr<SVGFontFaceElement> m_svgFontFaceElement;
- RefPtr<SVGFontElement> m_externalSVGFontElement;
- bool m_hasExternalSVGFont;
#endif
-};
+ std::unique_ptr<FontCustomPlatformData> m_inDocumentCustomPlatformData;
-}
+ Status m_status { Status::Pending };
+};
-#endif
+} // namespace WebCore