diff --git a/gfx/thebes/gfxUserFontSet.cpp b/gfx/thebes/gfxUserFontSet.cpp index 7d1cc222fc0..6fe26c44468 100644 --- a/gfx/thebes/gfxUserFontSet.cpp +++ b/gfx/thebes/gfxUserFontSet.cpp @@ -126,6 +126,8 @@ gfxUserFontEntry::gfxUserFontEntry(gfxUserFontSet* aFontSet, mLoader(nullptr), mFontSet(aFontSet) { + MOZ_ASSERT(aWeight != 0, + "aWeight must not be 0; use NS_FONT_WEIGHT_NORMAL instead"); mIsUserFontContainer = true; mSrcList = aFontFaceSrcList; mSrcIndex = 0; @@ -727,8 +729,6 @@ gfxUserFontSet::CreateFontFace(const nsTArray& aFontFaceSrcList, uint32_t aLanguageOverride, gfxSparseBitSet* aUnicodeRanges) { - MOZ_ASSERT(aWeight != 0, - "aWeight must not be 0; use NS_FONT_WEIGHT_NORMAL instead"); nsRefPtr userFontEntry = new gfxUserFontEntry(this, aFontFaceSrcList, aWeight, diff --git a/gfx/thebes/gfxUserFontSet.h b/gfx/thebes/gfxUserFontSet.h index ec64913df55..1eae77c9c5a 100644 --- a/gfx/thebes/gfxUserFontSet.h +++ b/gfx/thebes/gfxUserFontSet.h @@ -154,14 +154,14 @@ public: // italic style = constants in gfxFontConstants.h, e.g. NS_FONT_STYLE_NORMAL // language override = result of calling gfxFontStyle::ParseFontLanguageOverride // TODO: support for unicode ranges not yet implemented - already_AddRefed CreateFontFace( + virtual already_AddRefed CreateFontFace( const nsTArray& aFontFaceSrcList, uint32_t aWeight, int32_t aStretch, uint32_t aItalicStyle, const nsTArray& aFeatureSettings, uint32_t aLanguageOverride, - gfxSparseBitSet* aUnicodeRanges); + gfxSparseBitSet* aUnicodeRanges) = 0; // creates a font face for the specified family, or returns an existing // matching entry on the family if there is one diff --git a/layout/style/FontFace.h b/layout/style/FontFace.h index f712204a388..685c0e71802 100644 --- a/layout/style/FontFace.h +++ b/layout/style/FontFace.h @@ -6,8 +6,9 @@ #ifndef mozilla_dom_FontFace_h #define mozilla_dom_FontFace_h -#include "nsWrapperCache.h" #include "mozilla/dom/FontFaceBinding.h" +#include "gfxUserFontSet.h" +#include "nsWrapperCache.h" namespace mozilla { namespace dom { @@ -24,6 +25,21 @@ class FontFace MOZ_FINAL : public nsISupports, public nsWrapperCache { public: + class Entry MOZ_FINAL : public gfxUserFontEntry { + public: + Entry(gfxUserFontSet* aFontSet, + const nsTArray& aFontFaceSrcList, + uint32_t aWeight, + int32_t aStretch, + uint32_t aItalicStyle, + const nsTArray& aFeatureSettings, + uint32_t aLanguageOverride, + gfxSparseBitSet* aUnicodeRanges) + : gfxUserFontEntry(aFontSet, aFontFaceSrcList, aWeight, aStretch, + aItalicStyle, aFeatureSettings, aLanguageOverride, + aUnicodeRanges) {} + }; + NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FontFace) diff --git a/layout/style/FontFaceSet.cpp b/layout/style/FontFaceSet.cpp index 1dc61d4b777..e4951ea27d3 100644 --- a/layout/style/FontFaceSet.cpp +++ b/layout/style/FontFaceSet.cpp @@ -11,6 +11,7 @@ #endif /* MOZ_LOGGING */ #include "prlog.h" +#include "mozilla/dom/FontFace.h" #include "mozilla/dom/FontFaceSetBinding.h" #include "mozilla/dom/Promise.h" #include "nsCrossSiteListenerProxy.h" @@ -987,3 +988,19 @@ FontFaceSet::UserFontSet::DoRebuildUserFontSet() } mFontFaceSet->DoRebuildUserFontSet(); } + +/* virtual */ already_AddRefed +FontFaceSet::UserFontSet::CreateFontFace( + const nsTArray& aFontFaceSrcList, + uint32_t aWeight, + int32_t aStretch, + uint32_t aItalicStyle, + const nsTArray& aFeatureSettings, + uint32_t aLanguageOverride, + gfxSparseBitSet* aUnicodeRanges) +{ + nsRefPtr entry = + new FontFace::Entry(this, aFontFaceSrcList, aWeight, aStretch, aItalicStyle, + aFeatureSettings, aLanguageOverride, aUnicodeRanges); + return entry.forget(); +} diff --git a/layout/style/FontFaceSet.h b/layout/style/FontFaceSet.h index d9ae52b2806..1eca17918ab 100644 --- a/layout/style/FontFaceSet.h +++ b/layout/style/FontFaceSet.h @@ -72,6 +72,14 @@ public: uint32_t aFlags = nsIScriptError::errorFlag, nsresult aStatus = NS_OK) MOZ_OVERRIDE; virtual void DoRebuildUserFontSet() MOZ_OVERRIDE; + virtual already_AddRefed CreateFontFace( + const nsTArray& aFontFaceSrcList, + uint32_t aWeight, + int32_t aStretch, + uint32_t aItalicStyle, + const nsTArray& aFeatureSettings, + uint32_t aLanguageOverride, + gfxSparseBitSet* aUnicodeRanges) MOZ_OVERRIDE; private: nsRefPtr mFontFaceSet;