Skip to content

LibWeb: Store CSS style value data in Rust-owned allocations - #10749

Merged
awesomekling merged 52 commits into
LadybirdBrowser:masterfrom
awesomekling:next-rs
Jul 18, 2026
Merged

LibWeb: Store CSS style value data in Rust-owned allocations#10749
awesomekling merged 52 commits into
LadybirdBrowser:masterfrom
awesomekling:next-rs

Conversation

@awesomekling

Copy link
Copy Markdown
Member

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 :)

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds Rust-backed FFI storage and dispatch for many LibWeb CSS style values, raw string ownership bridges, null-character search fixes, utimensat sandbox support, span-based APIs, and deep style-value equality tests.

Changes

CSS style-value FFI migration

Layer / File(s) Summary
Rust payload and ownership foundation
Libraries/LibWeb/Rust/src/style_value.rs, Libraries/LibWeb/CSS/StyleValues/StyleValue.*, RustStyleValueHandle.h
Adds retained Rust layouts, constructors, destruction, C++ ownership helpers, and centralized style-value dispatch.
CSS value representations
Libraries/LibWeb/CSS/StyleValues/*
Moves numerous CSS value classes from C++ member storage to Rust-backed payloads with accessor-based serialization, comparison, absolutization, and reification.
Collections, gradients, filters, and complex values
Libraries/LibWeb/CSS/StyleValues/*Gradient*, *List*, FilterStyleValue.*, Grid*
Adds retained arrays and on-demand reconstruction for gradients, lists, filters, grid values, image sets, counters, and related structures.
Integration and equality validation
Libraries/LibWeb/CMakeLists.txt, Tests/LibWeb/*
Generates and imports the style-value FFI header and adds deep equality tests for counters, gradients, radial sizes, and unresolved values.

Runtime and supporting fixes

Layer / File(s) Summary
Raw string bridges and null searches
AK/String.h, AK/Utf16*, AK/StringUtils.cpp, AK/Utf16View.cpp, Tests/AK/*
Adds raw ownership round-tripping for strings and handles null-byte/code-unit searches with bounded scans and alignment tests.
Sandbox and API adaptations
Libraries/LibSandbox/Seccomp.cpp, Libraries/LibWeb/CSS/*, Libraries/LibWeb/Layout/*, Libraries/LibWeb/Painting/*
Allows utimensat, updates span-based accessors and serialization boundaries, and adapts callers to accessor-backed values.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

  • LadybirdBrowser/ladybird#10597: Both PRs touch the same filter API surfaces—especially Libraries/LibWeb/CSS/Filter.{h,cpp} (Filter::filters() behavior/signature)—as part of the broader switch to FilterStyleValue-based list representations.
  • LadybirdBrowser/ladybird#10748: The main PR includes the same seccomp policy change in Libraries/LibSandbox/Seccomp.cpp to recognize/allow the utimensat syscall.

Suggested reviewers: kalenikaliaksandr

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description check ✅ Passed The description matches the changeset: Rust-owned style value payloads, type-tag dispatch, interning, and equality coverage are all reflected in the diff.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (3)
Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp (1)

3403-3421: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Materialize CalculationContext once.

Each branch rebuilds accepted_ranges_by_type. Cache calculation_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 win

Cache grid_track_placement() to avoid redundant FFI reconstruction.

grid_track_placement() reconstructs a GridTrackPlacement from the Rust payload on every call (including an Optional<Utf16FlyString> and a kind switch). Calling it twice in absolutized() 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 win

Materialize 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

📥 Commits

Reviewing files that changed from the base of the PR and between 94a55b0 and f65fb1d.

📒 Files selected for processing (182)
  • AK/String.h
  • AK/StringUtils.cpp
  • AK/Utf16FlyString.h
  • AK/Utf16String.h
  • AK/Utf16StringBase.h
  • AK/Utf16View.cpp
  • Libraries/LibSandbox/Seccomp.cpp
  • Libraries/LibWeb/CMakeLists.txt
  • Libraries/LibWeb/CSS/ComputedProperties.cpp
  • Libraries/LibWeb/CSS/ComputedValues.cpp
  • Libraries/LibWeb/CSS/Filter.cpp
  • Libraries/LibWeb/CSS/Filter.h
  • Libraries/LibWeb/CSS/FontFace.cpp
  • Libraries/LibWeb/CSS/GridTrackPlacement.h
  • Libraries/LibWeb/CSS/GridTrackSize.h
  • Libraries/LibWeb/CSS/Interpolation.cpp
  • Libraries/LibWeb/CSS/ParsedFontFace.cpp
  • Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
  • Libraries/LibWeb/CSS/Serialize.cpp
  • Libraries/LibWeb/CSS/Serialize.h
  • Libraries/LibWeb/CSS/StyleComputer.cpp
  • Libraries/LibWeb/CSS/StylePropertyMap.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
  • Libraries/LibWeb/CSS/URL.h
  • Libraries/LibWeb/Editing/Internal/Algorithms.cpp
  • Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
  • Libraries/LibWeb/Layout/FormattingContext.cpp
  • Libraries/LibWeb/Painting/GradientPainting.cpp
  • Libraries/LibWeb/Painting/Paintable.cpp
  • Libraries/LibWeb/Rust/build.rs
  • Libraries/LibWeb/Rust/src/lib.rs
  • Libraries/LibWeb/Rust/src/style_value.rs
  • Meta/Generators/generate_libweb_css_keyword.py
  • Tests/AK/TestStringUtils.cpp
  • Tests/AK/TestUtf16View.cpp
  • Tests/LibWeb/CMakeLists.txt
  • Tests/LibWeb/TestStyleValueEquality.cpp

Comment thread Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp Outdated
Comment thread Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp Outdated
Comment thread Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
Comment thread Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h Outdated
Comment thread Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h Outdated
Comment thread Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
Comment thread Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
Comment thread Tests/LibWeb/TestStyleValueEquality.cpp Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
Libraries/LibWeb/CSS/Filter.h (1)

29-29: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Cache the materialized filter list at the caller.

Filter::filters() now returns a newly materialized StyleValueVector, but Libraries/LibWeb/CSS/ComputedProperties.cpp:234 calls it once for size() 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 win

Avoid 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 win

Reuse the context already materialized by resolve_value().

Each resolver rebuilds CalculationContext after resolve_value() has already reconstructed the same HashMap. 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

📥 Commits

Reviewing files that changed from the base of the PR and between f65fb1d and a79d378.

📒 Files selected for processing (152)
  • AK/String.h
  • AK/StringUtils.cpp
  • AK/Utf16String.h
  • AK/Utf16View.cpp
  • Libraries/LibWeb/CSS/ComputedProperties.cpp
  • Libraries/LibWeb/CSS/ComputedValues.cpp
  • Libraries/LibWeb/CSS/Filter.cpp
  • Libraries/LibWeb/CSS/Filter.h
  • Libraries/LibWeb/CSS/FontFace.cpp
  • Libraries/LibWeb/CSS/GridTrackPlacement.h
  • Libraries/LibWeb/CSS/GridTrackSize.h
  • Libraries/LibWeb/CSS/Interpolation.cpp
  • Libraries/LibWeb/CSS/ParsedFontFace.cpp
  • Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
  • Libraries/LibWeb/CSS/Serialize.cpp
  • Libraries/LibWeb/CSS/Serialize.h
  • Libraries/LibWeb/CSS/StyleComputer.cpp
  • Libraries/LibWeb/CSS/StylePropertyMap.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
  • Libraries/LibWeb/CSS/URL.h
  • Libraries/LibWeb/Editing/Internal/Algorithms.cpp
  • Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
  • Libraries/LibWeb/Layout/FormattingContext.cpp
  • Libraries/LibWeb/Painting/GradientPainting.cpp
  • Libraries/LibWeb/Painting/Paintable.cpp
  • Libraries/LibWeb/Rust/src/style_value.rs
  • Meta/Generators/generate_libweb_css_keyword.py
  • Tests/AK/TestStringUtils.cpp
  • Tests/AK/TestUtf16View.cpp
  • Tests/LibWeb/CMakeLists.txt
  • Tests/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

Comment thread Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a79d378 and e394815.

📒 Files selected for processing (172)
  • AK/String.h
  • AK/StringUtils.cpp
  • AK/Utf16FlyString.h
  • AK/Utf16String.h
  • AK/Utf16StringBase.h
  • AK/Utf16View.cpp
  • Libraries/LibWeb/CSS/ComputedProperties.cpp
  • Libraries/LibWeb/CSS/ComputedValues.cpp
  • Libraries/LibWeb/CSS/Filter.cpp
  • Libraries/LibWeb/CSS/Filter.h
  • Libraries/LibWeb/CSS/FontFace.cpp
  • Libraries/LibWeb/CSS/GridTrackPlacement.h
  • Libraries/LibWeb/CSS/GridTrackSize.h
  • Libraries/LibWeb/CSS/Interpolation.cpp
  • Libraries/LibWeb/CSS/ParsedFontFace.cpp
  • Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
  • Libraries/LibWeb/CSS/Serialize.cpp
  • Libraries/LibWeb/CSS/Serialize.h
  • Libraries/LibWeb/CSS/StyleComputer.cpp
  • Libraries/LibWeb/CSS/StylePropertyMap.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
  • Libraries/LibWeb/CSS/URL.h
  • Libraries/LibWeb/Editing/Internal/Algorithms.cpp
  • Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
  • Libraries/LibWeb/Layout/FormattingContext.cpp
  • Libraries/LibWeb/Painting/GradientPainting.cpp
  • Libraries/LibWeb/Painting/Paintable.cpp
  • Libraries/LibWeb/Rust/src/style_value.rs
  • Meta/Generators/generate_libweb_css_keyword.py
  • Tests/AK/TestStringUtils.cpp
  • Tests/AK/TestUtf16View.cpp
  • Tests/LibWeb/CMakeLists.txt
  • Tests/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

Comment thread Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
Comment thread Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h Outdated
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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h (1)

29-36: 🚀 Performance & Scalability | 🔵 Trivial | 🏗️ Heavy lift

Keep 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 use size()/value_at() internally, materializing a StyleValueVector only 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 win

Materialize 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 calling size() 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

📥 Commits

Reviewing files that changed from the base of the PR and between e394815 and 9e69765.

📒 Files selected for processing (182)
  • AK/String.h
  • AK/StringUtils.cpp
  • AK/Utf16FlyString.h
  • AK/Utf16String.h
  • AK/Utf16StringBase.h
  • AK/Utf16View.cpp
  • Libraries/LibSandbox/Seccomp.cpp
  • Libraries/LibWeb/CMakeLists.txt
  • Libraries/LibWeb/CSS/ComputedProperties.cpp
  • Libraries/LibWeb/CSS/ComputedValues.cpp
  • Libraries/LibWeb/CSS/Filter.cpp
  • Libraries/LibWeb/CSS/Filter.h
  • Libraries/LibWeb/CSS/FontFace.cpp
  • Libraries/LibWeb/CSS/GridTrackPlacement.h
  • Libraries/LibWeb/CSS/GridTrackSize.h
  • Libraries/LibWeb/CSS/Interpolation.cpp
  • Libraries/LibWeb/CSS/ParsedFontFace.cpp
  • Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
  • Libraries/LibWeb/CSS/Serialize.cpp
  • Libraries/LibWeb/CSS/Serialize.h
  • Libraries/LibWeb/CSS/StyleComputer.cpp
  • Libraries/LibWeb/CSS/StylePropertyMap.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
  • Libraries/LibWeb/CSS/URL.h
  • Libraries/LibWeb/Editing/Internal/Algorithms.cpp
  • Libraries/LibWeb/HTML/Canvas/Canvas2DContextBase.cpp
  • Libraries/LibWeb/Layout/FormattingContext.cpp
  • Libraries/LibWeb/Painting/GradientPainting.cpp
  • Libraries/LibWeb/Painting/Paintable.cpp
  • Libraries/LibWeb/Rust/build.rs
  • Libraries/LibWeb/Rust/src/lib.rs
  • Libraries/LibWeb/Rust/src/style_value.rs
  • Meta/Generators/generate_libweb_css_keyword.py
  • Tests/AK/TestStringUtils.cpp
  • Tests/AK/TestUtf16View.cpp
  • Tests/LibWeb/CMakeLists.txt
  • Tests/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

Comment thread Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
Comment thread Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h Outdated
Comment thread Tests/LibWeb/CMakeLists.txt
Comment thread AK/StringUtils.cpp Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Reject looping lookup on an empty list.

Line 44 evaluates i % size() when allow_loop is 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

📥 Commits

Reviewing files that changed from the base of the PR and between 9e69765 and c7d6cc1.

📒 Files selected for processing (145)
  • AK/String.h
  • AK/StringUtils.cpp
  • AK/Utf16String.h
  • AK/Utf16View.cpp
  • Libraries/LibWeb/CSS/ComputedProperties.cpp
  • Libraries/LibWeb/CSS/ComputedValues.cpp
  • Libraries/LibWeb/CSS/GridTrackPlacement.h
  • Libraries/LibWeb/CSS/GridTrackSize.h
  • Libraries/LibWeb/CSS/Interpolation.cpp
  • Libraries/LibWeb/CSS/Parser/PropertyParsing.cpp
  • Libraries/LibWeb/CSS/Serialize.cpp
  • Libraries/LibWeb/CSS/Serialize.h
  • Libraries/LibWeb/CSS/StyleComputer.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AnchorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/AngleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BackgroundSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BasicShapeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderImageSliceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusRectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/BorderRadiusStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorInterpolationMethodStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorMixStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorSchemeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ConicGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ContentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ContrastColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterDefinitionsStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CounterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/CursorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/CustomIdentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DimensionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/DisplayStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/EasingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EdgeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/EmptyOptionalStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FilterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FlexStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontSourceStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/FontStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FrequencyStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/FunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridAutoFlowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTemplateAreaStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackPlacementStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageSetStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/IntegerStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/KeywordStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LengthStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LightDarkStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/LinearGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/NumberStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpacityValueStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/OverflowClipMarginStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PercentageStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialGradientStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RadialSizeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RandomValueSharingStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RatioStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RectStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/RepeatStyleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ResolutionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/RustStyleValueHandle.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarColorStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ScrollbarGutterStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShadowStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StringStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.cpp
  • Libraries/LibWeb/CSS/StyleValues/StyleValueList.h
  • Libraries/LibWeb/CSS/StyleValues/SuperellipseStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TextIndentStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TextUnderlinePositionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TimeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TransformationStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TreeCountingFunctionStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/URLStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.cpp
  • Libraries/LibWeb/CSS/StyleValues/UnresolvedStyleValue.h
  • Libraries/LibWeb/CSS/URL.h
  • Libraries/LibWeb/Layout/FormattingContext.cpp
  • Libraries/LibWeb/Painting/GradientPainting.cpp
  • Libraries/LibWeb/Painting/Paintable.cpp
  • Libraries/LibWeb/Rust/src/style_value.rs
  • Meta/Generators/generate_libweb_css_keyword.py
  • Tests/AK/TestStringUtils.cpp
  • Tests/AK/TestUtf16View.cpp
  • Tests/LibWeb/CMakeLists.txt
  • Tests/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

Comment thread Libraries/LibWeb/CSS/StyleValues/CounterStyleSystemStyleValue.cpp Outdated
Comment thread Libraries/LibWeb/CSS/StyleValues/ShorthandStyleValue.h
Comment thread Libraries/LibWeb/CSS/StyleValues/TupleStyleValue.h Outdated
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants