return and take SkImageGenerator as unique_ptr

BUG=skia:

Change-Id: I4bc11042dd1dbf1eabd40af206027bc65acc3186
Reviewed-on: https://skia-review.googlesource.com/8444
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/include/core/SkGraphics.h b/include/core/SkGraphics.h
index d5a730d..bf8228b 100644
--- a/include/core/SkGraphics.h
+++ b/include/core/SkGraphics.h
@@ -8,7 +8,7 @@
 #ifndef SkGraphics_DEFINED
 #define SkGraphics_DEFINED
 
-#include "SkTypes.h"
+#include "SkRefCnt.h"
 
 class SkData;
 class SkImageGenerator;
@@ -157,7 +157,8 @@
      */
     static void SetTLSFontCacheLimit(size_t bytes);
 
-    typedef SkImageGenerator* (*ImageGeneratorFromEncodedFactory)(SkData*);
+    typedef std::unique_ptr<SkImageGenerator>
+                                            (*ImageGeneratorFromEncodedDataFactory)(sk_sp<SkData>);
 
     /**
      *  To instantiate images from encoded data, first looks at this runtime function-ptr. If it
@@ -166,8 +167,15 @@
      *
      *  Returns the previous factory (which could be NULL).
      */
+    static ImageGeneratorFromEncodedDataFactory
+                    SetImageGeneratorFromEncodedDataFactory(ImageGeneratorFromEncodedDataFactory);
+
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+    typedef SkImageGenerator* (*ImageGeneratorFromEncodedFactory)(SkData*);
     static ImageGeneratorFromEncodedFactory
-           SetImageGeneratorFromEncodedFactory(ImageGeneratorFromEncodedFactory);
+                            SetImageGeneratorFromEncodedFactory(ImageGeneratorFromEncodedFactory);
+#endif
+
 };
 
 class SkAutoGraphics {
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index aaafb44..444ce68 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -73,7 +73,11 @@
      *
      *  If a subset is specified, it must be contained within the generator's bounds.
      */
+    static sk_sp<SkImage> MakeFromGenerator(std::unique_ptr<SkImageGenerator>,
+                                            const SkIRect* subset = nullptr);
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
     static sk_sp<SkImage> MakeFromGenerator(SkImageGenerator*, const SkIRect* subset = nullptr);
+#endif
 
     /**
      *  Construct a new SkImage based on the specified encoded data. Returns NULL on failure,
diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h
index a8a858d..44d5943 100644
--- a/include/core/SkImageGenerator.h
+++ b/include/core/SkImageGenerator.h
@@ -146,18 +146,27 @@
      *  this returns a new ImageGenerator for it. Otherwise this returns NULL. Either way
      *  the caller is still responsible for managing their ownership of the data.
      */
-    static SkImageGenerator* NewFromEncoded(SkData*);
+    static std::unique_ptr<SkImageGenerator> MakeFromEncoded(sk_sp<SkData>);
 
     /** Return a new image generator backed by the specified picture.  If the size is empty or
      *  the picture is NULL, this returns NULL.
      *  The optional matrix and paint arguments are passed to drawPicture() at rasterization
      *  time.
      */
-    static SkImageGenerator* NewFromPicture(const SkISize&, const SkPicture*, const SkMatrix*,
-                                            const SkPaint*, SkImage::BitDepth, sk_sp<SkColorSpace>);
+    static std::unique_ptr<SkImageGenerator> MakeFromPicture(const SkISize&, sk_sp<SkPicture>,
+                                                             const SkMatrix*, const SkPaint*,
+                                                             SkImage::BitDepth,
+                                                             sk_sp<SkColorSpace>);
 
     bool tryGenerateBitmap(SkBitmap* bm, const SkImageInfo& info, SkBitmap::Allocator* allocator);
 
+#ifdef SK_SUPPORT_BARE_PTR_IMAGEGENERATOR
+    static SkImageGenerator* NewFromPicture(const SkISize& size, const SkPicture* picture,
+                                            const SkMatrix* matrix, const SkPaint* paint,
+                                            SkImage::BitDepth depth, sk_sp<SkColorSpace> cs);
+    static SkImageGenerator* NewFromEncoded(SkData* data);
+#endif
+
 protected:
     enum {
         kNeedNewImageUniqueID = 0
@@ -188,7 +197,7 @@
     // This is our default impl, which may be different on different platforms.
     // It is called from NewFromEncoded() after it has checked for any runtime factory.
     // The SkData will never be NULL, as that will have been checked by NewFromEncoded.
-    static SkImageGenerator* NewFromEncodedImpl(SkData*);
+    static std::unique_ptr<SkImageGenerator> MakeFromEncodedImpl(sk_sp<SkData>);
 };
 
 #endif  // SkImageGenerator_DEFINED