diff options
Diffstat (limited to 'layout/style/FontFaceSetDocumentImpl.h')
-rw-r--r-- | layout/style/FontFaceSetDocumentImpl.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/layout/style/FontFaceSetDocumentImpl.h b/layout/style/FontFaceSetDocumentImpl.h new file mode 100644 index 0000000000..d32103e203 --- /dev/null +++ b/layout/style/FontFaceSetDocumentImpl.h @@ -0,0 +1,123 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_FontFaceSetDocumentImpl_h +#define mozilla_dom_FontFaceSetDocumentImpl_h + +#include "mozilla/dom/FontFaceSetImpl.h" +#include "nsICSSLoaderObserver.h" +#include "nsIDOMEventListener.h" + +namespace mozilla::dom { + +class FontFaceSetDocumentImpl final : public FontFaceSetImpl, + public nsIDOMEventListener, + public nsICSSLoaderObserver { + NS_DECL_ISUPPORTS_INHERITED + + public: + NS_DECL_NSIDOMEVENTLISTENER + + FontFaceSetDocumentImpl(FontFaceSet* aOwner, dom::Document* aDocument); + + void Initialize(); + void Destroy() override; + + bool IsOnOwningThread() override; +#ifdef DEBUG + void AssertIsOnOwningThread() override; +#endif + void DispatchToOwningThread(const char* aName, + std::function<void()>&& aFunc) override; + + void RefreshStandardFontLoadPrincipal() override; + + dom::Document* GetDocument() const override { return mDocument; } + + already_AddRefed<URLExtraData> GetURLExtraData() override; + + // gfxUserFontSet + + nsresult StartLoad(gfxUserFontEntry* aUserFontEntry, + uint32_t aSrcIndex) override; + + bool IsFontLoadAllowed(const gfxFontFaceSrc&) override; + + nsPresContext* GetPresContext() const override; + + bool UpdateRules(const nsTArray<nsFontFaceRuleContainer>& aRules) override; + + StyleLockedFontFaceRule* FindRuleForEntry(gfxFontEntry* aFontEntry) override; + + /** + * Notification method called by the nsPresContext to indicate that the + * refresh driver ticked and flushed style and layout. + * were just flushed. + */ + void DidRefresh() override; + + // nsICSSLoaderObserver + NS_IMETHOD StyleSheetLoaded(StyleSheet* aSheet, bool aWasDeferred, + nsresult aStatus) override; + + // For ServoStyleSet to know ahead of time whether a font is loadable. + void CacheFontLoadability() override; + + void EnsureReady() override; + + bool Add(FontFaceImpl* aFontFace, ErrorResult& aRv) override; + + void FlushUserFontSet() override; + void MarkUserFontSetDirty() override; + + private: + ~FontFaceSetDocumentImpl() override; + + uint64_t GetInnerWindowID() override; + + void RemoveDOMContentLoadedListener(); + + nsresult CreateChannelForSyncLoadFontData( + nsIChannel** aOutChannel, gfxUserFontEntry* aFontToLoad, + const gfxFontFaceSrc* aFontFaceSrc) override; + + // search for @font-face rule that matches a userfont font entry + StyleLockedFontFaceRule* FindRuleForUserFontEntry( + gfxUserFontEntry* aUserFontEntry) override; + + void FindMatchingFontFaces(const nsTHashSet<FontFace*>& aMatchingFaces, + nsTArray<FontFace*>& aFontFaces) override; + + void InsertRuleFontFace(FontFaceImpl* aFontFace, FontFace* aFontFaceOwner, + StyleOrigin aOrigin, + nsTArray<FontFaceRecord>& aOldRecords, + bool& aFontSetModified); + + // Helper function for HasLoadingFontFaces. + void UpdateHasLoadingFontFaces() override; + + /** + * Returns whether there might be any pending font loads, which should cause + * the mReady Promise not to be resolved yet. + */ + bool MightHavePendingFontLoads() override; + +#ifdef DEBUG + bool HasRuleFontFace(FontFaceImpl* aFontFace); +#endif + + TimeStamp GetNavigationStartTimeStamp() override; + + // The document this is a FontFaceSet for. + RefPtr<dom::Document> mDocument; + + // The @font-face rule backed FontFace objects in the FontFaceSet. + nsTArray<FontFaceRecord> mRuleFaces; +}; + +} // namespace mozilla::dom + +#endif // !defined(mozilla_dom_FontFaceSetDocumentImpl_h) |