Implement accent-color CSS property

The accent-color CSS property lets the page specify a color to be used
in form controls instead of the builtin colors.

This patch does not change focus ring colors or text selection colors as
mentioned in this issue:
https://github.com/w3c/csswg-drafts/issues/5657

Spec: https://drafts.csswg.org/css-ui-4/#widget-accent
I2P: https://groups.google.com/a/chromium.org/g/blink-dev/c/q9zf-frdewo

I plan to have the particular usage of colors and contrasting reviewed
by UX and accessibility before launching this feature.

Bug: 1092093
Change-Id: Ida4586a73219b5c3347cc1385b01d02714b02abe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2681146
Commit-Queue: Joey Arhar <[email protected]>
Reviewed-by: Rune Lillesveen <[email protected]>
Reviewed-by: Dmitry Gozman <[email protected]>
Reviewed-by: Elly Fong-Jones <[email protected]>
Reviewed-by: Mason Freed <[email protected]>
Cr-Commit-Position: refs/heads/master@{#862542}
diff --git a/ui/native_theme/native_theme_base.h b/ui/native_theme/native_theme_base.h
index bb16add..a29df63 100644
--- a/ui/native_theme/native_theme_base.h
+++ b/ui/native_theme/native_theme_base.h
@@ -35,7 +35,8 @@
              State state,
              const gfx::Rect& rect,
              const ExtraParams& extra,
-             ColorScheme color_scheme) const override;
+             ColorScheme color_scheme,
+             const base::Optional<SkColor>& accent_color) const override;
 
   bool SupportsNinePatch(Part part) const override;
   gfx::Size GetNinePatchCanvasSize(Part part) const override;
@@ -125,13 +126,15 @@
                      State state,
                      const gfx::Rect& rect,
                      const ButtonExtraParams& button,
-                     ColorScheme color_scheme) const;
+                     ColorScheme color_scheme,
+                     const base::Optional<SkColor>& accent_color) const;
 
   void PaintRadio(cc::PaintCanvas* canvas,
                   State state,
                   const gfx::Rect& rect,
                   const ButtonExtraParams& button,
-                  ColorScheme color_scheme) const;
+                  ColorScheme color_scheme,
+                  const base::Optional<SkColor>& accent_color) const;
 
   void PaintButton(cc::PaintCanvas* canvas,
                    State state,
@@ -174,13 +177,15 @@
                         State state,
                         const gfx::Rect& rect,
                         const SliderExtraParams& slider,
-                        ColorScheme color_scheme) const;
+                        ColorScheme color_scheme,
+                        const base::Optional<SkColor>& accent_color) const;
 
   void PaintSliderThumb(cc::PaintCanvas* canvas,
                         State state,
                         const gfx::Rect& rect,
                         const SliderExtraParams& slider,
-                        ColorScheme color_scheme) const;
+                        ColorScheme color_scheme,
+                        const base::Optional<SkColor>& accent_color) const;
 
   virtual void PaintInnerSpinButton(
       cc::PaintCanvas* canvas,
@@ -193,7 +198,8 @@
                         State state,
                         const gfx::Rect& rect,
                         const ProgressBarExtraParams& progress_bar,
-                        ColorScheme color_scheme) const;
+                        ColorScheme color_scheme,
+                        const base::Optional<SkColor>& accent_color) const;
 
   virtual void PaintFrameTopArea(cc::PaintCanvas* canvas,
                                  State state,
@@ -274,13 +280,15 @@
 
   // Paint the common parts of the checkboxes and radio buttons.
   // border_radius specifies how rounded the corners should be.
-  SkRect PaintCheckboxRadioCommon(cc::PaintCanvas* canvas,
-                                  State state,
-                                  const gfx::Rect& rect,
-                                  const ButtonExtraParams& button,
-                                  bool is_checkbox,
-                                  const SkScalar border_radius,
-                                  ColorScheme color_scheme) const;
+  SkRect PaintCheckboxRadioCommon(
+      cc::PaintCanvas* canvas,
+      State state,
+      const gfx::Rect& rect,
+      const ButtonExtraParams& button,
+      bool is_checkbox,
+      const SkScalar border_radius,
+      ColorScheme color_scheme,
+      const base::Optional<SkColor>& accent_color) const;
 
   SkColor ControlsBackgroundColorForState(State state,
                                           ColorScheme color_scheme) const;