have resources return unique_ptr for stream

Bug: skia:
Change-Id: I649f4435d06704a5a581a481fe3c46b6ec677baf
Reviewed-on: https://skia-review.googlesource.com/26041
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/bench/PDFBench.cpp b/bench/PDFBench.cpp
index 5786f5b..9965941 100644
--- a/bench/PDFBench.cpp
+++ b/bench/PDFBench.cpp
@@ -147,7 +147,7 @@
         return backend == kNonRendering_Backend;
     }
     void onDelayedSetup() override {
-        fAsset.reset(GetResourceAsStream("pdf_command_stream.txt"));
+        fAsset = GetResourceAsStream("pdf_command_stream.txt");
     }
     void onDraw(int loops, SkCanvas*) override {
         SkASSERT(fAsset);
diff --git a/gm/bitmapimage.cpp b/gm/bitmapimage.cpp
index be17af8..9832041 100644
--- a/gm/bitmapimage.cpp
+++ b/gm/bitmapimage.cpp
@@ -36,7 +36,7 @@
         }
 
         // Create matching bitmap.
-        std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(GetResourceAsStream(path)));
+        std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(GetResourceAsStream(path).release()));
         SkBitmap bitmap;
         bitmap.allocPixels(codec->getInfo());
         codec->getPixels(codec->getInfo(), bitmap.getPixels(), bitmap.rowBytes());
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index ac4afd1..12e3f2c 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -1001,7 +1001,7 @@
 }
 
 static void check_color_xform(skiatest::Reporter* r, const char* path) {
-    std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(GetResourceAsStream(path)));
+    std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(GetResourceAsStream(path).release()));
 
     SkAndroidCodec::AndroidOptions opts;
     opts.fSampleSize = 3;
@@ -1091,12 +1091,12 @@
     }
 
     path = "grayscale.jpg";
-    stream.reset(GetResourceAsStream(path));
+    stream = GetResourceAsStream(path);
     codec.reset(SkCodec::NewFromStream(stream.release()));
     check_round_trip(r, codec.get(), codec->getInfo());
 
     path = "yellow_rose.png";
-    stream.reset(GetResourceAsStream(path));
+    stream = GetResourceAsStream(path);
     codec.reset(SkCodec::NewFromStream(stream.release()));
 
     SkColorType colorTypesWithAlpha[] = {
@@ -1116,7 +1116,7 @@
     }
 
     path = "index8.png";
