SkPDF Create working move constructor for inner classes

BUG=chromium:592330,chromium:592702

Review URL: https://codereview.chromium.org/1774633002
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 4feb78f..7a69c63 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -1416,15 +1416,15 @@
     SkScalar scalarY = SkIntToScalar(y);
     for (const RectWithData& l : pdfDevice->fLinkToURLs) {
         SkRect r = l.rect.makeOffset(scalarX, scalarY);
-        fLinkToURLs.emplace_back(r, l.data);
+        fLinkToURLs.emplace_back(r, l.data.get());
     }
     for (const RectWithData& l : pdfDevice->fLinkToDestinations) {
         SkRect r = l.rect.makeOffset(scalarX, scalarY);
-        fLinkToDestinations.emplace_back(r, l.data);
+        fLinkToDestinations.emplace_back(r, l.data.get());
     }
     for (const NamedDestination& d : pdfDevice->fNamedDestinations) {
         SkPoint p = d.point + SkPoint::Make(scalarX, scalarY);
-        fNamedDestinations.emplace_back(d.nameData, p);
+        fNamedDestinations.emplace_back(d.nameData.get(), p);
     }
 
     if (pdfDevice->isContentEmpty()) {
@@ -1699,12 +1699,13 @@
     for (const RectWithData& rectWithURL : fLinkToURLs) {
         SkRect r;
         fInitialTransform.mapRect(&r, rectWithURL.rect);
-        array->appendObject(create_link_to_url(rectWithURL.data, r));
+        array->appendObject(create_link_to_url(rectWithURL.data.get(), r));
     }
     for (const RectWithData& linkToDestination : fLinkToDestinations) {
         SkRect r;
         fInitialTransform.mapRect(&r, linkToDestination.rect);
-        array->appendObject(create_link_named_dest(linkToDestination.data, r));
+        array->appendObject(
+                create_link_named_dest(linkToDestination.data.get(), r));
     }
 }
 
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index d38f282..310807d 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -202,18 +202,30 @@
 private:
     struct RectWithData {
         SkRect rect;
-        SkData* data;
+        sk_sp<SkData> data;
         RectWithData(const SkRect& rect, SkData* data)
             : rect(rect), data(SkRef(data)) {}
-        ~RectWithData() { data->unref(); }
+        RectWithData(RectWithData&& other)
+            : rect(other.rect), data(std::move(other.data)) {}
+        RectWithData& operator=(RectWithData&& other) {
+            rect = other.rect;
+            data = std::move(other.data);
+            return *this;
+        }
     };
 
     struct NamedDestination {
-        SkData* nameData;
+        sk_sp<SkData> nameData;
         SkPoint point;
         NamedDestination(SkData* nameData, const SkPoint& point)
             : nameData(SkRef(nameData)), point(point) {}
-        ~NamedDestination() { nameData->unref(); }
+        NamedDestination(NamedDestination&& other)
+            : nameData(std::move(other.nameData)), point(other.point) {}
+        NamedDestination& operator=(NamedDestination&& other) {
+            nameData = std::move(other.nameData);
+            point = other.point;
+            return *this;
+        }
     };
 
     // TODO(vandebo): push most of SkPDFDevice's state into a core object in