FontFace* FontFace::create(Document* document, const StyleRuleFontFace* fontFaceRule) { const StylePropertySet& properties = fontFaceRule->properties(); // Obtain the font-family property and the src property. Both must be defined. CSSValue* family = properties.getPropertyCSSValue(CSSPropertyFontFamily); if (!family || (!family->isFontFamilyValue() && !family->isPrimitiveValue())) return nullptr; CSSValue* src = properties.getPropertyCSSValue(CSSPropertySrc); if (!src || !src->isValueList()) return nullptr; FontFace* fontFace = new FontFace(document); if (fontFace->setFamilyValue(*family) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStyle) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontWeight) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStretch) && fontFace->setPropertyFromStyle(properties, CSSPropertyUnicodeRange) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontVariant) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontFeatureSettings) && fontFace->setPropertyFromStyle(properties, CSSPropertyFontDisplay) && !fontFace->family().isEmpty() && fontFace->traits().bitfield()) { fontFace->initCSSFontFace(document, src); return fontFace; } return nullptr; }
FontFace* FontFace::create(ExecutionContext* context, const AtomicString& family, const String& source, const FontFaceDescriptors& descriptors) { FontFace* fontFace = new FontFace(context, family, descriptors); CSSValue* src = parseCSSValue(toDocument(context), source, CSSPropertySrc); if (!src || !src->isValueList()) fontFace->setError(DOMException::create(SyntaxError, "The source provided ('" + source + "') could not be parsed as a value list.")); fontFace->initCSSFontFace(toDocument(context), src); return fontFace; }
FontFace* FontFace::create(ExecutionContext* context, const AtomicString& family, DOMArrayBuffer* source, const FontFaceDescriptors& descriptors) { FontFace* fontFace = new FontFace(context, family, descriptors); fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->data()), source->byteLength()); return fontFace; }