Revert "Paint text decoration shadows using a DropShadowPaintFilter"

This reverts commit ae39a61beac6ee25c2bf3bbfac66b663f97bf9e4.

Reason for revert: Related tests started failing on fuchsia: https://ci.chromium.org/p/chromium/builders/ci/fuchsia-x64-rel/735

Original change's description:
> Paint text decoration shadows using a DropShadowPaintFilter
>
> When applying a text-decoration with text-decoration-skip-ink enabled,
> along with a text-shadow,
> to text containing descenders, like lowercase g,
> the text decoration shadow still gets rendered around
> the skipped text decoration line
> resulting in an unsightly White-Out like effect.
>
> The reason this is observed is because the current implementation
> uses a SkDrawLooper to draw the shadow,
> which applies the shadow to the whole line
> including the clipped out region
> where the text decoration would intercept a glyph,
> rendering shadows above and below the clipped out region.
>
> The proposed fix is to paint the text decoration shadows using
> a DropShadowPaintFilter via GraphicsContext::BeginLayer
> instead of using a SkDrawLooper.
>
> R=​pdr
>
> Fixed: 1081616
> Bug: 671438
> Change-Id: I9da5dc2a7e4b5ace9212ebd65a931da0ebff5baa
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3988926
> Commit-Queue: Traian Captan <tcaptan@chromium.org>
> Reviewed-by: Philip Rogers <pdr@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1066011}

