Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 443de8e8e9716b164f0a25da35e9235efd72d4dd https://github.com/WebKit/WebKit/commit/443de8e8e9716b164f0a25da35e9235efd72d4dd Author: Darin Adler <da...@apple.com> Date: 2022-11-06 (Sun, 06 Nov 2022)
Changed paths: M LayoutTests/fast/css/font-face-src-parsing-expected.txt M LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/font-family-src-quoted-expected.txt M Source/WebCore/css/CSSFontFace.cpp M Source/WebCore/css/CSSFontFaceSet.cpp M Source/WebCore/css/CSSFontFaceSet.h M Source/WebCore/css/CSSFontFaceSource.cpp M Source/WebCore/css/CSSFontFaceSource.h M Source/WebCore/css/CSSFontFaceSrcValue.cpp M Source/WebCore/css/CSSFontFaceSrcValue.h M Source/WebCore/css/CSSMarkup.cpp M Source/WebCore/css/CSSValue.cpp M Source/WebCore/css/CSSValue.h M Source/WebCore/css/FontFace.cpp M Source/WebCore/css/parser/CSSPropertyParser.cpp M Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp M Source/WebCore/css/parser/CSSPropertyParserHelpers.h M Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp M Source/WebCore/css/parser/CSSTokenizer.cpp M Source/WebCore/css/parser/CSSTokenizer.h M Source/WebCore/dom/Document.cpp M Source/WebCore/dom/Document.h M Source/WebCore/dom/ScriptExecutionContext.cpp M Source/WebCore/dom/ScriptExecutionContext.h M Source/WebCore/loader/FontLoadRequest.h M Source/WebCore/loader/cache/CachedFont.cpp M Source/WebCore/loader/cache/CachedFont.h M Source/WebCore/loader/cache/CachedFontLoadRequest.h M Source/WebCore/loader/cache/CachedSVGFont.cpp M Source/WebCore/loader/cache/CachedSVGFont.h M Source/WebCore/svg/SVGFontFaceElement.cpp M Source/WebCore/svg/SVGFontFaceNameElement.cpp M Source/WebCore/svg/SVGFontFaceNameElement.h M Source/WebCore/svg/SVGFontFaceSrcElement.cpp M Source/WebCore/svg/SVGFontFaceSrcElement.h M Source/WebCore/svg/SVGFontFaceUriElement.cpp M Source/WebCore/svg/SVGFontFaceUriElement.h M Source/WebCore/workers/WorkerFontLoadRequest.cpp M Source/WebCore/workers/WorkerFontLoadRequest.h M Source/WebCore/workers/WorkerGlobalScope.cpp M Source/WebCore/workers/WorkerGlobalScope.h Log Message: ----------- @font-face src must serialize specified URLs, not URLs resolved against the base https://bugs.webkit.org/show_bug.cgi?id=247547 rdar://problem/102012585 Reviewed by Sam Weinig. * LayoutTests/fast/css/font-face-src-parsing-expected.txt: Updated to expect successful parsing of all the values for src. The old code expected some to be skipped, and they are not skipped any more. * LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/font-family-src-quoted-expected.txt: Expect PASS. * Source/WebCore/css/CSSFontFace.cpp: (WebCore::CSSFontFace::appendSources): Updated since CSSFontFaceSrcLocalValue and CSSFontFaceSrcResourceValue are now two separate classes and CSSFontFaceSource gets the URL from the FontLoadRequest rather than taking a separate URL argument. * Source/WebCore/css/CSSFontFaceSet.cpp: (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered): Take AtomString. (WebCore::CSSFontFaceSet::addToFacesLookupTable): Use AtomString. * Source/WebCore/css/CSSFontFaceSet.h: Updated for above. * Source/WebCore/css/CSSFontFaceSource.cpp: (WebCore::CSSFontFaceSource::CSSFontFaceSource): Updated the argument name since this now takes only a font face name, not a URL. Also, a font face name is *not* the same thing as a family name, so don't call it a family name. Change argument types for things we take ownership of to the appropriate owning type: AtomString and UniqueRef. (WebCore::CSSFontFaceSource::opportunisticallyStartFontDataURLLoading): Check the length of URL from the font request itself to decide if it's short enough, rather than using m_familyNameOrURI. (WebCore::CSSFontFaceSource::fontLoaded): Removed the argument from ensureCustomFontData. We don't need to pass the URL back to the object which supplied the URL in the first place. (WebCore::CSSFontFaceSource::load): Updated for the name change of m_fontFaceName. (WebCore::CSSFontFaceSource::font): Ditto. Also removed the argument from ensureCustomFontData and createFont. * Source/WebCore/css/CSSFontFaceSource.h: Changed the constructors: We don’t need to pass in a URL along with a FontLoadRequest, which contains the URL. The font face name is not the same thing as a family name, so let's not call it that. Change argument types for things we take ownership of to the appropriate owning type: AtomString and UniqueRef. There is not font face name or URL when creating from an ArrayBufferView, so don't require the caller to pass a null one in. Removed the familyNameOrURI function, which was unneeded. Replaced m_familyNameOrURI with m_fontFaceName. Made m_fontRequest const to emphasize it's never changed after construction. * Source/WebCore/css/CSSFontFaceSrcValue.cpp: Broke the CSSFontFaceSrcValue into two classes, CSSFontFaceSrcLocalValue and CSSFontFaceSrcResourceValue. Otherwise this class would have mostly been variant processing, since there are basically no data members in common. (WebCore::CSSFontFaceSrcLocalValue::CSSFontFaceSrcLocalValue): Added. (WebCore::CSSFontFaceSrcLocalValue::create): Added. (WebCore::CSSFontFaceSrcLocalValue::svgFontFaceElement const): Added. (WebCore::CSSFontFaceSrcLocalValue::setSVGFontFaceElement): Added. (WebCore::CSSFontFaceSrcLocalValue::customCSSText const): Added. (WebCore::CSSFontFaceSrcLocalValue::equals const): Added. (WebCore::CSSFontFaceSrcResourceValue::CSSFontFaceSrcResourceValue): Added. Stores the location as a ResolvedURL, the same way CSSImageValue does. (WebCore::CSSFontFaceSrcResourceValue::create): Added. (WebCore::CSSFontFaceSrcResourceValue::fontLoadRequest): Added. Besides what the old version of this function did, this now checks if the format is one we can load and returns nullptr if not. (WebCore::CSSFontFaceSrcResourceValue::customTraverseSubresources const): Added. (WebCore::CSSFontFaceSrcResourceValue::customCSSText const): Added. Here is where the core of the bug fix is: we serialize the specified URL string, not the resolved URL. (WebCore::CSSFontFaceSrcResourceValue::equals const): Added. * Source/WebCore/css/CSSFontFaceSrcValue.h: Broke the CSSFontFaceSrcValue class into two classes, CSSFontFaceSrcLocalValue and CSSFontFaceSrcResourceValue. Removed unneeded functions resource, format, isLocal, setFormat, isSupportedFormat, isSVGFontFaceSrc, abd isSVGFontTarget. Added fontFaceName and isEmpty functions to CSSFontFaceSrcLocalValue. Changed CSSFontFaceSrcResourceValue to take and store a ResolvedURL. Added isEmpty and isFormatSVG functions to CSSFontFaceSrcResourceValue. Changed fontLoadRequest to take a ScriptExecutionContext& and also removed the isSVG argument since CSSFontFaceSrcResourceValue itself is the where the answer to that question comes from. * Source/WebCore/css/CSSValue.cpp: (WebCore::CSSValue::visitDerived): Updated for the two classes that replace CSSFontFaceSrcValue. * Source/WebCore/css/CSSValue.h: Ditto. * Source/WebCore/css/FontFace.cpp: (WebCore::populateFontFaceWithArrayBuffer): Remove unneeded null URL string argument. * Source/WebCore/css/parser/CSSPropertyParser.cpp: (WebCore::consumePaintStroke): Updated to call consumeURL. (WebCore::consumeNoneOrURI): Ditto. (WebCore::consumePathOperation): Ditto. (WebCore::consumeGridTrackRepeatFunction): Updated to use a rangee-based for loop. * Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp: (WebCore::CSSPropertyParserHelpers::consumeURLRaw): Renamed from consumeUrlAsStringView. (WebCore::CSSPropertyParserHelpers::consumeURL): Renamed from consumeUrl. (WebCore::CSSPropertyParserHelpers::consumeFilter): Updated to call consumeURL. (WebCore::CSSPropertyParserHelpers::consumeImage): Ditto. * Source/WebCore/css/parser/CSSPropertyParserHelpers.h: Updated for the name changes. * Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp: (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcURI): Use the ResolvedURL instead of immediately turning it into a string. Call the new CSSFontFaceSrcResourceValue::create. (WebCore::CSSPropertyParserHelpersWorkerSafe::consumeFontFaceSrcLocal): Call the new CSSFontFaceSrcLocalValue::create. * Source/WebCore/css/parser/CSSTokenizer.cpp: (WebCore::CSSTokenizer::consumeIdentLikeToken): Use consumeURLToken. (WebCore::CSSTokenizer::consumeURLToken): Renamed from consumeUrlToken. * Source/WebCore/css/parser/CSSTokenizer.h: Updated for the name change. * Source/WebCore/dom/Document.cpp: (WebCore::Document::fontLoadRequest): Changed the URL argument to a const String&. It was String& before by accident. * Source/WebCore/dom/Document.h: Ditto. * Source/WebCore/dom/ScriptExecutionContext.cpp: (WebCore::ScriptExecutionContext::fontLoadRequest): Ditto. * Source/WebCore/dom/ScriptExecutionContext.h: Ditto. * Source/WebCore/loader/FontLoadRequest.h: Took out the unnneded remoteURI arguments from the ensureCustomFontData and createFont functions. These involve the font load request passing the URI back to the object it came from, so they aren't needed. * Source/WebCore/loader/cache/CachedFont.cpp: (WebCore::CachedFont::ensureCustomFontData): Removed remoteURI argument. (WebCore::CachedFont::createFont): Ditto. * Source/WebCore/loader/cache/CachedFont.h: Ditto. * Source/WebCore/loader/cache/CachedFontLoadRequest.h: Ditto. * Source/WebCore/loader/cache/CachedSVGFont.cpp: (WebCore::CachedSVGFont::createFont): Ditto. (WebCore::CachedSVGFont::ensureCustomFontData): Ditto. (WebCore::CachedSVGFont::maybeInitializeExternalSVGFontElement): Ditto. The logic here got simpler becuase when we have an already-parsed URL instead of just an atom string we can take advantage of member functions. (WebCore::CachedSVGFont::firstFontFace): Ditto. * Source/WebCore/loader/cache/CachedSVGFont.h: Ditto. * Source/WebCore/svg/SVGFontFaceElement.cpp: (WebCore::SVGFontFaceElement::rebuildFontFace): Use CSSFontFaceSrcLocalValue::create, a range-based for loop, and pass a reference instead of a pointer. Call createSrcValue. * Source/WebCore/svg/SVGFontFaceNameElement.cpp: (WebCore::SVGFontFaceNameElement::createSrcValue const): Renamed from srcValue, and return a CSSFontFaceSrcLocalValue. * Source/WebCore/svg/SVGFontFaceNameElement.h: Ditto. * Source/WebCore/svg/SVGFontFaceSrcElement.cpp: (WebCore::SVGFontFaceSrcElement::createSrcValue const): Renamed from srcValue, and updated to work with the two different createSrcValue functions that now have different return types. * Source/WebCore/svg/SVGFontFaceUriElement.cpp: (WebCore::SVGFontFaceUriElement::createSrcValue const): Renamed from srcValue, and return a CSSFontFaceSrcResourceValue. (WebCore::isSVGFontTarget): Check if the font is an SVG font without creating and destroying a CSSFontFaceSrcValue, which is overkill since we can check the format attribute directly. * Source/WebCore/svg/SVGFontFaceUriElement.h: Return a CSSFontFaceSrcResourceValue. * Source/WebCore/workers/WorkerFontLoadRequest.cpp: (WebCore::WorkerFontLoadRequest::ensureCustomFontData): Removed remoteURI argument. (WebCore::WorkerFontLoadRequest::createFont): Ditto. * Source/WebCore/workers/WorkerFontLoadRequest.h: Ditto. * Source/WebCore/workers/WorkerGlobalScope.cpp: (WebCore::WorkerGlobalScope::fontLoadRequest): Changed the URL argument to a const String&. It was String& before by accident. * Source/WebCore/workers/WorkerGlobalScope.h: Ditto. Canonical link: https://commits.webkit.org/256387@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes