[css-lists] Fix 'content: counter(list-item)' in pseudo-elements

::before, ::after and ::marker pseudo-elements can use the counter()
function in the 'content' property in order to retrieve the value of a
counter. This was already working well, except for the automatic
'list-item' counter.

The problem was that in <ol> elements, the counter was set to the start
value. For example, in '<ol start="3"><li></li></ol>', the counter was 3
in ol::before, but <li> increments it, so it became 4 in li::before.
This patch sets it to the start value minus 1, according to the spec
https://drafts.csswg.org/css-lists/#ua-stylesheet

There was also the problem that list items would increment the value,
even in reversed lists. E.g. in '<ol reversed><li></li><li></li></ol>',
the counter used to be 2 in ol::before, 3 in li:first-child::before,
and 4 in li:last-child::before. This patch checks whether the list item
is in a reversed list in order to decide if the value should be
incremented or decremented.

Bug: 796961

TEST=external/wpt/css/css-lists/counter-list-item.html
TEST=external/wpt/css/css-pseudo/marker-content-002.html
TEST=external/wpt/css/css-pseudo/marker-content-005.html

The former test is imported from WebKit.

Change-Id: I011499095379df547820eb6417f68ab61cf5a23d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2270305
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Oriol Brufau <obrufau@igalia.com>
Cr-Commit-Position: refs/heads/master@{#783493}
7 files changed
tree: fe3d3f85d18c1e1d4f7732b8ea1aeca6e6179525
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. jingle/
  31. media/
  32. mojo/
  33. native_client_sdk/
  34. net/
  35. pdf/
  36. ppapi/
  37. printing/
  38. remoting/
  39. rlz/
  40. sandbox/
  41. services/
  42. skia/
  43. sql/
  44. storage/
  45. styleguide/
  46. testing/
  47. third_party/
  48. tools/
  49. ui/
  50. url/
  51. weblayer/
  52. .clang-format
  53. .clang-tidy
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitattributes
  57. .gitignore
  58. .gn
  59. .vpython
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. ENG_REVIEW_OWNERS
  68. LICENSE
  69. LICENSE.chromium_os
  70. OWNERS
  71. PRESUBMIT.py
  72. PRESUBMIT_test.py
  73. PRESUBMIT_test_mocks.py
  74. README.md
  75. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.