LibWeb: Store CSS style value data in Rust-owned allocations - #10749
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR adds Rust-backed FFI storage and dispatch for many LibWeb CSS style values, raw string ownership bridges, null-character search fixes, ChangesCSS style-value FFI migration
Runtime and supporting fixes
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (3)
Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp (1)
3403-3421: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winMaterialize
CalculationContextonce.Each branch rebuilds
accepted_ranges_by_type. Cachecalculation_context()before dispatching on the result type.Proposed fix
+ auto calculation_context = this->calculation_context(); - if (result->type->matches_number(calculation_context().percentages_resolve_as)) { - if (calculation_context().resolve_numbers_as_integers) + if (result->type->matches_number(calculation_context.percentages_resolve_as)) { + if (calculation_context.resolve_numbers_as_integers) return IntegerStyleValue::create(round_to_nearest_integer(result->value));Apply the same local context to the remaining type checks.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp` around lines 3403 - 3421, Cache calculation_context() in a local CalculationContext variable before the result-type dispatch, then use that variable for percentages_resolve_as and resolve_numbers_as_integers in every branch of this conversion logic instead of rebuilding the context for each check.Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp (1)
26-27: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winCache
grid_track_placement()to avoid redundant FFI reconstruction.
grid_track_placement()reconstructs aGridTrackPlacementfrom the Rust payload on every call (including anOptional<Utf16FlyString>and a kind switch). Calling it twice inabsolutized()is wasteful on the style-computation path.♻️ Proposed refactor
ValueComparingNonnullRefPtr<StyleValue const> GridTrackPlacementStyleValue::absolutized(ComputationContext const& context) const { - auto absolutized_placement = grid_track_placement().absolutized(context); - if (absolutized_placement == grid_track_placement()) + auto placement = grid_track_placement(); + auto absolutized_placement = placement.absolutized(context); + if (absolutized_placement == placement) return *this; return create(move(absolutized_placement)); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp` around lines 26 - 27, Cache the result of grid_track_placement() in a local GridTrackPlacement value within absolutized(), then use that cached value for both the absolutized() call and equality comparison. Avoid invoking grid_track_placement() again while preserving the existing behavior.Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp (1)
128-132: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winMaterialize the components only once per resolution.
components()constructs a new vector on every call. These paths currently create two to four vectors per size resolution; cache one local copy before validating and indexing it.Proposed fix
CSSPixels RadialSizeStyleValue::resolve_circle_size(...) const { - VERIFY(components().size() == 1); - auto resolved_size = components()[0].visit( + auto components = this->components(); + VERIFY(components.size() == 1); + auto resolved_size = components[0].visit(CSSPixelSize RadialSizeStyleValue::resolve_ellipse_size(...) const { - VERIFY(components().size() == 1 || components().size() == 2); + auto components = this->components(); + VERIFY(components.size() == 1 || components.size() == 2); ... - resolve_component(components()[0], reference_box.width()).width(), - resolve_component(components().size() == 1 ? components()[0] : components()[1], reference_box.height()).height() + resolve_component(components[0], reference_box.width()).width(), + resolve_component(components.size() == 1 ? components[0] : components[1], reference_box.height()).height()Also applies to: 199-228
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp` around lines 128 - 132, Update resolve_circle_size and the corresponding resolution paths around lines 199–228 to materialize components() once into a local collection per resolution. Validate its size and access the resolved component through that cached collection, avoiding repeated components() calls while preserving existing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp`:
- Line 89: Update the create call in the absolutization logic to pass through
the existing gradient_color_syntax() value when reconstructing the style value.
Preserve all current absolutized arguments and repeating behavior while ensuring
non-default color syntax remains intact for interpolation and serialization.
In `@Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp`:
- Around line 107-108: Update the equality comparison in FontSourceStyleValue to
include tech() alongside sources_equal and format(), so values differing only in
their technology list compare unequal while identical technology lists remain
equal.
In `@Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h`:
- Around line 59-61: Update the computational-independence check in the gradient
method to validate each complete ColorStopListElement rather than only
stop.color_stop.color. Use the element’s existing computational-independence
check so stop positions, transition hints, and nested style values are included,
while preserving the direction and color-interpolation checks.
- Around line 64-70: Replace the reinterpret_cast-based implementation in
color_stop_list() with an explicit FFI POD representation for Rust color stops
and materialize C++ ColorStopListElement values from it. Do not expose the
Rust-owned array as a C++ object span; ensure the conversion preserves every
field and returns valid C++ objects, adding complete layout guarantees only if a
shared ABI-safe representation is intentionally retained.
In `@Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h`:
- Around line 23-25: Update the zero interning logic in NumberStyleValue so the
shared zero singleton is used only for positive zero; preserve -0.0 by bypassing
that singleton or returning a distinct negative-zero instance. Keep existing
interning behavior unchanged for +0.0 and all nonzero values.
In `@Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp`:
- Around line 197-202: Update StyleValue::depends_on_current_color() so all
Type::Color variants, including color-mix(), light-dark(), and contrast-color,
use their tag-specific dependency checks and recursively inspect nested color
values. Preserve the existing handling for color functions and the Currentcolor
keyword while extending dispatch beyond the current is_color_function() branch.
In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.h`:
- Around line 31-38: Update StyleValueList::values() to stop reinterpret_casting
the Rust-owned RetainedStyleValue array as ValueComparingNonnullRefPtr objects.
Expose or consume a typed FFI span of RetainedStyleValue records and construct
each C++ ref-pointer from its .pointer field, or materialize a StyleValueVector
before returning the values.
In `@Tests/LibWeb/TestStyleValueEquality.cpp`:
- Around line 69-95: Update make_conic_gradient and
conic_gradient_equality_considers_color_syntax so the test matches actual
equality behavior: either assert that gradients differing only in nested
ColorSyntax are equal, or vary a property owned by ConicGradientStyleValue
before asserting inequality. Do not rely on
ColorFunctionStyleValue::color_syntax to create a gradient-level difference.
---
Nitpick comments:
In `@Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp`:
- Around line 3403-3421: Cache calculation_context() in a local
CalculationContext variable before the result-type dispatch, then use that
variable for percentages_resolve_as and resolve_numbers_as_integers in every
branch of this conversion logic instead of rebuilding the context for each
check.
In `@Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp`:
- Around line 26-27: Cache the result of grid_track_placement() in a local
GridTrackPlacement value within absolutized(), then use that cached value for
both the absolutized() call and equality comparison. Avoid invoking
grid_track_placement() again while preserving the existing behavior.
In `@Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp`:
- Around line 128-132: Update resolve_circle_size and the corresponding
resolution paths around lines 199–228 to materialize components() once into a
local collection per resolution. Validate its size and access the resolved
component through that cached collection, avoiding repeated components() calls
while preserving existing behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 5566f1c7-560e-4bfa-bdca-da3fc5a525e8
📒 Files selected for processing (182)
AK/String.hAK/StringUtils.cppAK/Utf16FlyString.hAK/Utf16String.hAK/Utf16StringBase.hAK/Utf16View.cppLibraries/LibSandbox/Seccomp.cppLibraries/LibWeb/CMakeLists.txtLibraries/LibWeb/CSS/ComputedProperties.cppLibraries/LibWeb/CSS/ComputedValues.cppLibraries/LibWeb/CSS/Filter.cppLibraries/LibWeb/CSS/Filter.hLibraries/LibWeb/CSS/FontFace.cppLibraries/LibWeb/CSS/GridTrackPlacement.hLibraries/LibWeb/CSS/GridTrackSize.hLibraries/LibWeb/CSS/Interpolation.cppLibraries/LibWeb/CSS/ParsedFontFace.cppLibraries/LibWeb/CSS/Parser/PropertyParsing.cppLibraries/LibWeb/CSS/Serialize.cppLibraries/LibWeb/CSS/Serialize.hLibraries/LibWeb/CSS/StyleComputer.cppLibraries/LibWeb/CSS/StylePropertyMap.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.hLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.hLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.hLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.hLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.hLibraries/LibWeb/CSS/StyleValues/DimensionStyleValue.hLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cppLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.hLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.hLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.hLibraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.hLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.hLibraries/LibWeb/CSS/StyleValues/FlexStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.hLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.hLibraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.cppLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.hLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.cppLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.hLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.hLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.hLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.cppLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.hLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.hLibraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/PercentageStyleValue.hLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.hLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.hLibraries/LibWeb/CSS/StyleValues/RectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RectStyleValue.hLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.hLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.hLibraries/LibWeb/CSS/StyleValues/StringStyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValue.cppLibraries/LibWeb/CSS/StyleValues/StyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValueList.cppLibraries/LibWeb/CSS/StyleValues/StyleValueList.hLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cppLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.hLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.hLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.hLibraries/LibWeb/CSS/StyleValues/URLStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.hLibraries/LibWeb/CSS/URL.hLibraries/LibWeb/Editing/Internal/Algorithms.cppLibraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cppLibraries/LibWeb/Layout/FormattingContext.cppLibraries/LibWeb/Painting/GradientPainting.cppLibraries/LibWeb/Painting/Paintable.cppLibraries/LibWeb/Rust/build.rsLibraries/LibWeb/Rust/src/lib.rsLibraries/LibWeb/Rust/src/style_value.rsMeta/Generators/generate_libweb_css_keyword.pyTests/AK/TestStringUtils.cppTests/AK/TestUtf16View.cppTests/LibWeb/CMakeLists.txtTests/LibWeb/TestStyleValueEquality.cpp
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
Libraries/LibWeb/CSS/Filter.h (1)
29-29: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winCache the materialized filter list at the caller.
Filter::filters()now returns a newly materializedStyleValueVector, butLibraries/LibWeb/CSS/ComputedProperties.cpp:234calls it once forsize()and again for iteration. Cache the result once to avoid two allocations/copies per computed filter list.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/Filter.h` at line 29, Update the caller in ComputedProperties around the filter-list materialization to store Filter::filters() in a local StyleValueVector, then use that same cached vector for size() and iteration instead of invoking filters() twice.Libraries/LibWeb/CSS/StyleValues/StyleValueList.h (1)
41-45: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winAvoid materializing entire vectors for read-only list operations.
value_at(), equality, and independence checks allocate and retain every element. Access the FFI records directly so indexed access remains O(1) and comparisons avoid temporary vectors.Also applies to: 55-59
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.h` around lines 41 - 45, Update StyleValueList::value_at() and the related equality and independence checks to read directly from the underlying FFI records instead of calling an accessor that materializes and retains the full values vector. Preserve looping modulo behavior in value_at(), direct indexed access otherwise, and avoid temporary vector allocations during comparisons.Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp (1)
3297-3423: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winReuse the context already materialized by
resolve_value().Each resolver rebuilds
CalculationContextafterresolve_value()has already reconstructed the sameHashMap. Thread one materialized context through resolution and result-type matching, especially for these hot numeric paths.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp` around lines 3297 - 3423, Update resolve_angle, resolve_flex, resolve_frequency, resolve_length, resolve_raw_length, resolve_percentage, resolve_resolution, resolve_time, resolve_number, resolve_integer, and resolve_as_style_value to reuse the CalculationContext materialized by resolve_value instead of calling calculation_context() again. Thread that context through resolve_value and all result-type matching, including the hot numeric resolver paths, while preserving existing conversions and resolution behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp`:
- Around line 21-74: Cache the reconstructed values vector once at the start of
both StyleValueList::absolutized and StyleValueList::serialize, then use that
local vector for size, indexing, iteration, and first-element access. Apply the
same materialization approach in reify(), preserving the existing behavior while
avoiding repeated values() calls.
---
Nitpick comments:
In `@Libraries/LibWeb/CSS/Filter.h`:
- Line 29: Update the caller in ComputedProperties around the filter-list
materialization to store Filter::filters() in a local StyleValueVector, then use
that same cached vector for size() and iteration instead of invoking filters()
twice.
In `@Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp`:
- Around line 3297-3423: Update resolve_angle, resolve_flex, resolve_frequency,
resolve_length, resolve_raw_length, resolve_percentage, resolve_resolution,
resolve_time, resolve_number, resolve_integer, and resolve_as_style_value to
reuse the CalculationContext materialized by resolve_value instead of calling
calculation_context() again. Thread that context through resolve_value and all
result-type matching, including the hot numeric resolver paths, while preserving
existing conversions and resolution behavior.
In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.h`:
- Around line 41-45: Update StyleValueList::value_at() and the related equality
and independence checks to read directly from the underlying FFI records instead
of calling an accessor that materializes and retains the full values vector.
Preserve looping modulo behavior in value_at(), direct indexed access otherwise,
and avoid temporary vector allocations during comparisons.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 7f2f9e54-e9d2-49b7-b69a-5912d5a5ea60
📒 Files selected for processing (152)
AK/String.hAK/StringUtils.cppAK/Utf16String.hAK/Utf16View.cppLibraries/LibWeb/CSS/ComputedProperties.cppLibraries/LibWeb/CSS/ComputedValues.cppLibraries/LibWeb/CSS/Filter.cppLibraries/LibWeb/CSS/Filter.hLibraries/LibWeb/CSS/FontFace.cppLibraries/LibWeb/CSS/GridTrackPlacement.hLibraries/LibWeb/CSS/GridTrackSize.hLibraries/LibWeb/CSS/Interpolation.cppLibraries/LibWeb/CSS/ParsedFontFace.cppLibraries/LibWeb/CSS/Parser/PropertyParsing.cppLibraries/LibWeb/CSS/Serialize.cppLibraries/LibWeb/CSS/Serialize.hLibraries/LibWeb/CSS/StyleComputer.cppLibraries/LibWeb/CSS/StylePropertyMap.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.hLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.hLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.hLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.hLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.hLibraries/LibWeb/CSS/StyleValues/DimensionStyleValue.hLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cppLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.hLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.hLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.hLibraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.hLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.hLibraries/LibWeb/CSS/StyleValues/FlexStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.hLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.hLibraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.hLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.hLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.hLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.hLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.hLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.hLibraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/PercentageStyleValue.hLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.hLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.hLibraries/LibWeb/CSS/StyleValues/RectStyleValue.hLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.hLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.hLibraries/LibWeb/CSS/StyleValues/StringStyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValue.cppLibraries/LibWeb/CSS/StyleValues/StyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValueList.cppLibraries/LibWeb/CSS/StyleValues/StyleValueList.hLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.hLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.hLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.hLibraries/LibWeb/CSS/StyleValues/URLStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.hLibraries/LibWeb/CSS/URL.hLibraries/LibWeb/Editing/Internal/Algorithms.cppLibraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cppLibraries/LibWeb/Layout/FormattingContext.cppLibraries/LibWeb/Painting/GradientPainting.cppLibraries/LibWeb/Painting/Paintable.cppLibraries/LibWeb/Rust/src/style_value.rsMeta/Generators/generate_libweb_css_keyword.pyTests/AK/TestStringUtils.cppTests/AK/TestUtf16View.cppTests/LibWeb/CMakeLists.txtTests/LibWeb/TestStyleValueEquality.cpp
💤 Files with no reviewable changes (1)
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
🚧 Files skipped from review as they are similar to previous changes (114)
- Libraries/LibWeb/CSS/StylePropertyMap.cpp
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
- Libraries/LibWeb/CSS/Serialize.h
- Libraries/LibWeb/Editing/Internal/Algorithms.cpp
- Libraries/LibWeb/CSS/GridTrackSize.h
- Tests/LibWeb/CMakeLists.txt
- Libraries/LibWeb/CSS/FontFace.cpp
- Libraries/LibWeb/CSS/ComputedValues.cpp
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
- Tests/AK/TestUtf16View.cpp
- Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
- Meta/Generators/generate_libweb_css_keyword.py
- Tests/AK/TestStringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
- Libraries/LibWeb/CSS/ParsedFontFace.cpp
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
- Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
- Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
- Libraries/LibWeb/Painting/GradientPainting.cpp
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
- AK/Utf16String.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
- AK/String.h
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
- Libraries/LibWeb/Painting/Paintable.cpp
- Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
- Libraries/LibWeb/CSS/Interpolation.cpp
- Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
- Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
- Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
- Libraries/LibWeb/Layout/FormattingContext.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
- Libraries/LibWeb/CSS/ComputedProperties.cpp
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
- Libraries/LibWeb/Rust/src/style_value.rs
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp`:
- Around line 123-128: Update
RadialGradientStyleValue::is_computationally_independent() to evaluate each
complete color-stop element through its computational-independence helper,
rather than checking only stop.color_stop.color. Preserve the existing checks
for size, position, and color interpolation method.
In `@Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h`:
- Around line 26-40: Update StyleValue shorthand values() to expose the
underlying retained pointer storage directly instead of reinterpret_casting it
as ValueComparingNonnullRefPtr objects. Wrap retained pointers only at call
sites that require value-comparison semantics, following the established pattern
in TransformationStyleValue::values(), and preserve existing consumers such as
properties_equal() and is_computationally_independent().
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 03177325-0d35-46e9-a73d-851faa888957
📒 Files selected for processing (172)
AK/String.hAK/StringUtils.cppAK/Utf16FlyString.hAK/Utf16String.hAK/Utf16StringBase.hAK/Utf16View.cppLibraries/LibWeb/CSS/ComputedProperties.cppLibraries/LibWeb/CSS/ComputedValues.cppLibraries/LibWeb/CSS/Filter.cppLibraries/LibWeb/CSS/Filter.hLibraries/LibWeb/CSS/FontFace.cppLibraries/LibWeb/CSS/GridTrackPlacement.hLibraries/LibWeb/CSS/GridTrackSize.hLibraries/LibWeb/CSS/Interpolation.cppLibraries/LibWeb/CSS/ParsedFontFace.cppLibraries/LibWeb/CSS/Parser/PropertyParsing.cppLibraries/LibWeb/CSS/Serialize.cppLibraries/LibWeb/CSS/Serialize.hLibraries/LibWeb/CSS/StyleComputer.cppLibraries/LibWeb/CSS/StylePropertyMap.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.hLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.hLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.hLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.hLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.hLibraries/LibWeb/CSS/StyleValues/DimensionStyleValue.hLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cppLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.hLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.hLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.hLibraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.hLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.hLibraries/LibWeb/CSS/StyleValues/FlexStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.hLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.hLibraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.hLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.hLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.hLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.hLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.hLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.hLibraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/PercentageStyleValue.hLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.hLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.hLibraries/LibWeb/CSS/StyleValues/RectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RectStyleValue.hLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.hLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.hLibraries/LibWeb/CSS/StyleValues/StringStyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValue.cppLibraries/LibWeb/CSS/StyleValues/StyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValueList.cppLibraries/LibWeb/CSS/StyleValues/StyleValueList.hLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cppLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.hLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.hLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.hLibraries/LibWeb/CSS/StyleValues/URLStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.hLibraries/LibWeb/CSS/URL.hLibraries/LibWeb/Editing/Internal/Algorithms.cppLibraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cppLibraries/LibWeb/Layout/FormattingContext.cppLibraries/LibWeb/Painting/GradientPainting.cppLibraries/LibWeb/Painting/Paintable.cppLibraries/LibWeb/Rust/src/style_value.rsMeta/Generators/generate_libweb_css_keyword.pyTests/AK/TestStringUtils.cppTests/AK/TestUtf16View.cppTests/LibWeb/CMakeLists.txtTests/LibWeb/TestStyleValueEquality.cpp
🚧 Files skipped from review as they are similar to previous changes (147)
- Libraries/LibWeb/CSS/StylePropertyMap.cpp
- Libraries/LibWeb/CSS/Filter.cpp
- Libraries/LibWeb/CSS/Filter.h
- Libraries/LibWeb/CSS/Serialize.h
- Libraries/LibWeb/Editing/Internal/Algorithms.cpp
- Tests/LibWeb/CMakeLists.txt
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
- Meta/Generators/generate_libweb_css_keyword.py
- Tests/AK/TestStringUtils.cpp
- Libraries/LibWeb/CSS/Serialize.cpp
- AK/Utf16StringBase.h
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
- AK/Utf16FlyString.h
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
- Libraries/LibWeb/Painting/GradientPainting.cpp
- Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
- Libraries/LibWeb/CSS/FontFace.cpp
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cpp
- AK/StringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
- AK/Utf16View.cpp
- Libraries/LibWeb/CSS/ParsedFontFace.cpp
- Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
- Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
- AK/String.h
- Tests/AK/TestUtf16View.cpp
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
- Libraries/LibWeb/CSS/ComputedValues.cpp
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
- Libraries/LibWeb/CSS/GridTrackSize.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
- Libraries/LibWeb/Layout/FormattingContext.cpp
- Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
- Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
- Libraries/LibWeb/CSS/StyleComputer.cpp
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
- Libraries/LibWeb/CSS/URL.h
- Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
- Libraries/LibWeb/CSS/Interpolation.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
- Libraries/LibWeb/CSS/ComputedProperties.cpp
- Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
Introduce a StyleValueData enum in the LibWeb Rust crate as the new owner of CSS style value data. The C++ StyleValue subclasses will be converted one type at a time to store their data in a Rust-owned allocation instead of C++ member variables, so that the whole style value graph ends up immutable and Rust-owned without ever existing in two representations at once. The enum layout is exposed to C++ through cbindgen, so converted accessors compile to inline field reads with no FFI call, and a RustStyleValueHandle RAII class gives each converted subclass unique ownership of its allocation. The first variant covers CSS keywords.
The Compositor sandbox provisions a read-write landlock path for Mesa's shader disk cache and calls allow_filesystem_writes(), but the seccomp policy did not include utimensat(). Mesa updates cache entry mtimes for LRU eviction, and glibc routes the whole utime() family through utimensat() on modern kernels, so the kernel killed the Compositor with SIGSYS the first time it touched a cache entry. That tore down every in-flight test in a full test-web run and made the runner itself abort while respawning clients. Text/input/wpt-import/webidl/current-realm.html reproduced the crash deterministically and passes again with utimensat() allowed.
This is the first StyleValue subclass converted to the Rust-owned value representation. The C++ class keeps its accessor API, but the keyword now lives in a Rust StyleValueData allocation owned through RustStyleValueHandle, and keyword() reads it back through the exposed cbindgen layout with no FFI call. The C++ member is gone, so the data exists in exactly one representation. The CSS-wide keyword singletons are unaffected; they simply own their Rust allocation for the lifetime of the process like any other instance.
Convert NumberStyleValue and IntegerStyleValue to the Rust-owned value representation the same way as KeywordStyleValue: the C++ classes keep their accessor API but the double and i32 payloads now live in Rust StyleValueData allocations, read back through the exposed cbindgen layout. The C++ members are gone, so each value's data exists in exactly one representation.
Convert the whole DimensionStyleValue family (angle, flex, frequency, length, percentage, resolution and time) to the Rust-owned value representation. Each value is an f64 payload plus its generated C++ unit enum carried as an opaque u8, so every conversion follows the same shape. The accessors that used to hand out const references to C++ members (length(), angle(), and friends) now materialize the value type from the Rust payload and return it by value. These types are two words, so this does not change what callers can do with them.
RatioStyleValue is the first converted type whose data references other style values, so this introduces the mechanism for nested references: a RetainedStyleValue in the Rust value data holds a strong reference to the C++ style value and releases it through the ladybird_style_value_unref() bridge when the Rust allocation drops. Once every subclass is converted, these become references between Rust allocations instead. The numerator and denominator accessors materialize ValueComparingNonnullRefPtrs from the retained pointers, preserving the value-comparing equality semantics the class had before.
Convert UnicodeRangeStyleValue, OpacityValueStyleValue and EdgeStyleValue to the Rust-owned value representation. The unicode range is a pair of code points, the opacity value retains its nested number or percentage style value, and the position edge combines an optional PositionEdge keyword with an optional retained offset value. A null RetainedStyleValue pointer now represents an absent optional reference, and dropping the Rust allocation skips the unref for it.
Convert GuaranteedInvalidStyleValue, EmptyOptionalStyleValue, GridAutoFlowStyleValue, TextUnderlinePositionStyleValue, ContrastColorStyleValue, SuperellipseStyleValue, PendingSubstitutionStyleValue, ScrollbarColorStyleValue, RectStyleValue and BorderRadiusRectStyleValue to the Rust-owned value representation. These follow the established shapes: unit variants for the data-free singletons, plain payloads for booleans and enums, and RetainedStyleValue for nested style value references. Accessors that handed out plain NonnullRefPtrs to nested values now return ValueComparingNonnullRefPtrs materialized from the retained pointers so that equality keeps its value-comparing semantics.
Strings are the first non-POD payload in the Rust-owned value representation. A Utf16FlyString is one word: either an inline short ASCII string or a pointer to refcounted, interned string data. The Rust side retains that raw word and releases it through a new bridge when the allocation drops, so reconstructing the fly string on the C++ side is just a reference count bump, never a re-intern. To support this, AK gains a small raw round-trip API on Utf16FlyString: to_raw_leaked(), from_raw() and unref_raw(), with an adopt_raw() helper on Utf16StringBase. The string accessors on StringStyleValue and CustomIdentStyleValue, as well as string_from_style_value(), now return the fly string by value.
Convert FunctionStyleValue, OpenTypeTaggedStyleValue, FontStyleStyleValue, TextIndentStyleValue, OverflowClipMarginStyleValue and TreeCountingFunctionStyleValue to the Rust-owned value representation. These combine the existing mechanisms: retained fly strings for the function name and OpenType tag, retained style values for nested children (nullable for the optional font-style angle), and plain enum or bool payloads for the rest.
Convert BackgroundSizeStyleValue, RepeatStyleStyleValue, BorderImageSliceStyleValue, AnchorSizeStyleValue and AnchorStyleValue to the Rust-owned value representation, replacing their Properties structs with the established retained-reference and plain payload shapes. Optional anchor names ride along as a retained fly string with a presence flag, using a zero raw value when absent. The anchor_name() accessors used to return Optional<Utf16FlyString const&> into the C++ member; they now return the fly string by value, so the two layout call sites that took the address of the referenced name hold the optional by value instead.
Convert PositionStyleValue, ShadowStyleValue, ContentStyleValue and CounterStyleValue to the Rust-owned value representation. Shadows retain up to five nested style values with two opaque enums, counters combine retained fly strings with a retained counter style, and the content value keeps its retained content and optional alt-text lists. The shadow accessors that returned ValueComparingRefPtr const& now return by value, including the two FilterStyleValue helpers that forwarded them.
Convert LightDarkStyleValue, RandomValueSharingStyleValue, ScrollbarGutterStyleValue and ColorInterpolationMethodStyleValue to the Rust-owned value representation. The color interpolation method flattens its Variant into an is-polar flag with two opaque enum payloads and reconstructs the Variant in the accessor; the others use the established retained-reference, optional-string and plain enum shapes.
StyleValueList is the first list-shaped type in the Rust-owned value representation. A RetainedStyleValueList owns a Rust-side array of retained style value references, releasing each when the allocation drops. values() materializes a StyleValueVector from those retained references so the C++ refptr type never aliases the FFI layout. Callers that bound the old Vector const& return value to references, copied it wholesale, or extended vectors with it now keep the materialized vector alive where needed. One canvas call site chained values() onto a temporary absolutized value; that returned a dangling view before this conversion, so the absolutized value is now kept alive in a local. This was caught by the canvas filter tests crashing with a type confusion inside the freed list.
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h (1)
29-36: 🚀 Performance & Scalability | 🔵 Trivial | 🏗️ Heavy liftKeep read-only transform operand access zero-copy.
values()now allocates and ref-counts every operand on each call;to_matrix(), serialization, reification, and absolutization all pay this cost. Expose a lightweight retained-list view or usesize()/value_at()internally, materializing aStyleValueVectoronly where ownership is required.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h` around lines 29 - 36, Change TransformationStyleValue::values() so read-only callers do not materialize or ref-count every operand on each access. Expose a lightweight retained-list view or provide size() and value_at() accessors, then update to_matrix(), serialization, reification, and absolutization to use that access path. Materialize a StyleValueVector only at call sites that require owned storage.Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp (1)
99-103: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winMaterialize the color-stop list once during absolutization.
Both implementations reconstruct
color_stop_list()for the capacity check and again for iteration.
Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp#L99-L103: cache the list before callingsize()and iterating.Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp#L95-L99: apply the same caching.Proposed pattern
+ auto color_stops = color_stop_list(); Vector<ColorStopListElement> absolutized_color_stops; - absolutized_color_stops.ensure_capacity(color_stop_list().size()); - for (auto const& color_stop : color_stop_list()) { + absolutized_color_stops.ensure_capacity(color_stops.size()); + for (auto const& color_stop : color_stops) { absolutized_color_stops.unchecked_append(color_stop.absolutized(context)); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp` around lines 99 - 103, Cache the result of color_stop_list() once before reserving and iterating in the linear-gradient absolutization code, then use that cached list for both size() and the loop. Apply the same change in Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp at lines 95-99, using the corresponding absolutization flow; both sites require direct updates.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp`:
- Around line 67-80: Update ColorStyleValue::equals to first verify that the
other value is a ColorStyleValue with the same m_value->tag; return false for a
different color variant before dispatching to the subclass equals methods.
Preserve the existing tag-based dispatch only for matching variants.
In `@Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h`:
- Around line 21-24: Update ShorthandStyleValue::sub_properties to avoid
reinterpret_casting the Rust u16 buffer into PropertyID objects; expose the
underlying values as ReadonlySpan<u16> or convert each element into actual
PropertyID values before returning, and adjust callers as needed to preserve the
existing behavior.
In `@Tests/LibWeb/CMakeLists.txt`:
- Around line 34-38: Update the TEST_SOURCES block in the LibWeb CMake
configuration to include TestStyleValueEquality.cpp on all platforms by removing
the surrounding NOT WIN32 guard, while preserving the existing test source
entry.
---
Nitpick comments:
In `@Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp`:
- Around line 99-103: Cache the result of color_stop_list() once before
reserving and iterating in the linear-gradient absolutization code, then use
that cached list for both size() and the loop. Apply the same change in
Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp at lines 95-99,
using the corresponding absolutization flow; both sites require direct updates.
In `@Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h`:
- Around line 29-36: Change TransformationStyleValue::values() so read-only
callers do not materialize or ref-count every operand on each access. Expose a
lightweight retained-list view or provide size() and value_at() accessors, then
update to_matrix(), serialization, reification, and absolutization to use that
access path. Materialize a StyleValueVector only at call sites that require
owned storage.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: d0482295-3c34-41bc-893c-dab2c98b2c6a
📒 Files selected for processing (182)
AK/String.hAK/StringUtils.cppAK/Utf16FlyString.hAK/Utf16String.hAK/Utf16StringBase.hAK/Utf16View.cppLibraries/LibSandbox/Seccomp.cppLibraries/LibWeb/CMakeLists.txtLibraries/LibWeb/CSS/ComputedProperties.cppLibraries/LibWeb/CSS/ComputedValues.cppLibraries/LibWeb/CSS/Filter.cppLibraries/LibWeb/CSS/Filter.hLibraries/LibWeb/CSS/FontFace.cppLibraries/LibWeb/CSS/GridTrackPlacement.hLibraries/LibWeb/CSS/GridTrackSize.hLibraries/LibWeb/CSS/Interpolation.cppLibraries/LibWeb/CSS/ParsedFontFace.cppLibraries/LibWeb/CSS/Parser/PropertyParsing.cppLibraries/LibWeb/CSS/Serialize.cppLibraries/LibWeb/CSS/Serialize.hLibraries/LibWeb/CSS/StyleComputer.cppLibraries/LibWeb/CSS/StylePropertyMap.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.hLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.hLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.hLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.hLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.hLibraries/LibWeb/CSS/StyleValues/DimensionStyleValue.hLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cppLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.hLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.hLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.hLibraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.hLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.hLibraries/LibWeb/CSS/StyleValues/FlexStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.hLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.hLibraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.cppLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.hLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.cppLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.hLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.hLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.hLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.cppLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.hLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.hLibraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/PercentageStyleValue.hLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.hLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.hLibraries/LibWeb/CSS/StyleValues/RectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RectStyleValue.hLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.hLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.hLibraries/LibWeb/CSS/StyleValues/StringStyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValue.cppLibraries/LibWeb/CSS/StyleValues/StyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValueList.cppLibraries/LibWeb/CSS/StyleValues/StyleValueList.hLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cppLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.hLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.hLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.hLibraries/LibWeb/CSS/StyleValues/URLStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.hLibraries/LibWeb/CSS/URL.hLibraries/LibWeb/Editing/Internal/Algorithms.cppLibraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cppLibraries/LibWeb/Layout/FormattingContext.cppLibraries/LibWeb/Painting/GradientPainting.cppLibraries/LibWeb/Painting/Paintable.cppLibraries/LibWeb/Rust/build.rsLibraries/LibWeb/Rust/src/lib.rsLibraries/LibWeb/Rust/src/style_value.rsMeta/Generators/generate_libweb_css_keyword.pyTests/AK/TestStringUtils.cppTests/AK/TestUtf16View.cppTests/LibWeb/CMakeLists.txtTests/LibWeb/TestStyleValueEquality.cpp
🚧 Files skipped from review as they are similar to previous changes (150)
- Libraries/LibWeb/CSS/Serialize.h
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
- Libraries/LibWeb/CSS/Filter.h
- AK/Utf16String.h
- Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.cpp
- Libraries/LibWeb/Painting/GradientPainting.cpp
- Libraries/LibWeb/CSS/URL.h
- Tests/AK/TestStringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
- Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cpp
- Meta/Generators/generate_libweb_css_keyword.py
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
- Libraries/LibWeb/Rust/src/lib.rs
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
- Libraries/LibWeb/CSS/Serialize.cpp
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
- Libraries/LibWeb/Rust/build.rs
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cpp
- Libraries/LibSandbox/Seccomp.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.cpp
- Libraries/LibWeb/CSS/GridTrackSize.h
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
- Tests/AK/TestUtf16View.cpp
- Libraries/LibWeb/Painting/Paintable.cpp
- Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
- AK/Utf16FlyString.h
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.cpp
- Libraries/LibWeb/CSS/ParsedFontFace.cpp
- Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
- Libraries/LibWeb/Editing/Internal/Algorithms.cpp
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
- AK/String.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
- AK/Utf16StringBase.h
- Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
- Libraries/LibWeb/CSS/GridTrackPlacement.h
- Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
- Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
- Libraries/LibWeb/CSS/StylePropertyMap.cpp
- Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
- Libraries/LibWeb/CSS/StyleComputer.cpp
- AK/Utf16View.cpp
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
- Libraries/LibWeb/Layout/FormattingContext.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
- AK/StringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.cpp
- Libraries/LibWeb/CSS/ComputedValues.cpp
- Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
- Libraries/LibWeb/CSS/ComputedProperties.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
- Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
- Libraries/LibWeb/Rust/src/style_value.rs
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Libraries/LibWeb/CSS/StyleValues/StyleValueList.h (1)
41-45: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winReject looping lookup on an empty list.
Line 44 evaluates
i % size()whenallow_loopis true;StyleValueList::create()permits an empty vector, so this is division by zero.Proposed fix
ValueComparingNonnullRefPtr<StyleValue const> value_at(size_t i, bool allow_loop) const { - if (allow_loop) + if (allow_loop) { + VERIFY(size() > 0); return value_at(i % size()); + } return value_at(i); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.h` around lines 41 - 45, Update StyleValueList::value_at to handle an empty list before performing the allow_loop modulo lookup, ensuring i % size() is never evaluated when size() is zero. Preserve the existing looping behavior for non-empty lists and direct lookup behavior when looping is disabled.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp`:
- Around line 63-65: Update the Fixed branch of the counter-style comparison
visitor to compare the effective first_symbol values, treating an omitted
first_symbol as the default starting index; return true only when both fixed
styles resolve to the same starting index.
In `@Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h`:
- Around line 73-79: Update make_shorthand_data to materialize a Vector<u16>
from sub_properties using to_underlying() for each PropertyID, then pass that
vector’s data and size to rust_style_value_create_shorthand instead of
reinterpret_casting sub_properties.data(). Remove the static size assertion and
preserve the existing value-pointer ownership handling.
In `@Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h`:
- Around line 21-26: Update the tuple() method in TupleStyleValue to stop
reinterpret_casting m_value->tuple.values into ValueComparingRefPtr objects.
Return a view using the stored RetainedStyleValue representation if supported,
or materialize valid ValueComparingRefPtr instances while preserving the tuple’s
length and values.
---
Outside diff comments:
In `@Libraries/LibWeb/CSS/StyleValues/StyleValueList.h`:
- Around line 41-45: Update StyleValueList::value_at to handle an empty list
before performing the allow_loop modulo lookup, ensuring i % size() is never
evaluated when size() is zero. Preserve the existing looping behavior for
non-empty lists and direct lookup behavior when looping is disabled.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: aa873b60-3bb0-4191-8320-0494d78a3804
📒 Files selected for processing (145)
AK/String.hAK/StringUtils.cppAK/Utf16String.hAK/Utf16View.cppLibraries/LibWeb/CSS/ComputedProperties.cppLibraries/LibWeb/CSS/ComputedValues.cppLibraries/LibWeb/CSS/GridTrackPlacement.hLibraries/LibWeb/CSS/GridTrackSize.hLibraries/LibWeb/CSS/Interpolation.cppLibraries/LibWeb/CSS/Parser/PropertyParsing.cppLibraries/LibWeb/CSS/Serialize.cppLibraries/LibWeb/CSS/Serialize.hLibraries/LibWeb/CSS/StyleComputer.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AnchorStyleValue.hLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/AngleStyleValue.hLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.hLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cppLibraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.hLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.hLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ContentStyleValue.hLibraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.hLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CounterStyleValue.hLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.cppLibraries/LibWeb/CSS/StyleValues/CursorStyleValue.hLibraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.hLibraries/LibWeb/CSS/StyleValues/DimensionStyleValue.hLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cppLibraries/LibWeb/CSS/StyleValues/DisplayStyleValue.hLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.cppLibraries/LibWeb/CSS/StyleValues/EasingStyleValue.hLibraries/LibWeb/CSS/StyleValues/EdgeStyleValue.hLibraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.hLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FilterStyleValue.hLibraries/LibWeb/CSS/StyleValues/FlexStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.hLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.hLibraries/LibWeb/CSS/StyleValues/FunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.hLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cppLibraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.hLibraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.hLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ImageStyleValue.hLibraries/LibWeb/CSS/StyleValues/IntegerStyleValue.hLibraries/LibWeb/CSS/StyleValues/KeywordStyleValue.hLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LengthStyleValue.hLibraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.hLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/NumberStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.hLibraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.hLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cppLibraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.hLibraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/PercentageStyleValue.hLibraries/LibWeb/CSS/StyleValues/PositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.hLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.hLibraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.hLibraries/LibWeb/CSS/StyleValues/RatioStyleValue.hLibraries/LibWeb/CSS/StyleValues/RectStyleValue.hLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.hLibraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.hLibraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.hLibraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.hLibraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShadowStyleValue.hLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cppLibraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.hLibraries/LibWeb/CSS/StyleValues/StringStyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValue.cppLibraries/LibWeb/CSS/StyleValues/StyleValue.hLibraries/LibWeb/CSS/StyleValues/StyleValueList.cppLibraries/LibWeb/CSS/StyleValues/StyleValueList.hLibraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.hLibraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TimeStyleValue.hLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TransformationStyleValue.hLibraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.hLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.cppLibraries/LibWeb/CSS/StyleValues/TupleStyleValue.hLibraries/LibWeb/CSS/StyleValues/URLStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.hLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cppLibraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.hLibraries/LibWeb/CSS/URL.hLibraries/LibWeb/Layout/FormattingContext.cppLibraries/LibWeb/Painting/GradientPainting.cppLibraries/LibWeb/Painting/Paintable.cppLibraries/LibWeb/Rust/src/style_value.rsMeta/Generators/generate_libweb_css_keyword.pyTests/AK/TestStringUtils.cppTests/AK/TestUtf16View.cppTests/LibWeb/CMakeLists.txtTests/LibWeb/TestStyleValueEquality.cpp
💤 Files with no reviewable changes (1)
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
🚧 Files skipped from review as they are similar to previous changes (120)
- Libraries/LibWeb/CSS/Serialize.h
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
- Libraries/LibWeb/Painting/Paintable.cpp
- Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
- Tests/LibWeb/CMakeLists.txt
- AK/Utf16String.h
- Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
- AK/Utf16View.cpp
- Libraries/LibWeb/CSS/Serialize.cpp
- Tests/AK/TestStringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
- Libraries/LibWeb/Painting/GradientPainting.cpp
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
- AK/StringUtils.cpp
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
- Libraries/LibWeb/CSS/URL.h
- Tests/AK/TestUtf16View.cpp
- Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
- Libraries/LibWeb/CSS/GridTrackSize.h
- Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
- Meta/Generators/generate_libweb_css_keyword.py
- Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
- Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
- Libraries/LibWeb/CSS/StyleComputer.cpp
- Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
- AK/String.h
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
- Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
- Libraries/LibWeb/Layout/FormattingContext.cpp
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
- Libraries/LibWeb/CSS/Interpolation.cpp
- Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/StyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
- Libraries/LibWeb/CSS/ComputedProperties.cpp
- Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
- Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
- Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
- Libraries/LibWeb/Rust/src/style_value.rs
Convert TupleStyleValue, TransformationStyleValue and ShorthandStyleValue to the Rust-owned value representation using the list mechanism. Tuples allow null entries for absent optionals, and shorthands add a Rust-owned array of PropertyID values alongside their longhand values. The list helpers keep Rust-owned storage behind FFI records and materialize C++ values when callers need ordinary containers, while serialize_a_positional_value_list() accepts a span for existing C++ callers.
Convert DisplayStyleValue to the Rust-owned value representation. The Display value type is four trivially copyable bytes (a tag plus a union of packed u8 enums), so it rides through the FFI as an opaque u32 and is reconstructed with bit_cast in the accessor. Equality goes through Display's own semantic comparison, so inactive union bytes cannot affect it.
Convert RadialSizeStyleValue to the Rust-owned value representation. A radial size has one or two components, each either a RadialExtent keyword or a style value, so the variant flattens into two fixed slots with an is-extent flag each, and components() materializes the Vector of Variants from the payload.
Convert URLStyleValue to the Rust-owned value representation. AK gains the same raw round-trip API on String that Utf16FlyString already has, since a String is also one word that either holds an inline short string or a pointer to refcounted string data. The CSS URL flattens into a retained string, a type byte and a Rust-owned array of request URL modifiers, each carrying its own retained fly string when the modifier value is a string; RequestURLModifier gains a value() accessor so the payload can be built from an existing URL. The url() accessor materializes the URL by value now. One painting call site bound a reference to the string inside the returned temporary, which became a dangling reference and crashed 25 SVG filter tests; it now keeps the URL alive in a local.
Convert FontSourceStyleValue to the Rust-owned value representation. A font source flattens into a local/url discriminator with a retained family-name value on the local side, the URL encoding shared with url() style values on the other, plus an optional retained format string and a Rust-owned byte list of FontTech values. The source(), format() and tech() accessors materialize their values now instead of returning references to C++ members.
Convert GridTemplateAreaStyleValue to the Rust-owned value representation. The named-area map flattens into a Rust-owned struct list of retained names with their grid line indices, and grid_areas() materializes the HashMap from it.
Convert EasingStyleValue to the Rust-owned value representation. The linear/cubic-bezier/steps variant flattens into a kind byte with a retained stop list, four retained control values or a retained interval count with a step position. Since the cubic-bezier sample cache lives inside the materialized Function, function() materializes once into a mutable member that is documented as a cache of the Rust-owned data, keeping both the const reference API and the sample cache behavior.
Convert GridTrackSizeListStyleValue to the Rust-owned value representation as a recursive entry tree: each entry is line names, a single size, a minmax pair or a repeat carrying its own nested entry list with the nested list's subgrid and preserve-line-name-sets flags. The nested list rides as a raw pointer and length pair because cbindgen cannot order the mutually recursive struct and list types, and the entry's Drop releases it. GridTrackSizeList gains a preserves_line_name_sets() getter and GridRepeat exposes its repeat count style value so the payload can be built from public API. Omitting the nested flags initially merged adjacent line-name sets inside subgrid repeats, failing two subgrid serialization tests.
Convert BasicShapeStyleValue to the Rust-owned value representation. The seven shape kinds flatten into a kind byte with up to five retained value slots, a fill rule, a retained polygon point list and, for path(), the retained serialized path data string, which is re-parsed when the shape materializes. Since rebuilding a path shape re-parses its data, basic_shape() materializes once into a mutable member documented as a cache of the Rust-owned data, keeping the const reference API.
Convert CalculatedStyleValue to the Rust-owned value representation. The calculation node tree root is retained through a new CalculationNode unref bridge, like nested style values are during the migration, so the tree is owned by the Rust allocation. The resolved numeric type rides as its raw bytes since NumericType is trivially copyable, and the parse-time calculation context flattens into its optional resolution type, integer flag and a Rust-owned list of accepted numeric ranges.
Convert ImageStyleValue, the last StyleValue subclass, to the Rust-owned value representation. Only the CSS URL is immutable value data and it uses the same encoding as url() style values; the style resource base URL, origin-clean bit, absolutization flag and client table are style sheet attachment and loading state that is mutated after construction, so they remain C++ members. With this, every StyleValue type keeps its data in an immutable, Rust-owned allocation.
RadialSizeStyleValue::properties_equal compared the components() vectors directly, and the NonnullRefPtr alternative of the component variant compares by pointer identity, so two separately-built radial sizes with identical sub-values never compared equal. That makes equality checks report spurious differences during style invalidation and transition change detection. Compare the components by value instead, and cover the behavior with a TestStyleValueEquality case. This defect predates the Rust-owned value conversion; the conversion preserved the original comparison behavior.
The handle, module and color-base comments still described the Rust storage conversion as being in progress, one type at a time. All 72 StyleValue types now store their data in Rust-owned allocations, so describe the end state instead and point the still-pending parts at the upcoming shell collapse.
StyleValueList, TupleStyleValue, TransformationStyleValue and ShorthandStyleValue each repeated the same loop that leaks one strong reference per value into a Vector<void const*> for the Rust creator call. Move the loop into a shared leak_style_value_pointers_for_rust() helper next to retain_style_value_for_rust() so the ownership transfer boilerplate is written once.
The thirteen Retained*List types in style_value.rs each repeated a character-identical Drop, and ten of them an identical from_raw that copies the input elements into a boxed slice. Generate those impls with retained_list! and retained_list_drop! macros. The three lists whose from_raw converts from a different input shape (style value pointers, string raws and the recursive grid track entries) keep a hand-written from_raw and use the Drop macro only. The struct definitions stay hand-written because cbindgen parses the source without expanding macros.
Every converted StyleValue subclass carried its own RustStyleValueHandle member and passed only the type tag to the base constructor. Move the single handle into StyleValue itself and thread the Rust allocation through StyleValue(Type, StyleValueData*), with the intermediate bases (DimensionStyleValue, ColorStyleValue) forwarding it and AbstractImageStyleValue and StyleValueWithDefaultOperators inheriting the constructor. The member keeps its m_value name, so the payload accessors are unchanged. BorderRadiusStyleValue and FilterStyleValue still store their data in C++ members; they use a transitional StyleValue(Type) constructor and an empty handle state, both documented to go away when those two types are converted. ColorStyleValue keeps its separate color base handle until that data merges into the color subclass payloads. This is the first step of collapsing the C++ subclass shells into typed lenses over the Rust-owned data.
Convert BorderRadiusStyleValue and the FilterStyleValue family, the last two types still keeping their data in C++ members. A border radius is the two retained radii plus the precomputed is_elliptical flag. All four filter kinds share one variant: the kind byte, the color operation byte and a single retained value that holds the blur radius, drop-shadow value, hue-rotate angle or color-filter amount depending on the kind, so the C++ subclasses lose their members and DropShadowFilterStyleValue reads its shadow through a stable reference into the retained allocation. With every type converted, delete the transitional StyleValue(Type) constructor and the empty RustStyleValueHandle state that existed only for these two holdouts.
Every color subclass carried a second Rust allocation holding just the optional color type and the color syntax, a leftover from converting the ColorStyleValue base separately. Give the four color variants (ColorFunction, ColorMix, LightDark, ContrastColor) a shared ColorBase prefix as their first payload field and pass the fields through the creators, so the base class accessors read the prefix through one union arm without knowing the variant. static_asserts pin the prefix at offset zero in every color payload. The separate Color variant, its creator and the m_color_base_value handle are gone, making every color value a single Rust allocation.
EasingStyleValue and BasicShapeStyleValue lazily rebuilt their C++ Function and BasicShape representations from the Rust data into unsynchronized mutable Optional caches on first access. Two style workers reaching equals(), serialize() or absolutized() on the same shared value concurrently would race to emplace the cache, so the lazy caches were a blocker for sharing values across the parallel style path. Both constructors already receive the materialized representation, so store it as a plain immutable member instead, like the pre-conversion code did, and drop the lazy rebuild paths. The cubic-bezier sample cache inside Function is only touched by main-thread animation evaluation.
De-virtualize set_style_sheet, tokenize, reify and the UTF-16 serialize overload: StyleValue now dispatches each through a switch on type() to the (no longer virtual) subclass implementations, with the old base default as the fallthrough. Types whose implementation is private grant StyleValue friendship. Two recursion traps came with this: implementations that chained up through no-op Base:: calls (all five set_style_sheet impls) now re-entered the dispatch, as did the reify fallbacks in CalculatedStyleValue and StyleValueList. The chain-up calls are deleted and the fallbacks go through an explicit default_reify(). This is the first slice of replacing the StyleValue vtable with switch-on-tag dispatch ahead of collapsing the subclass shells into typed lenses.
The first operation to use the macro-generated switch over the full style value type list: StyleValue::is_computationally_independent() is no longer virtual and casts to the concrete subclass per type tag. The Color and Filter entries map to abstract families whose C++ Type is shared, so ColorStyleValue dispatches on the Rust data tag and FilterStyleValue on its kind byte; those two inner dispatchers are the pattern the remaining operations will reuse. The CalculationNode hierarchy in CalculatedStyleValue.h keeps its own virtual dispatch untouched.
Same macro-generated switch as is_computationally_independent, with the ColorStyleValue and FilterStyleValue inner dispatchers gaining their serialize arms. The StringBuilder serialize overload was the hottest virtual on the style value vtable. Landing this exposed a latent simdutf null-character search bug by shifting rodata alignment; that is fixed in the preceding AK commit.
The macro-generated switch replaces the virtual equals(), including the StyleValueWithDefaultOperators template implementation, which is now found through ordinary name lookup when the switch casts to the concrete class. The Color and Filter inner dispatchers gain their equals arms.
A hand-listed switch this time, since only 43 types implement absolutization and the rest keep the identity default. The Color and Filter inner dispatchers gain their absolutized arms, and three more types with private implementations befriend StyleValue. The first cut of the switch missed the four overriders that declare their parameter with a name (Edge, Position, FontStyle and CounterStyleSystem), which silently skipped their absolutization and crashed background painting on unresolved position values; the full test-web run caught it.
De-virtualize the five remaining small operations: has_color and to_color check the Keyword and Color types (with the color family dispatching to_color on the Rust tag), depends_on_current_color consults ColorFunctionStyleValue when applicable, subdivide_into_iterations folds the value list case into the base, and is_color_function reduces to a plain type-and-tag check with no dispatch at all. The only virtuals left on StyleValue are the destructor and the AbstractImageStyleValue painting interface, both of which wait on relocating the remaining C++-side state out of the image family.
Profiling StyleBench against the pre-conversion baseline showed the storage conversion's ~12% regression comes almost entirely from allocation volume: every value construction now costs a C++ shell plus a Rust allocation, and the added churn pushes mimalloc into its generic refill paths. The hottest creators were keywords, numbers and integers, largely reconstructed by computed_style_value at used-value time. Keyword values are immutable and the keyword set is fixed, so create() now returns one interned instance per keyword (the generator emits a number_of_keywords constant for the table). Small integers in [-1, 255] and the numbers zero and one get the same treatment. Repeated creations become allocation-free and identical values are pointer-identical, which also short-circuits ValueComparing equality. This recovers about 60% of the regression: StyleBench 2.44 -> 2.65 against the 2.78 baseline, measured via WebDriver-driven runs.
Extend the value interning to the other two dominant dimension creators: integral pixel lengths up to 64px (margins, paddings, borders, font sizes) and the 0%, 50% and 100% percentages. Together with the keyword interning this takes StyleBench from 2.44 to 2.70 against the 2.78 pre-conversion baseline.
box_inset_properties_contain_anchor_functions reconstructed all four inset style values from the computed style for every layout-replay eligibility check, just to look for anchor() functions inside them. Anchor functions only survive to used-value time inside calculated values, so when none of the four stored insets is calculated (the overwhelmingly common case) the answer is already no. This check was among the hottest style symbols on StyleBench profiles on both sides of the Rust storage conversion.
Move CSS style value payloads into a Rust-owned tagged representation while preserving the existing C++ StyleValue interface. Hoist the Rust allocation handle into the base class and dispatch serialization, equality, absolutization, color, iteration, and computational-independence operations by type tag.
Materialize the few payloads that benefit from eager C++ access, retain cross-language references explicitly, and intern common keyword, integer, number, length, and percentage values. Add focused equality coverage and avoid reconstructing inset values when none can contain an anchor function.
This is a step towards porting the style computation machinery to Rust. It's by no means the intended final state of this code :)