-    stream.reset(GetResourceAsStream(path));
+    stream = GetResourceAsStream(path);
     codec.reset(SkCodec::NewFromStream(stream.release()));
 
     for (SkAlphaType alphaType : alphaTypes) {
@@ -1202,15 +1202,16 @@
 // client never calls getFrameInfo and only decodes frame 0.
 DEF_TEST(Codec_skipFullParse, r) {
     auto path = "test640x479.gif";
-    SkStream* stream(GetResourceAsStream(path));
-    if (!stream) {
+    auto streamObj = GetResourceAsStream(path);
+    if (!streamObj) {
         return;
     }
+    SkStream* stream = streamObj.get();
 
     // Note that we cheat and hold on to the stream pointer, but SkCodec will
     // take ownership. We will not refer to the stream after the SkCodec
     // deletes it.
-    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(streamObj.release()));
     if (!codec) {
         ERRORF(r, "Failed to create codec for %s", path);
         return;
@@ -1235,12 +1236,12 @@
 // Only rewinds up to a limit.
 class LimitedRewindingStream : public SkStream {
 public:
-    static SkStream* Make(const char path[], size_t limit) {
-        SkStream* stream = GetResourceAsStream(path);
+    static std::unique_ptr<SkStream> Make(const char path[], size_t limit) {
+        auto stream = GetResourceAsStream(path);
         if (!stream) {
             return nullptr;
         }
-        return new LimitedRewindingStream(stream, limit);
+        return std::unique_ptr<SkStream>(new LimitedRewindingStream(std::move(stream), limit));
     }
 
     size_t read(void* buffer, size_t size) override {
@@ -1267,8 +1268,8 @@
     const size_t              fLimit;
     size_t                    fPosition;
 
-    LimitedRewindingStream(SkStream* stream, size_t limit)
-        : fStream(stream)
+    LimitedRewindingStream(std::unique_ptr<SkStream> stream, size_t limit)
+        : fStream(std::move(stream))
         , fLimit(limit)
         , fPosition(0)
     {
@@ -1289,13 +1290,13 @@
             "randPixels.bmp",
             };
     for (auto file : files) {
-        SkStream* stream = LimitedRewindingStream::Make(file, 14);
+        auto stream = LimitedRewindingStream::Make(file, 14);
         if (!stream) {
             SkDebugf("Missing resources (%s). Set --resourcePath.\n", file);
             return;
         }
 
-        std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+        std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
         if (!codec) {
             ERRORF(r, "Failed to create codec for %s,", file);
             continue;
@@ -1380,12 +1381,12 @@
 
 static void test_invalid_images(skiatest::Reporter* r, const char* path,
                                 SkCodec::Result expectedResult) {
-    auto* stream = GetResourceAsStream(path);
+    auto stream = GetResourceAsStream(path);
     if (!stream) {
         return;
     }
 
-    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
     REPORTER_ASSERT(r, codec);
 
     test_info(r, codec.get(), codec->getInfo().makeColorType(kN32_SkColorType), expectedResult,
@@ -1423,12 +1424,12 @@
 DEF_TEST(Codec_InvalidAnimated, r) {
     // ASAN will complain if there is an issue.
     auto path = "invalid_images/skbug6046.gif";
-    auto* stream = GetResourceAsStream(path);
+    auto stream = GetResourceAsStream(path);
     if (!stream) {
         return;
     }
 
-    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream));
+    std::unique_ptr<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
     REPORTER_ASSERT(r, codec);
     if (!codec) {
         return;
diff --git a/tests/ExifTest.cpp b/tests/ExifTest.cpp
index 4fed2b0..f9e357d 100644
--- a/tests/ExifTest.cpp
+++ b/tests/ExifTest.cpp
@@ -21,7 +21,7 @@
     SkCodec::Origin origin = codec->getOrigin();
     REPORTER_ASSERT(r, SkCodec::kTopRight_Origin == origin);
 
-    stream.reset(GetResourceAsStream("mandrill_512_q075.jpg"));
+    stream = GetResourceAsStream("mandrill_512_q075.jpg");
     codec.reset(SkCodec::NewFromStream(stream.release()));
     REPORTER_ASSERT(r, nullptr != codec);
     origin = codec->getOrigin();
diff --git a/tools/Resources.cpp b/tools/Resources.cpp
index f93cf24..27ccef4 100644
--- a/tools/Resources.cpp
+++ b/tools/Resources.cpp
@@ -44,14 +44,14 @@
     return SkImage::MakeFromEncoded(resourceData);
 }
 
-SkStreamAsset* GetResourceAsStream(const char* resource) {
+std::unique_ptr<SkStreamAsset> GetResourceAsStream(const char* resource) {
     SkString resourcePath = GetResourcePath(resource);
     std::unique_ptr<SkFILEStream> stream(new SkFILEStream(resourcePath.c_str()));
     if (!stream->isValid()) {
         SkDebugf("Resource %s not found.\n", resource);
         return nullptr;
     }
-    return stream.release();
+    return std::move(stream);
 }
 
 sk_sp<SkData> GetResourceAsData(const char* resource) {
diff --git a/tools/Resources.h b/tools/Resources.h
index fa1ca45..01eaa3f 100644
--- a/tools/Resources.h
+++ b/tools/Resources.h
@@ -22,7 +22,7 @@
 
 bool GetResourceAsBitmap(const char* resource, SkBitmap* dst);
 sk_sp<SkImage> GetResourceAsImage(const char* resource);
-SkStreamAsset* GetResourceAsStream(const char* resource);
+std::unique_ptr<SkStreamAsset> GetResourceAsStream(const char* resource);
 sk_sp<SkData> GetResourceAsData(const char* resource);
 sk_sp<SkTypeface> MakeResourceAsTypeface(const char* resource);