[Feature] Support symbols() in list-style-type [chromium/src : main]

0 views
Skip to first unread message

Javier Contreras (Gerrit)

unread,
Jul 13, 2026, 4:34:30 PM (13 days ago) Jul 13
to Ananya Anand, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
Attention needed from Ananya Anand

Javier Contreras added 3 comments

Commit Message
Line 7, Patchset 9 (Latest):[Feature] Support symbols() in list-style-type
Javier Contreras . unresolved

[symbols] or [countery-styles] depending on what you decide in the other CL

File third_party/blink/renderer/core/inspector/inspector_css_agent.cc
Line 2187, Patchset 9 (Latest): // An anonymous symbols() counter style has no name, so there is no
// corresponding @counter-style at-rule to report.
Javier Contreras . unresolved

this comment could be simplified to be easier to understand. If its `symbols` then it by definition has no corresponding counter style at rule

File third_party/blink/renderer/core/style/list_style_type_data.cc
Line 59, Patchset 9 (Latest): // The anonymous counter style of a symbols() function is immutable and
// self-contained, so once built it never becomes stale.
Javier Contreras . unresolved
we should probably add a CHECK to enforce this, and just return true then.
so something like:
if (IsSymbols())
CHECK(cointer_style_)
return true
Open in Gerrit

Related details

Attention is currently required from:
  • Ananya Anand
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
Gerrit-Change-Number: 8066847
Gerrit-PatchSet: 9
Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
Gerrit-CC: Menard, Alexis <alexis...@intel.com>
Gerrit-Attention: Ananya Anand <t-ana...@microsoft.com>
Gerrit-Comment-Date: Mon, 13 Jul 2026 20:34:17 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Javier Contreras (Gerrit)

unread,
Jul 13, 2026, 4:43:34 PM (13 days ago) Jul 13
to Ananya Anand, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
Attention needed from Ananya Anand

Javier Contreras added 1 comment

Commit Message
Line 24, Patchset 9 (Latest):Bug: none
Javier Contreras . unresolved

should be 40747844

Gerrit-Comment-Date: Mon, 13 Jul 2026 20:43:21 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Ananya Anand (Gerrit)

unread,
Jul 15, 2026, 4:14:28 PM (11 days ago) Jul 15
to Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org

Ananya Anand added 1 comment

Patchset-level comments
File-level comment, Patchset 16 (Latest):
Ananya Anand . resolved

fixed, thanks!

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
Gerrit-Change-Number: 8066847
Gerrit-PatchSet: 16
Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
Gerrit-CC: Menard, Alexis <alexis...@intel.com>
Gerrit-Comment-Date: Wed, 15 Jul 2026 20:14:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Ananya Anand (Gerrit)

unread,
Jul 15, 2026, 4:16:51 PM (11 days ago) Jul 15
to Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
Attention needed from Javier Contreras

Ananya Anand added 5 comments

Patchset-level comments
Ananya Anand . resolved

fixed, thanks!:)

Commit Message
Line 7, Patchset 9:[Feature] Support symbols() in list-style-type
Javier Contreras . resolved

[symbols] or [countery-styles] depending on what you decide in the other CL

Ananya Anand

Done

Line 24, Patchset 9:Bug: none
Javier Contreras . resolved

should be 40747844

Ananya Anand

Done

File third_party/blink/renderer/core/inspector/inspector_css_agent.cc
Line 2187, Patchset 9: // An anonymous symbols() counter style has no name, so there is no

// corresponding @counter-style at-rule to report.
Javier Contreras . resolved

this comment could be simplified to be easier to understand. If its `symbols` then it by definition has no corresponding counter style at rule

Ananya Anand

Done

File third_party/blink/renderer/core/style/list_style_type_data.cc
Line 59, Patchset 9: // The anonymous counter style of a symbols() function is immutable and

