Commit 0ad2ad81 authored by Kent Tamura's avatar Kent Tamura Committed by Chromium LUCI CQ

css-lists: Elements with 'display:list-item' should respect

'counter-increment' and 'counter-set' properties

ListItemOrdinal::CalcValue() should refer to these properties.

Bug: 1157365
Change-Id: I30bb015935b4cd076a5054dddee062d73145c089
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2583595Reviewed-by: default avatarOriol Brufau <obrufau@igalia.com>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#835809}
parent 300297b8
......@@ -4,8 +4,9 @@
#include "third_party/blink/renderer/core/html/list_item_ordinal.h"
#include "base/numerics/clamped_math.h"
#include "base/numerics/safe_conversions.h"
#include "third_party/blink/renderer/core/dom/layout_tree_builder_traversal.h"
#include "third_party/blink/renderer/core/dom/node_computed_style.h"
#include "third_party/blink/renderer/core/html/html_olist_element.h"
#include "third_party/blink/renderer/core/layout/layout_list_item.h"
#include "third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.h"
......@@ -145,19 +146,27 @@ int ListItemOrdinal::CalcValue(const Node& item_node) const {
Node* list = EnclosingList(&item_node);
auto* o_list_element = DynamicTo<HTMLOListElement>(list);
int value_step = 1;
if (o_list_element && o_list_element->IsReversed())
value_step = -1;
const bool is_reversed = o_list_element && o_list_element->IsReversed();
int value_step = is_reversed ? -1 : 1;
if (const auto* style = item_node.GetComputedStyle()) {
const auto directives =
style->GetCounterDirectives(AtomicString("list-item"));
if (directives.IsSet())
return directives.CombinedValue();
if (directives.IsIncrement())
value_step = directives.CombinedValue();
}
int64_t base_value = 0;
// FIXME: This recurses to a possible depth of the length of the list.
// That's not good -- we need to change this to an iterative algorithm.
if (NodeAndOrdinal previous = PreviousListItem(list, &item_node))
return base::ClampAdd(previous.ordinal->Value(*previous.node), value_step);
if (o_list_element)
return o_list_element->StartConsideringItemCount();
return 1;
if (NodeAndOrdinal previous = PreviousListItem(list, &item_node)) {
base_value = previous.ordinal->Value(*previous.node);
} else if (o_list_element) {
base_value = o_list_element->StartConsideringItemCount();
base_value += (is_reversed ? 1 : -1);
}
return base::saturated_cast<int>(base_value + value_step);
}
int ListItemOrdinal::Value(const Node& item_node) const {
......
......@@ -811,7 +811,6 @@ crbug.com/1155036 external/wpt/css/css-flexbox/contain-size-layout-abspos-flex-c
crbug.com/1123457 external/wpt/css/css-lists/counter-list-item-2.html [ Failure ]
crbug.com/1066577 external/wpt/css/css-lists/li-value-reversed-005.html [ Failure ]
crbug.com/1066577 external/wpt/css/css-lists/li-value-reversed-004.html [ Failure ]
crbug.com/1066577 external/wpt/css/css-lists/li-value-reversed-003.html [ Failure ]
# [css-overflow]
# Incorrect WPT tests.
......@@ -2746,7 +2745,6 @@ crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-siz
crbug.com/626703 external/wpt/xhr/event-readystatechange-loaded.any.worker.html [ Timeout Failure ]
crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-size-change-003.html [ Failure ]
crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-size-change-002.html [ Failure ]
crbug.com/626703 external/wpt/css/css-lists/li-list-item-counter.html [ Failure ]
crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-size-change-006.html [ Failure ]
crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-size-change-004.html [ Failure ]
crbug.com/626703 external/wpt/css/css-sizing/image-min-max-content-intrinsic-size-change-007.html [ Failure ]
......
<!DOCTYPE html>
<ol>
<details><summary>summary</summary></details>
<li value="1">1</li>
<li value="2">2 <details><summary>summary</summary></details></li>
<li value="3">3</li>
<details><summary>summary</summary></details>
<li value="4">4</li>
</ol>
<ol>
<summary>summary</summary>
<li value="1">1</li>
<li value="2">2 <summary>summary</summary></li>
<li value="3">3</li>
<summary>summary</summary>
<li value="4">4</li>
</ol>
<!DOCTYPE html>
<title>Check if SUMMARY has 'counter-increment: list-item 0'</title>
<link rel="match" href="summary-in-ol-ref.html">
<ol>
<details><summary>summary</summary></details>
<li>1</li>
<li>2 <details><summary>summary</summary></details></li>
<li>3</li>
<details><summary>summary</summary></details>
<li>4</li>
</ol>
<ol>
<summary>summary</summary>
<li>1</li>
<li>2 <summary>summary</summary></li>
<li>3</li>
<summary>summary</summary>
<li>4</li>
</ol>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment