diff --git a/tests/FlattenableFactoryToName.cpp b/tests/FlattenableFactoryToName.cpp
index f8cb4fa..c8f4a62 100644
--- a/tests/FlattenableFactoryToName.cpp
+++ b/tests/FlattenableFactoryToName.cpp
@@ -36,7 +36,6 @@
     bm.allocN32Pixels(8, 8);
     bm.eraseColor(SK_ColorCYAN);
     SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(bm));
-    SkAutoTUnref<SkShader> shader(image->newShader(SkShader::kClamp_TileMode,
-                                                   SkShader::kClamp_TileMode));
-    test_flattenable(r, shader, "SkImage::newShader()");
+    auto shader = image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    test_flattenable(r, shader.get(), "SkImage::newShader()");
 }
diff --git a/tests/ImageNewShaderTest.cpp b/tests/ImageNewShaderTest.cpp
index 7b7d80e..0822dbd 100644
--- a/tests/ImageNewShaderTest.cpp
+++ b/tests/ImageNewShaderTest.cpp
@@ -45,9 +45,9 @@
     paintSource(sourceSurface);
 
     SkAutoTUnref<SkImage> sourceImage(sourceSurface->newImageSnapshot());
-    SkAutoTUnref<SkShader> sourceShader(sourceImage->newShader(
+    sk_sp<SkShader> sourceShader = sourceImage->makeShader(
             SkShader::kRepeat_TileMode,
-            SkShader::kRepeat_TileMode));
+            SkShader::kRepeat_TileMode);
 
     SkPaint paint;
     paint.setShader(sourceShader);
@@ -73,10 +73,10 @@
     SkMatrix matrix;
     matrix.setTranslate(SkIntToScalar(-1), SkIntToScalar(0));
 
-    SkAutoTUnref<SkShader> sourceShaderTranslated(sourceImage->newShader(
+    sk_sp<SkShader> sourceShaderTranslated = sourceImage->makeShader(
             SkShader::kRepeat_TileMode,
             SkShader::kRepeat_TileMode,
-            &matrix));
+            &matrix);
 
     destinationCanvas->clear(SK_ColorTRANSPARENT);
 
diff --git a/tests/SkColor4fTest.cpp b/tests/SkColor4fTest.cpp
index ec40000..62eed21 100644
--- a/tests/SkColor4fTest.cpp
+++ b/tests/SkColor4fTest.cpp
@@ -98,9 +98,9 @@
     return SkColorFilter::CreateComposeFilter(cf0, cf1);
 }
 
-static SkShader* make_color_sh() { return SkShader::CreateColorShader(0xFFBB8855); }
+static sk_sp<SkShader> make_color_sh() { return SkShader::MakeColorShader(0xFFBB8855); }
 
-static SkShader* make_image_sh() {
+static sk_sp<SkShader> make_image_sh() {
     const SkImageInfo info = SkImageInfo::MakeN32Premul(2, 2);
     const SkPMColor pixels[] {
         SkPackARGB32(0xFF, 0xBB, 0x88, 0x55),
@@ -109,10 +109,10 @@
         SkPackARGB32(0xFF, 0xBB, 0x88, 0x55),
     };
     SkAutoTUnref<SkImage> image(SkImage::NewRasterCopy(info, pixels, sizeof(SkPMColor) * 2));
-    return image->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    return image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
 }
 
-static SkShader* make_grad_sh() {
+static sk_sp<SkShader> make_grad_sh() {
 #if 0
     const SkPoint pts[] {{ 0, 0 }, { 100, 100 }};
     const SkColor colors[] { SK_ColorRED, SK_ColorBLUE };
@@ -123,10 +123,10 @@
 #endif
 }
 
-static SkShader* make_cf_sh() {
+static sk_sp<SkShader> make_cf_sh() {
     SkAutoTUnref<SkColorFilter> filter(make_mx_cf());
-    SkAutoTUnref<SkShader> shader(make_color_sh());
-    return shader->newWithColorFilter(filter);
+    sk_sp<SkShader> shader(make_color_sh());
+    return sk_sp<SkShader>(shader->newWithColorFilter(filter));
 }
 
 static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count,
@@ -143,9 +143,9 @@
 
 DEF_TEST(Color4f_shader, reporter) {
     struct {
-        SkShader* (*fFact)();
-        bool      fSupports4f;
-        float     fTolerance;
+        sk_sp<SkShader> (*fFact)();
+        bool            fSupports4f;
+        float           fTolerance;
     } recs[] = {
         { make_color_sh, true,  1.0f/255   },
         // PMColor 4f gradients are interpolated in 255-multiplied values, so we need a
@@ -158,7 +158,7 @@
     SkPaint paint;
     for (const auto& rec : recs) {
         uint32_t storage[300];
-        paint.setShader(rec.fFact())->unref();
+        paint.setShader(rec.fFact());
         // Encourage 4f context selection. At some point we may need
         // to instantiate two separate contexts for optimal 4b/4f selection.
         const SkShader::ContextRec contextRec(paint, SkMatrix::I(), nullptr,