// self-contained, so once built it never becomes stale.
Javier Contreras . resolved
we should probably add a CHECK to enforce this, and just return true then.
so something like:
if (IsSymbols())
CHECK(cointer_style_)
return true
Ananya Anand

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Javier Contreras
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
    Gerrit-Change-Number: 8066847
    Gerrit-PatchSet: 16
    Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
    Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
    Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
    Gerrit-CC: Menard, Alexis <alexis...@intel.com>
    Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
    Gerrit-Comment-Date: Wed, 15 Jul 2026 20:16:38 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Javier Contreras <javi...@microsoft.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Javier Contreras (Gerrit)

    unread,
    Jul 16, 2026, 12:17:29 PM (10 days ago) Jul 16
    to Ananya Anand, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
    Attention needed from Ananya Anand

    Javier Contreras voted and added 1 comment

    Votes added by Javier Contreras

    Code-Review+1

    1 comment

    File third_party/blink/renderer/core/style/list_style_type_data.cc
    Line 59, Patchset 9: // The anonymous counter style of a symbols() function is immutable and
    // self-contained, so once built it never becomes stale.
    Javier Contreras . resolved
    we should probably add a CHECK to enforce this, and just return true then.
    so something like:
    if (IsSymbols())
    CHECK(cointer_style_)
    return true
    Ananya Anand

    Done

    Javier Contreras

    Thanks! I do like the way it flows much better now

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ananya Anand
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
    Gerrit-Change-Number: 8066847
    Gerrit-PatchSet: 16
    Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
    Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
    Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
    Gerrit-CC: Menard, Alexis <alexis...@intel.com>
    Gerrit-Attention: Ananya Anand <t-ana...@microsoft.com>
    Gerrit-Comment-Date: Thu, 16 Jul 2026 16:17:16 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Ananya Anand <t-ana...@microsoft.com>
    Comment-In-Reply-To: Javier Contreras <javi...@microsoft.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Alison Maher (Gerrit)

    unread,
    Jul 21, 2026, 5:31:25 PM (5 days ago) Jul 21
    to Ananya Anand, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
    Attention needed from Ananya Anand

    Alison Maher added 9 comments

    File third_party/blink/renderer/core/style/list_style_type_data.h
    Line 89, Patchset 17 (Latest): Member<const cssvalue::CSSSymbolsValue> symbols_value_;
    Alison Maher . unresolved

    Would symbols_funciton_value_ make sense? Same with other namings

    Line 54, Patchset 17 (Latest): // A symbols() function is a nameless counter style; callers must resolve it
    // via GetCounterStyle() (which builds the anonymous style) rather than by
    // name.
    Alison Maher . unresolved

    nit: this part is ok to remove

    Line 50, Patchset 17 (Latest): bool IsSymbols() const { return symbols_value_ != nullptr; }
    Alison Maher . unresolved

    IsSymbolsFunction

    Line 44, Patchset 17 (Latest): static ListStyleTypeData* CreateSymbols(const cssvalue::CSSSymbolsValue&);
    Alison Maher . unresolved

    CreateSymbolsFunciton

    File third_party/blink/renderer/core/style/list_style_type_data.cc
    Line 7, Patchset 17 (Latest):#include "base/memory/values_equivalent.h"
    Alison Maher . unresolved

    I think this should be already included by /css_symbols_value.h and can be removed

    Line 42, Patchset 17 (Latest): Type::kCounterStyle, g_empty_atom, nullptr, &symbols_value);
    Alison Maher . unresolved
    Line 60, Patchset 17 (Latest): // and built on demand by GetCounterStyle(), so its reference never becomes
    Alison Maher . unresolved

    nit: this part can be removed

    Line 60, Patchset 17 (Latest): // and built on demand by GetCounterStyle(), so its reference never becomes
    // stale.
    Alison Maher . unresolved

    I'm assuming if we change the list style to a different symbols function we invalidate this. I'm guessing this is just needed for the counter styles global map?

    Line 63, Patchset 17 (Latest): return true;
    Alison Maher . unresolved

    Should we check here that the symbols was properly created?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ananya Anand
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 17
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Comment-Date: Tue, 21 Jul 2026 21:31:13 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Ananya Anand (Gerrit)

      unread,
      Jul 22, 2026, 3:02:45 PM (4 days ago) Jul 22
      to Alison Maher, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
      Attention needed from Alison Maher and Javier Contreras

      Ananya Anand added 10 comments

      Patchset-level comments
      File-level comment, Patchset 21:
      Ananya Anand . resolved

      done, thanks!

      File third_party/blink/renderer/core/style/list_style_type_data.h
      Line 89, Patchset 17: Member<const cssvalue::CSSSymbolsValue> symbols_value_;
      Alison Maher . resolved

      Would symbols_funciton_value_ make sense? Same with other namings

      Ananya Anand

      yeah I think it's good to be more specific

      Line 54, Patchset 17: // A symbols() function is a nameless counter style; callers must resolve it

      // via GetCounterStyle() (which builds the anonymous style) rather than by
      // name.
      Alison Maher . resolved

      nit: this part is ok to remove

      Ananya Anand

      Done

      Line 50, Patchset 17: bool IsSymbols() const { return symbols_value_ != nullptr; }
      Alison Maher . resolved

      IsSymbolsFunction

      Ananya Anand

      Done

      Line 44, Patchset 17: static ListStyleTypeData* CreateSymbols(const cssvalue::CSSSymbolsValue&);
      Alison Maher . resolved

      CreateSymbolsFunciton

      Ananya Anand

      Done

      File third_party/blink/renderer/core/style/list_style_type_data.cc
      Line 7, Patchset 17:#include "base/memory/values_equivalent.h"
      Alison Maher . resolved

      I think this should be already included by /css_symbols_value.h and can be removed

      Ananya Anand

      Done

      Line 42, Patchset 17: Type::kCounterStyle, g_empty_atom, nullptr, &symbols_value);
      Alison Maher . resolved
      Ananya Anand

      Done

      Line 60, Patchset 17: // and built on demand by GetCounterStyle(), so its reference never becomes
      Alison Maher . resolved

      nit: this part can be removed

      Ananya Anand

      Done

      Line 60, Patchset 17: // and built on demand by GetCounterStyle(), so its reference never becomes
      // stale.
      Alison Maher . resolved

      I'm assuming if we change the list style to a different symbols function we invalidate this. I'm guessing this is just needed for the counter styles global map?

      Ananya Anand

      yep! A different  symbols() produces a whole new ListStyleTypeData, so the old value is replaced rather than left stale to detect. This validity check only matters for named counter styles in the global map, so an anonymous symbols() can never go stale and sp I made it return true early.

      Alison Maher . unresolved

      Should we check here that the symbols was properly created?

      Ananya Anand

      I don't think its rlly needed here bc a symbols() value only exists if it passed parsing, and the parser accepts exactly what building the counter style requires (>=1 symbol, and >= 2 for alphabetic/numeric) so CreateAnonymousCounterStyle() can't fail, and the CHECK inside it already backstops that.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Alison Maher
      • Javier Contreras
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 21
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Alison Maher <alm...@microsoft.com>
      Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
      Gerrit-Comment-Date: Wed, 22 Jul 2026 19:02:31 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Alison Maher <alm...@microsoft.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Alison Maher (Gerrit)

      unread,
      Jul 23, 2026, 2:40:13 PM (3 days ago) Jul 23
      to Ananya Anand, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
      Attention needed from Ananya Anand and Javier Contreras

      Alison Maher added 6 comments

      File third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
      Line 6672, Patchset 23 (Latest): context.Count(WebFeature::kCSSSymbolsFunction);
      Alison Maher . unresolved

      Might be worth a test to make sure we are firing this

      Line 6673, Patchset 23 (Latest): return symbols;
      Alison Maher . unresolved

      What if an author sets this to something like "symbols(...) some-garbage" - where there is garbage listed after the symbols function. Do we return invalid in that case? Might be worth a test if we don't have that one yet

      File third_party/blink/renderer/core/style/list_style_type_data.h
      Line 66, Patchset 23 (Latest): DCHECK(symbols_function_value_);
      Alison Maher . unresolved

      nit: CHECK is preferred instead of DCHECK when the check is trivial

      Line 56, Patchset 23 (Latest): DCHECK(!IsSymbolsFunction());
      Alison Maher . unresolved

      nit: CHECK is preferred instead of DCHECK when the check is trivial

      File third_party/blink/renderer/core/style/list_style_type_data.cc
      Line 42, Patchset 23 (Latest): /*tree_scope=*/nullptr, &symbols_function_value);
      Alison Maher . unresolved

      Instead of storing this, could we just create the counterstyle here based on it, rather than doing it lazily. Then we can get rid of symbols_function_value_. Then IsSymbolsFunction would check if IsCounterStyle and the name is anonymous or something to tell if it is a symbols function

      Alison Maher . resolved

      Should we check here that the symbols was properly created?

      Ananya Anand

      I don't think its rlly needed here bc a symbols() value only exists if it passed parsing, and the parser accepts exactly what building the counter style requires (>=1 symbol, and >= 2 for alphabetic/numeric) so CreateAnonymousCounterStyle() can't fail, and the CHECK inside it already backstops that.

      Alison Maher

      Acknowledged

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ananya Anand
      • Javier Contreras
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 23
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
      Gerrit-Comment-Date: Thu, 23 Jul 2026 18:39:58 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Alison Maher <alm...@microsoft.com>
      Comment-In-Reply-To: Ananya Anand <t-ana...@microsoft.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Ananya Anand (Gerrit)

      unread,
      Jul 24, 2026, 2:00:05 AM (3 days ago) Jul 24
      to Alison Maher, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
      Attention needed from Alison Maher and Javier Contreras

      Ananya Anand voted and added 6 comments

      Votes added by Ananya Anand

      Commit-Queue+1

      6 comments

      Patchset-level comments
      File-level comment, Patchset 26:
      Ananya Anand . resolved

      done, thanks:)

      File third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
      Line 6672, Patchset 23: context.Count(WebFeature::kCSSSymbolsFunction);
      Alison Maher . resolved

      Might be worth a test to make sure we are firing this

      Ananya Anand

      yeah fs added CSSPropertyParserTest.ListStyleTypeSymbolsFunctionUseCounter in css_property_parser_test.cc

      Line 6673, Patchset 23: return symbols;
      Alison Maher . unresolved

      What if an author sets this to something like "symbols(...) some-garbage" - where there is garbage listed after the symbols function. Do we return invalid in that case? Might be worth a test if we don't have that one yet

      Ananya Anand

      yea its invalid. ListStyleType::ParseSingleValue returns as soon as it matches the symbols func, and the generic property parser then requires the whole value to be consumed. CSSPropertyParser::ParseSingleValue  returns null when !stream.AtEnd() so any trailing "junk" after symbols() reject the entire declaration. We didn't have a test for that specific case, so I added two to  list-style-type-invalid.html (checking for both cases where symbols() is followed up by a valid keyword and junk).

      File third_party/blink/renderer/core/style/list_style_type_data.h
      Line 66, Patchset 23: DCHECK(symbols_function_value_);
      Alison Maher . resolved

      nit: CHECK is preferred instead of DCHECK when the check is trivial

      Ananya Anand

      Done

      Line 56, Patchset 23: DCHECK(!IsSymbolsFunction());
      Alison Maher . resolved

      nit: CHECK is preferred instead of DCHECK when the check is trivial

      Ananya Anand

      Done

      File third_party/blink/renderer/core/style/list_style_type_data.cc
      Line 42, Patchset 23: /*tree_scope=*/nullptr, &symbols_function_value);
      Alison Maher . unresolved

      Instead of storing this, could we just create the counterstyle here based on it, rather than doing it lazily. Then we can get rid of symbols_function_value_. Then IsSymbolsFunction would check if IsCounterStyle and the name is anonymous or something to tell if it is a symbols function

      Ananya Anand

      I kept symbols_function_value_ bc it is the computed value of list-style-type and it's what getComputedStyle  serializes. A CounterStyle is just the internal object that renders the markers but it isn't a CSSValue, so it can't stand in for that. Building it eagerly would be fine, but dropping the parsed value isn't bc we'd have to rebuild it from the counter style's already-defaulted descriptors, which is messier than just keeping it.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Alison Maher
      • Javier Contreras
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 26
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Alison Maher <alm...@microsoft.com>
      Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
      Gerrit-Comment-Date: Fri, 24 Jul 2026 05:59:54 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Alison Maher <alm...@microsoft.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Alison Maher (Gerrit)

      unread,
      Jul 24, 2026, 1:55:40 PM (2 days ago) Jul 24
      to Ananya Anand, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
      Attention needed from Ananya Anand and Javier Contreras

      Alison Maher added 2 comments

      File third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
      Line 6673, Patchset 23: return symbols;
      Alison Maher . resolved

      What if an author sets this to something like "symbols(...) some-garbage" - where there is garbage listed after the symbols function. Do we return invalid in that case? Might be worth a test if we don't have that one yet

      Ananya Anand

      yea its invalid. ListStyleType::ParseSingleValue returns as soon as it matches the symbols func, and the generic property parser then requires the whole value to be consumed. CSSPropertyParser::ParseSingleValue  returns null when !stream.AtEnd() so any trailing "junk" after symbols() reject the entire declaration. We didn't have a test for that specific case, so I added two to  list-style-type-invalid.html (checking for both cases where symbols() is followed up by a valid keyword and junk).

      Alison Maher

      Acknowledged

      File third_party/blink/renderer/core/style/list_style_type_data.cc
      Line 42, Patchset 23: /*tree_scope=*/nullptr, &symbols_function_value);
      Alison Maher . unresolved

      Instead of storing this, could we just create the counterstyle here based on it, rather than doing it lazily. Then we can get rid of symbols_function_value_. Then IsSymbolsFunction would check if IsCounterStyle and the name is anonymous or something to tell if it is a symbols function

      Ananya Anand

      I kept symbols_function_value_ bc it is the computed value of list-style-type and it's what getComputedStyle  serializes. A CounterStyle is just the internal object that renders the markers but it isn't a CSSValue, so it can't stand in for that. Building it eagerly would be fine, but dropping the parsed value isn't bc we'd have to rebuild it from the counter style's already-defaulted descriptors, which is messier than just keeping it.

      Alison Maher

      So there should be precedence to convert the style format to a value format (example: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc;l=5205?q=CSSGridTemplateAreasValue%20&ss=chromium)

      If we don't have enough info in CounterStyle to convert back to the value, then we should consider adding that as opposed to keeping both around

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ananya Anand
      • Javier Contreras
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 27
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
      Gerrit-Comment-Date: Fri, 24 Jul 2026 17:55:11 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Ananya Anand (Gerrit)

      unread,
      Jul 24, 2026, 3:29:19 PM (2 days ago) Jul 24
      to Alison Maher, Javier Contreras, Chromium LUCI CQ, Menard, Alexis, chromium...@chromium.org, apavlo...@chromium.org, blink-re...@chromium.org, blink-rev...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, devtools-re...@chromium.org
      Attention needed from Alison Maher and Javier Contreras

      Ananya Anand added 2 comments

      Patchset-level comments
      File-level comment, Patchset 29 (Latest):
      Ananya Anand . resolved

      added some thoughts! lmk what you think

      File third_party/blink/renderer/core/style/list_style_type_data.cc
      Line 42, Patchset 23: /*tree_scope=*/nullptr, &symbols_function_value);
      Alison Maher . unresolved

      Instead of storing this, could we just create the counterstyle here based on it, rather than doing it lazily. Then we can get rid of symbols_function_value_. Then IsSymbolsFunction would check if IsCounterStyle and the name is anonymous or something to tell if it is a symbols function

      Ananya Anand

      I kept symbols_function_value_ bc it is the computed value of list-style-type and it's what getComputedStyle  serializes. A CounterStyle is just the internal object that renders the markers but it isn't a CSSValue, so it can't stand in for that. Building it eagerly would be fine, but dropping the parsed value isn't bc we'd have to rebuild it from the counter style's already-defaulted descriptors, which is messier than just keeping it.

      Alison Maher

      So there should be precedence to convert the style format to a value format (example: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc;l=5205?q=CSSGridTemplateAreasValue%20&ss=chromium)

      If we don't have enough info in CounterStyle to convert back to the value, then we should consider adding that as opposed to keeping both around

      Ananya Anand

      Yeah, that grid pattern works, but symbols() isn't quite the same case. A couple reasons:

      1.Grid can reconstruct its value because what it stores is a lightweight, normalized struct (the grid map). But here we're dealing wiht CounterStyle, which is heavyweight and only built lazily (carries a lotta state, it needs GetDecimal(), and fallback resolution). So making it the source of truth would be a step down, not up since we'd have to build it eagerly for every symbols(), even ones only read through getComputedStyle or never rendered.

      2.There's precedent for keeping the value. Custom properties store the  CSSValue  as the computed value and return it directly for getComputedStyle, comparing with  base::ValuesEquivalent (same as we do here): https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/style/computed_style.cc (see GetVariableValue). That fits symbols() because what you write comes back unchanged when you read it with getComputedStyle so there's nothing to rebuild. Grid is diff bc it already needs that cell map for layout, so keeping the value too would be redundant, which is why it regenerates the value from the map instead. That reasoning only kicks in when you're already holding the resolved form, and we aren't.

      3.The named @counter-style path in this same class already stores its reference (the name) and lazily caches the resolved CounterStyle. symbols() is just the inline-value version of that, so keeping the value is the consistent choice.

      So I'd lean toward keeping symbols_function_value_, but if you'd still rather reconstruct from the CounterStyle, I'm happy to do that.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Alison Maher
      • Javier Contreras
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I6f7e33f290b59d9cbff79bc6b633dd78b5084a97
      Gerrit-Change-Number: 8066847
      Gerrit-PatchSet: 29
      Gerrit-Owner: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Alison Maher <alm...@microsoft.com>
      Gerrit-Reviewer: Ananya Anand <t-ana...@microsoft.com>
      Gerrit-Reviewer: Javier Contreras <javi...@microsoft.com>
      Gerrit-CC: Menard, Alexis <alexis...@intel.com>
      Gerrit-Attention: Alison Maher <alm...@microsoft.com>
      Gerrit-Attention: Javier Contreras <javi...@microsoft.com>
      Gerrit-Comment-Date: Fri, 24 Jul 2026 19:29:10 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy
      Reply all
      Reply to author
      Forward
      0 new messages