Use floor instead of round for decimal border widths

Chromium started to support subpixel borders 3 years ago
(see https://codereview.chromium.org/2640143005).
At that time it was decided to round decimal values
(as Edge was also doing it).
But edge rounded decimal values for both borders and outlines,
however Chromium only did it for borders (while flooring outlines).
Now that Edge uses Chromium, it has the same inconsistency too.

The other browsers Firefox and WebKit floor both borders and outlines,
so this patch is moving towards improving interoperability
between browsers on border pixel snapping.
This behavior is not defined in the spec, but if all browsers
behave the same that would simplify web author's lives.

The patch is basically changing roundf() calls by floorf(),
and then updating and rebaselining tests according to the new behavior.
It also adds two WPT tests to ensure that pixel snapping works
the same in all browsers.

BUG=1081246
TEST=fast/sub-pixel/sub-pixel-border-2.html
TEST=external/wpt/css/css-backgrounds/border-width-pixel-snapping-001-a.html
TEST=external/wpt/css/css-backgrounds/border-width-pixel-snapping-002-a.html

Change-Id: I14adfc78d2c9b7df697c7ce041dcbf1fe869e652
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2199140
Commit-Queue: Manuel Rego <rego@igalia.com>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770064}
70 files changed
tree: aea7e15575c629554eb2b65c228797ddf9c7e4dd
  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.