Bug: 671438
Change-Id: Ie89244230b48bcc64d544ab00210bd3b882ddf78
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3995218
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Kevin McNee <mcnee@chromium.org>
Owners-Override: Kevin McNee <mcnee@google.com>
Cr-Commit-Position: refs/heads/main@{#1066134}
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
index 14bc17da..a111d7e 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
@@ -105,10 +105,10 @@
 
   const NGTextDecorationOffset decoration_offset(style_, style_);
 
-  // Paint underline and overline text decorations
-  PaintUnderOrOverLineDecorations(NGTextFragmentPaintInfo{}, decoration_offset,
-                                  decoration_info, ~TextDecorationLine::kNone,
-                                  paint_info, text_style);
+  // Paint text decorations except line through
+  PaintDecorationsExceptLineThrough(
+      NGTextFragmentPaintInfo{}, decoration_offset, decoration_info,
+      ~TextDecorationLine::kNone, paint_info, text_style);
 
   // Paint line through if needed
   PaintDecorationsOnlyLineThrough(decoration_info, paint_info, text_style);
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
index 897d917..61a51b5 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
@@ -285,7 +285,7 @@
                                          decoration_info, lines_to_paint,
                                          paint_info, text_style);
   } else {
-    NGTextPainterBase::PaintUnderOrOverLineDecorations(
+    NGTextPainterBase::PaintDecorationsExceptLineThrough(
         fragment_paint_info, decoration_offset, decoration_info, lines_to_paint,
         paint_info, text_style, nullptr);
   }
@@ -508,7 +508,7 @@
       if (SetupPaintForSvgText(state, graphics_context_, style_to_paint,
                                SvgPaintMode::kTextDecoration, *resource_mode,
                                flags)) {
-        NGTextPainterBase::PaintUnderOrOverLineDecorations(
+        NGTextPainterBase::PaintDecorationsExceptLineThrough(
             fragment_paint_info, decoration_offset, decoration_info,
             lines_to_paint, paint_info, text_style, &flags);
       }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc
index afecde7..2066804 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc
@@ -22,12 +22,12 @@
 
 namespace blink {
 
-// We have two functions to paint text decorations, because we should paint
+// We have two functions to paint text decoations, because we should paint
 // text and decorations in following order:
-//   1. Paint underline or overline text decorations
+//   1. Paint text decorations except line through
 //   2. Paint text
-//   3. Paint line through
-void NGTextPainterBase::PaintUnderOrOverLineDecorations(
+//   3. Paint line throguh
+void NGTextPainterBase::PaintDecorationsExceptLineThrough(
     const NGTextFragmentPaintInfo& fragment_paint_info,
     const TextDecorationOffsetBase& decoration_offset,
     TextDecorationInfo& decoration_info,
@@ -44,72 +44,8 @@
 
   GraphicsContext& context = paint_info.context;
   GraphicsContextStateSaver state_saver(context);
+  UpdateGraphicsContext(context, text_style, state_saver);
 
-  // Updating Graphics Context for text only (kTextProperOnly),
-  // instead of the default text and shadows (kBothShadowsAndTextProper),
-  // because shadows will be painted by
-  // NGTextPainterBase::PaintUnderOrOverLineDecorationShadows.
-  UpdateGraphicsContext(context, text_style, state_saver,
-                        ShadowMode::kTextProperOnly);
-
-  PaintUnderOrOverLineDecorationShadows(fragment_paint_info, decoration_offset,
-                                        decoration_info, lines_to_paint, flags,
-                                        text_style, context);
-
-  PaintUnderOrOverLineDecorations(fragment_paint_info, decoration_offset,
-                                  decoration_info, lines_to_paint, flags,
-                                  context);
-}
-
-void NGTextPainterBase::PaintUnderOrOverLineDecorationShadows(
-    const NGTextFragmentPaintInfo& fragment_paint_info,
-    const TextDecorationOffsetBase& decoration_offset,
-    TextDecorationInfo& decoration_info,
-    TextDecorationLine lines_to_paint,
-    const cc::PaintFlags* flags,
-    const TextPaintStyle& text_style,
-    GraphicsContext& context) {
-  if (text_style.shadow == nullptr)
-    return;
-
-  const ShadowList* shadow_list = text_style.shadow.get();
-  if (shadow_list == nullptr)
-    return;
-
-  for (const auto& shadow : shadow_list->Shadows()) {
-    const Color& color = shadow.GetColor().Resolve(text_style.current_color,
-                                                   text_style.color_scheme);
-    // Detect when there's no effective shadow.
-    if (color.IsTransparent())
-      continue;
-
-    const gfx::Vector2dF& offset = shadow.Location().OffsetFromOrigin();
-
-    float blur = shadow.Blur();
-    DCHECK_GE(blur, 0);
-    const auto sigma = BlurRadiusToStdDev(blur);
-
-    context.BeginLayer(
-        1.0f, SkBlendMode::kSrcOver, nullptr, kColorFilterNone,
-        sk_make_sp<DropShadowPaintFilter>(
-            offset.x(), offset.y(), sigma, sigma, color.toSkColor4f(),
-            DropShadowPaintFilter::ShadowMode::kDrawShadowOnly, nullptr));
-
-    PaintUnderOrOverLineDecorations(fragment_paint_info, decoration_offset,
-                                    decoration_info, lines_to_paint, flags,
-                                    context);
-
-    context.EndLayer();
-  }
-}
-
-void NGTextPainterBase::PaintUnderOrOverLineDecorations(
-    const NGTextFragmentPaintInfo& fragment_paint_info,
-    const TextDecorationOffsetBase& decoration_offset,
-    TextDecorationInfo& decoration_info,
-    TextDecorationLine lines_to_paint,
-    const cc::PaintFlags* flags,
-    GraphicsContext& context) {
   for (wtf_size_t i = 0; i < decoration_info.AppliedDecorationCount(); i++) {
     decoration_info.SetDecorationIndex(i);
     context.SetStrokeThickness(decoration_info.ResolvedThickness());
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
index 5208b3e..3c13cb1 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
@@ -45,12 +45,12 @@
   ~NGTextPainterBase() = default;
 
  protected:
-  // We have two functions to paint text decorations, because we should paint
+  // We have two functions to paint text decoations, because we should paint
   // text and decorations in following order:
-  //   1. Paint underline or overline text decorations
+  //   1. Paint text decorations except line through
   //   2. Paint text
-  //   3. Paint line through text decoration
-  void PaintUnderOrOverLineDecorations(
+  //   3. Paint line through
+  void PaintDecorationsExceptLineThrough(
       const NGTextFragmentPaintInfo& fragment_paint_info,
       const TextDecorationOffsetBase& decoration_offset,
       TextDecorationInfo& decoration_info,
@@ -59,12 +59,6 @@
       const TextPaintStyle& text_style,
       const cc::PaintFlags* flags = nullptr);
 
-  virtual void ClipDecorationsStripe(const NGTextFragmentPaintInfo&,
-                                     float upper,
-                                     float stripe_width,
-                                     float dilation) = 0;
-
- private:
   void PaintDecorationUnderOrOverLine(
       const NGTextFragmentPaintInfo& fragment_paint_info,
       GraphicsContext& context,
@@ -72,22 +66,10 @@
       TextDecorationLine line,
       const cc::PaintFlags* flags = nullptr);
 
-  void PaintUnderOrOverLineDecorationShadows(
-      const NGTextFragmentPaintInfo& fragment_paint_info,
-      const TextDecorationOffsetBase& decoration_offset,
-      TextDecorationInfo& decoration_info,
-      TextDecorationLine lines_to_paint,
-      const cc::PaintFlags* flags,
-      const TextPaintStyle& text_style,
-      GraphicsContext& context);
-
-  void PaintUnderOrOverLineDecorations(
-      const NGTextFragmentPaintInfo& fragment_paint_info,
-      const TextDecorationOffsetBase& decoration_offset,
-      TextDecorationInfo& decoration_info,
-      TextDecorationLine lines_to_paint,
-      const cc::PaintFlags* flags,
-      GraphicsContext& context);
+  virtual void ClipDecorationsStripe(const NGTextFragmentPaintInfo&,
+                                     float upper,
+                                     float stripe_width,
+                                     float dilation) = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/color.h b/third_party/blink/renderer/platform/graphics/color.h
index 6bc8bf16..00978ee6 100644
--- a/third_party/blink/renderer/platform/graphics/color.h
+++ b/third_party/blink/renderer/platform/graphics/color.h
@@ -252,12 +252,9 @@
   bool SetFromString(const String&);
   bool SetNamedColor(const String&);
 
-  // Returns true if the color is not opaque.
+  // Return true if the color is not opaque.
   bool HasAlpha() const { return Alpha() < 255; }
 
-  // Returns true if the color is transparent.
-  bool IsTransparent() const { return Alpha() == 0; }
-
   // Access the color as though it were created using rgba syntax. This will
   // clamp all colors to an 8-bit sRGB representation. All callers of these
   // functions should be audited. The function Rgb(), despite the name, does
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index 98c30647..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/stroking-decorations-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/stroking-decorations-expected.png
deleted file mode 100644
index 1ce47d45..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/text-antialias/stroking-decorations-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/writing-mode/english-lr-text-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/writing-mode/english-lr-text-expected.png
deleted file mode 100644
index 5a864bc..0000000
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/writing-mode/english-lr-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/writing-mode/english-lr-text-expected.png b/third_party/blink/web_tests/platform/linux/fast/writing-mode/english-lr-text-expected.png
index 963778b..5a864bc 100644
--- a/third_party/blink/web_tests/platform/linux/fast/writing-mode/english-lr-text-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/writing-mode/english-lr-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/ietestcenter/css3/text/textshadow-002-expected.png b/third_party/blink/web_tests/platform/linux/ietestcenter/css3/text/textshadow-002-expected.png
index ce9e65e..cbbf441 100644
--- a/third_party/blink/web_tests/platform/linux/ietestcenter/css3/text/textshadow-002-expected.png
+++ b/third_party/blink/web_tests/platform/linux/ietestcenter/css3/text/textshadow-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/shadow-multiple-expected.png
index cabdfa8f..98c30647 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/shadow-multiple-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/shadow-multiple-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/stroking-decorations-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/stroking-decorations-expected.png
index ed35105..1ce47d45 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/stroking-decorations-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/stroking-decorations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/stroking-decorations-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/stroking-decorations-expected.png
index 8a20ce0..ff1e445e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/stroking-decorations-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/stroking-decorations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index 575d2b5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index 575d2b5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/writing-mode/english-lr-text-expected.png b/third_party/blink/web_tests/platform/mac/fast/writing-mode/english-lr-text-expected.png
index 2035c2b..2c1a028 100644
--- a/third_party/blink/web_tests/platform/mac/fast/writing-mode/english-lr-text-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/writing-mode/english-lr-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png b/third_party/blink/web_tests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png
index f5d1059..44ec0ed 100644
--- a/third_party/blink/web_tests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png
+++ b/third_party/blink/web_tests/platform/mac/ietestcenter/css3/text/textshadow-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/shadow-multiple-expected.png
index 4876e755b3..44789bb7 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/shadow-multiple-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/shadow-multiple-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/stroking-decorations-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/stroking-decorations-expected.png
index d6589be3..70c851f6 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/stroking-decorations-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/stroking-decorations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/writing-mode/english-lr-text-expected.png b/third_party/blink/web_tests/platform/win/fast/writing-mode/english-lr-text-expected.png
index 53ed456..cf160afd 100644
--- a/third_party/blink/web_tests/platform/win/fast/writing-mode/english-lr-text-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/writing-mode/english-lr-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/ietestcenter/css3/text/textshadow-002-expected.png b/third_party/blink/web_tests/platform/win/ietestcenter/css3/text/textshadow-002-expected.png
index 57ddf1d..f8aa958 100644
--- a/third_party/blink/web_tests/platform/win/ietestcenter/css3/text/textshadow-002-expected.png
+++ b/third_party/blink/web_tests/platform/win/ietestcenter/css3/text/textshadow-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/shadow-multiple-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/shadow-multiple-expected.png
index fa2baf5..16410b0 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/shadow-multiple-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/shadow-multiple-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/stroking-decorations-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/stroking-decorations-expected.png
index 85afa7d..a60df6b1 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/stroking-decorations-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/stroking-decorations-expected.png
Binary files differ