Fix single color stop with longer hue makes DrawRectOp failed to Deserialize

After crrev.com/c/6197018, The single stop case it valid, it was assumed
that colors should have at least two. This CL is a continuation on
crrev.com/c/6275826, details see in that CL. Basically this CL fixes
single stop with longer hue interpolation will makes content disappear
silently and only logs `RasterCHROMIUM: serialization failure` without
crash.

Bug: 344620213
Change-Id: I0015c815ea4a11b53be877dbdb6a9e10ef614bea
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6293745
Auto-Submit: Jason Leo <m.jason.liu@gmail.com>
Commit-Queue: Aaron Krajeski <aaronhk@chromium.org>
Reviewed-by: Aaron Krajeski <aaronhk@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1424477}
diff --git a/cc/paint/paint_shader.cc b/cc/paint/paint_shader.cc
index cdff3bc..4998d43 100644
--- a/cc/paint/paint_shader.cc
+++ b/cc/paint/paint_shader.cc
@@ -677,7 +677,7 @@
     case Type::kLinearGradient:
     case Type::kRadialGradient:
     case Type::kTwoPointConicalGradient:
-      return colors_.size() >= 2 &&
+      return colors_.size() >= 1 &&
              (positions_.empty() || positions_.size() == colors_.size());
     case Type::kImage:
       // We may not be able to decode the image, in which case it would be
diff --git a/cc/paint/paint_shader_unittest.cc b/cc/paint/paint_shader_unittest.cc
index 74d4039..fec796f 100644
--- a/cc/paint/paint_shader_unittest.cc
+++ b/cc/paint/paint_shader_unittest.cc
@@ -13,6 +13,7 @@
 #include "cc/test/test_skcanvas.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "third_party/skia/include/core/SkMatrix.h"
@@ -129,4 +130,18 @@
   EXPECT_EQ(image_provider.draw_image().scale().height(), 0.25f);
 }
 
+TEST(PaintShaderTest, GradientSingleStopValidTest) {
+  SkPoint points[] = {
+    SkPoint::Make(0, 0),
+    SkPoint::Make(100, 100)
+  };
+  SkColor4f colors[] = {
+      SkColor4f::FromColor(SK_ColorGREEN),
+  };
+  SkScalar positions[] = {0.0f};
+  auto shader = PaintShader::MakeLinearGradient(points, colors, positions, 1,
+                                                SkTileMode::kClamp);
+  EXPECT_TRUE(shader->IsValid());
+}
+
 }  // namespace cc