Convert gfx::ImageSkia constructors to use std::unique_ptr.
For now, leave the legacy constructors so that legacy usage can be
incrementally converted.
Bug: 736629
Change-Id: I858e0ac84b4231edcb7997e7bf5794b6ca0d55fc
Reviewed-on: https://chromium-review.googlesource.com/547695
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#482433}diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc
index 48c858e7..26756f4e 100644
--- a/ui/gfx/image/image_skia.cc
+++ b/ui/gfx/image/image_skia.cc
@@ -80,8 +80,9 @@
 // read-only ImageSkiaStorage'.
 class ImageSkiaStorage : public base::RefCountedThreadSafe<ImageSkiaStorage> {
  public:
-  ImageSkiaStorage(ImageSkiaSource* source, const gfx::Size& size);
-  ImageSkiaStorage(ImageSkiaSource* source, float scale);
+  ImageSkiaStorage(std::unique_ptr<ImageSkiaSource> source,
+                   const gfx::Size& size);
+  ImageSkiaStorage(std::unique_ptr<ImageSkiaSource> source, float scale);
 
   bool has_source() const { return source_ != nullptr; }
   std::vector<gfx::ImageSkiaRep>& image_reps() { return image_reps_; }
@@ -144,12 +145,14 @@
   DISALLOW_COPY_AND_ASSIGN(ImageSkiaStorage);
 };
 
-ImageSkiaStorage::ImageSkiaStorage(ImageSkiaSource* source,
+ImageSkiaStorage::ImageSkiaStorage(std::unique_ptr<ImageSkiaSource> source,
                                    const gfx::Size& size)
-    : source_(source), size_(size), read_only_(false) {}
+    : source_(std::move(source)), size_(size), read_only_(false) {}
 
-ImageSkiaStorage::ImageSkiaStorage(ImageSkiaSource* source, float scale)
-    : source_(source), read_only_(false) {
+ImageSkiaStorage::ImageSkiaStorage(std::unique_ptr<ImageSkiaSource> source,
+                                   float scale)
+    : source_(std::move(source)), read_only_(false) {
+  DCHECK(source_);
   ImageSkia::ImageSkiaReps::iterator it = FindRepresentation(scale, true);
   if (it == image_reps_.end() || it->is_null())
     source_.reset();
@@ -274,24 +277,33 @@
 
 }  // internal
 
-ImageSkia::ImageSkia() : storage_(NULL) {
+ImageSkia::ImageSkia() {}
+
+ImageSkia::ImageSkia(std::unique_ptr<ImageSkiaSource> source,
+                     const gfx::Size& size)
+    : storage_(
+          base::MakeRefCounted<internal::ImageSkiaStorage>(std::move(source),
+                                                           size)) {
+  DCHECK(storage_->has_source());
+  // No other thread has reference to this, so it's safe to detach the sequence.
+  DetachStorageFromSequence();
+}
+
+ImageSkia::ImageSkia(std::unique_ptr<ImageSkiaSource> source, float scale)
+    : storage_(
+          base::MakeRefCounted<internal::ImageSkiaStorage>(std::move(source),
+                                                           scale)) {
+  if (!storage_->has_source())
+    storage_ = nullptr;
+  // No other thread has reference to this, so it's safe to detach the sequence.
+  DetachStorageFromSequence();
 }
 
 ImageSkia::ImageSkia(ImageSkiaSource* source, const gfx::Size& size)
-    : storage_(new internal::ImageSkiaStorage(source, size)) {
-  DCHECK(source);
-  // No other thread has reference to this, so it's safe to detach the sequence.
-  DetachStorageFromSequence();
-}
+    : ImageSkia(base::WrapUnique(source), size) {}
 
 ImageSkia::ImageSkia(ImageSkiaSource* source, float scale)
-    : storage_(new internal::ImageSkiaStorage(source, scale)) {
-  DCHECK(source);
-  if (!storage_->has_source())
-    storage_ = NULL;
-  // No other thread has reference to this, so it's safe to detach the sequence.
-  DetachStorageFromSequence();
-}
+    : ImageSkia(base::WrapUnique(source), scale) {}
 
 ImageSkia::ImageSkia(const ImageSkiaRep& image_rep) {
   Init(image_rep);
diff --git a/ui/gfx/image/image_skia.h b/ui/gfx/image/image_skia.h
index 3e517c6..855208c 100644
--- a/ui/gfx/image/image_skia.h
+++ b/ui/gfx/image/image_skia.h
@@ -47,12 +47,15 @@
 
   // Creates an instance that will use the |source| to get the image
   // for scale factors. |size| specifes the size of the image in DIP.
-  // ImageSkia owns |source|.
-  ImageSkia(ImageSkiaSource* source, const gfx::Size& size);
+  ImageSkia(std::unique_ptr<ImageSkiaSource> source, const gfx::Size& size);
 
   // Creates an instance that uses the |source|. The constructor loads the image
-  // at |scale| and uses its dimensions to calculate the size in DIP. ImageSkia
-  // owns |source|.
+  // at |scale| and uses its dimensions to calculate the size in DIP.
+  ImageSkia(std::unique_ptr<ImageSkiaSource> source, float scale);
+
+  // Deprecated versions of the above constructors. ImageSkia takes ownership of
+  // |source|.
+  ImageSkia(ImageSkiaSource* source, const gfx::Size& size);
   ImageSkia(ImageSkiaSource* source, float scale);
 
   explicit ImageSkia(const gfx::ImageSkiaRep& image_rep);