Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 2fff06ab22a9a766d9314fdc4eaefeadbf67d63d https://github.com/WebKit/WebKit/commit/2fff06ab22a9a766d9314fdc4eaefeadbf67d63d Author: Ryan Reno <rr...@apple.com> Date: 2023-03-01 (Wed, 01 Mar 2023)
Changed paths: A LayoutTests/fast/css/image-set-type-crash-expected.txt A LayoutTests/fast/css/image-set-type-crash.html M LayoutTests/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub-expected.txt M LayoutTests/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub.html M LayoutTests/platform/glib/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub-expected.txt M Source/WebCore/Sources.txt M Source/WebCore/WebCore.xcodeproj/project.pbxproj M Source/WebCore/css/CSSImageSetOptionValue.cpp M Source/WebCore/css/CSSImageSetOptionValue.h M Source/WebCore/css/CSSImageSetValue.cpp M Source/WebCore/css/CSSImageValue.cpp M Source/WebCore/css/CSSImageValue.h M Source/WebCore/rendering/style/StyleImage.h M Source/WebCore/rendering/style/StyleImageSet.cpp M Source/WebCore/rendering/style/StyleImageSet.h A Source/WebCore/rendering/style/StyleInvalidImage.cpp A Source/WebCore/rendering/style/StyleInvalidImage.h M Source/WebCore/rendering/style/StyleMultiImage.cpp M Source/WebCore/rendering/style/StyleMultiImage.h Log Message: ----------- image-set() should serialize in authored order https://bugs.webkit.org/show_bug.cgi?id=251196 rdar://104683422 Reviewed by Antti Koivisto. To make choosing an image in the image-set more efficient we sort the set by resolution. This was causing us to serialize in a different order than the value was authored if the author did not also sort by resolution. This change preserves the order of the image-set-options as authored while providing a vector of sorted indices to enable linear lookups by device resolution. In the case where the image-set is empty because there are no supported image types we introduce the concept of an invalid image[0]. This is a Style object that represents a zero-sized image. This way we can have a well-defined image object to use in the style, rendering, and paint systems but no loads will be triggered and the invalid image will have zero intrinsic size so as not to affect layout calculations. [0] http://w3c.github.io/csswg-drafts/css-images-4/#invalid-image * LayoutTests/platform/glib/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub-expected.txt: * LayoutTests/fast/css/image-set-type-crash-expected.txt: Added. * LayoutTests/fast/css/image-set-type-crash.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-images/image-set/image-set-computed.sub.html: Added test cases for checking the computed style of an image-set with no supported image types. * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/css/CSSImageSetOptionValue.cpp: (WebCore::CSSImageSetOptionValue::CSSImageSetOptionValue): (WebCore::CSSImageSetOptionValue::create): (WebCore::CSSImageSetOptionValue::equals const): (WebCore::CSSImageSetOptionValue::customCSSText const): (WebCore::CSSImageSetOptionValue::setResolution): (WebCore::CSSImageSetOptionValue::setType): (WebCore::CSSImageSetOptionValue::Type::Type): Deleted. (WebCore::CSSImageSetOptionValue::Type::cssText const): Deleted. (WebCore::CSSImageSetOptionValue::image const): Deleted. (WebCore::CSSImageSetOptionValue::resolution const): Deleted. (WebCore::CSSImageSetOptionValue::type const): Deleted. * Source/WebCore/css/CSSImageSetOptionValue.h: Remove the CSSImageSetOptionValue::Type class. Since we no longer filter the image set by given type prior to making the StyleImageSet object, there's no need to check if the type is supported at this stage. Now we just hold the string as given to us by the CSS parser (if any). Since type is an optional parameter for the image set option, we represent the lack of a specified type with a null string. * Source/WebCore/css/CSSImageSetValue.cpp: (WebCore::CSSImageSetValue::createStyleImage const): * Source/WebCore/rendering/style/StyleImage.h: (WebCore::StyleImage::isGeneratedImage const): (WebCore::StyleImage::isInvalidImage const): * Source/WebCore/rendering/style/StyleImageSet.cpp: (WebCore::StyleImageSet::create): (WebCore::StyleImageSet::StyleImageSet): (WebCore::StyleImageSet::bestImageForScaleFactor): * Source/WebCore/rendering/style/StyleImageSet.h: * Source/WebCore/rendering/style/StyleInvalidImage.cpp: Copied from Source/WebCore/css/CSSImageSetOptionValue.h. (WebCore::StyleInvalidImage::create): (WebCore::StyleInvalidImage::StyleInvalidImage): (WebCore::StyleInvalidImage::load): (WebCore::StyleInvalidImage::image const): (WebCore::StyleInvalidImage::computedStyleValue const): * Source/WebCore/rendering/style/StyleInvalidImage.h: Copied from Source/WebCore/css/CSSImageSetOptionValue.h. * Source/WebCore/rendering/style/StyleMultiImage.cpp: (WebCore::StyleMultiImage::load): * Source/WebCore/rendering/style/StyleMultiImage.h: Canonical link: https://commits.webkit.org/261015@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes