mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-25 03:49:42 +00:00

Use the actual Locked<T> types around (via a typedef, just for convenience). Differential Revision: https://phabricator.services.mozilla.com/D177824
124 lines
3.8 KiB
C++
124 lines
3.8 KiB
C++
/* -*- 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)
|