SkPDF: AutoTUnref<T> changes in use

    ::detach()      -> ::release()
    ::operator T*() -> ::get()

This makes all use of AutoTUnref work the same as sk_sp.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1772493002

Review URL: https://codereview.chromium.org/1772493002
diff --git a/src/doc/SkDocument_PDF.cpp b/src/doc/SkDocument_PDF.cpp
index a56de70..942e42c 100644
--- a/src/doc/SkDocument_PDF.cpp
+++ b/src/doc/SkDocument_PDF.cpp
@@ -81,12 +81,12 @@
     page->insertObject("Resources", pageDevice->createResourceDict());
     page->insertObject("MediaBox", pageDevice->copyMediaBox());
     SkAutoTUnref<SkPDFArray> annotations(new SkPDFArray);
-    pageDevice->appendAnnotations(annotations);
+    pageDevice->appendAnnotations(annotations.get());
     if (annotations->size() > 0) {
-        page->insertObject("Annots", annotations.detach());
+        page->insertObject("Annots", annotations.release());
     }
     page->insertObjRef("Contents", create_pdf_page_content(pageDevice));
-    return page.detach();
+    return page.release();
 }
 
 static void generate_page_tree(const SkTDArray<SkPDFDict*>& pages,
@@ -151,8 +151,8 @@
                 pageCount = ((pages.count() - 1) % treeCapacity) + 1;
             }
             newNode->insertInt("Count", pageCount);
-            newNode->insertObject("Kids", kids.detach());
-            nextRoundNodes.push(newNode.detach());  // Transfer reference.
+            newNode->insertObject("Kids", kids.release());
+            nextRoundNodes.push(newNode.release());  // Transfer reference.
         }
 
         curNodes = nextRoundNodes;
@@ -181,8 +181,8 @@
         SkASSERT(i == 0 ||
                  pageDevices[i - 1]->getCanon() == pageDevices[i]->getCanon());
         SkAutoTUnref<SkPDFDict> page(create_pdf_page(pageDevices[i]));
-        pageDevices[i]->appendDestinations(dests, page.get());
-        pages.push(page.detach());
+        pageDevices[i]->appendDestinations(dests.get(), page.get());
+        pages.push(page.release());
     }
 
     SkAutoTUnref<SkPDFDict> docCatalog(new SkPDFDict("Catalog"));
@@ -200,7 +200,7 @@
     // works best with reproducible outputs.
     id.reset(SkPDFMetadata::CreatePdfId(uuid, uuid));
     xmp.reset(metadata.createXMPObject(uuid, uuid));
-    docCatalog->insertObjRef("Metadata", xmp.detach());
+    docCatalog->insertObjRef("Metadata", xmp.release());
 
     // sRGB is specified by HTML, CSS, and SVG.
     SkAutoTUnref<SkPDFDict> outputIntent(new SkPDFDict("OutputIntent"));
@@ -209,10 +209,10 @@
     outputIntent->insertString("OutputConditionIdentifier",
                                "sRGB IEC61966-2.1");
     SkAutoTUnref<SkPDFArray> intentArray(new SkPDFArray);
-    intentArray->appendObject(outputIntent.detach());
+    intentArray->appendObject(outputIntent.release());
     // Don't specify OutputIntents if we are not in PDF/A mode since
     // no one has ever asked for this feature.
-    docCatalog->insertObject("OutputIntents", intentArray.detach());
+    docCatalog->insertObject("OutputIntents", intentArray.release());
 #endif
 
     SkTDArray<SkPDFDict*> pageTree;
@@ -221,7 +221,7 @@
     docCatalog->insertObjRef("Pages", SkRef(pageTreeRoot));
 
     if (dests->size() > 0) {
-        docCatalog->insertObjRef("Dests", dests.detach());
+        docCatalog->insertObjRef("Dests", dests.release());
     }
 
     // Build font subsetting info before proceeding.
@@ -229,7 +229,7 @@
     perform_font_subsetting(pageDevices, &substitutes);
 
     SkPDFObjNumMap objNumMap;
-    objNumMap.addObjectRecursively(infoDict, substitutes);
+    objNumMap.addObjectRecursively(infoDict.get(), substitutes);
     objNumMap.addObjectRecursively(docCatalog.get(), substitutes);
     size_t baseOffset = stream->bytesWritten();
     emit_pdf_header(stream);
@@ -262,7 +262,7 @@
         stream->writeText(" 00000 n \n");
     }
     emit_pdf_footer(stream, objNumMap, substitutes, docCatalog.get(), objCount,
-                    xRefFileOffset, infoDict.detach(), id.detach());
+                    xRefFileOffset, infoDict.release(), id.release());
 
     // The page tree has both child and parent pointers, so it creates a
     // reference cycle.  We must clear that cycle to properly reclaim memory.
@@ -326,7 +326,7 @@
                    SkPixelSerializer* jpegEncoder)
         : SkDocument(stream, doneProc)
         , fRasterDpi(rasterDpi) {
-        fCanon.fPixelSerializer.reset(SkSafeRef(jpegEncoder));
+        fCanon.setPixelSerializer(SkSafeRef(jpegEncoder));
     }
 
     virtual ~SkDocument_PDF() {
@@ -344,7 +344,7 @@
         SkAutoTUnref<SkPDFDevice> device(
                 SkPDFDevice::Create(pageSize, fRasterDpi, &fCanon));
         fCanvas.reset(new SkCanvas(device.get()));
-        fPageDevices.push(device.detach());
+        fPageDevices.push(device.release());
         fCanvas->clipRect(trimBox);
         fCanvas->translate(trimBox.x(), trimBox.y());
         return fCanvas.get();
diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp
index e067ed1..66124ce 100644
--- a/src/pdf/SkPDFBitmap.cpp
+++ b/src/pdf/SkPDFBitmap.cpp
@@ -387,7 +387,7 @@
     void emitObject(SkWStream*  stream,
                     const SkPDFObjNumMap& objNumMap,
                     const SkPDFSubstituteMap& subs) const override {
-        emit_image_xobject(stream, fImage, true, nullptr, objNumMap, subs);
+        emit_image_xobject(stream, fImage.get(), true, nullptr, objNumMap, subs);
     }
 
 private:
@@ -404,7 +404,7 @@
     void emitObject(SkWStream* stream,
                     const SkPDFObjNumMap& objNumMap,
                     const SkPDFSubstituteMap& subs) const override {
-        emit_image_xobject(stream, fImage, false, fSMask, objNumMap, subs);
+        emit_image_xobject(stream, fImage.get(), false, fSMask.get(), objNumMap, subs);
     }
     void addResources(SkPDFObjNumMap* catalog,
                       const SkPDFSubstituteMap& subs) const override {
@@ -472,7 +472,7 @@
                                      SkPixelSerializer* pixelSerializer) {
     SkAutoTUnref<SkData> data(image->refEncoded());
     SkJFIFInfo info;
-    if (data && SkIsJFIF(data, &info) &&
+    if (data && SkIsJFIF(data.get(), &info) &&
         (!pixelSerializer ||
          pixelSerializer->useEncodedData(data->data(), data->size()))) {
         // If there is a SkPixelSerializer, give it a chance to
@@ -484,7 +484,7 @@
             #ifdef SK_PDF_IMAGE_STATS
             gJpegImageObjects.fetch_add(1);
             #endif
-            return new PDFJpegBitmap(info.fSize, data, yuv);
+            return new PDFJpegBitmap(info.fSize, data.get(), yuv);
         }
     }
 
@@ -493,10 +493,10 @@
         SkAutoPixmapUnlock apu;
         if (as_IB(image)->getROPixels(&bm) && bm.requestLock(&apu)) {
             data.reset(pixelSerializer->encode(apu.pixmap()));
-            if (data && SkIsJFIF(data, &info)) {
+            if (data && SkIsJFIF(data.get(), &info)) {
                 bool yuv = info.fType == SkJFIFInfo::kYCbCr;
                 if (info.fSize == image->dimensions()) {  // Sanity check.
-                    return new PDFJpegBitmap(info.fSize, data, yuv);
+                    return new PDFJpegBitmap(info.fSize, data.get(), yuv);
                 }
             }
         }
diff --git a/src/pdf/SkPDFCanon.h b/src/pdf/SkPDFCanon.h
index 9ecb3a0..4c92fcb 100644
--- a/src/pdf/SkPDFCanon.h
+++ b/src/pdf/SkPDFCanon.h
@@ -81,7 +81,8 @@
 
     SkTHashMap<uint32_t, bool> fCanEmbedTypeface;
 
-    SkAutoTUnref<SkPixelSerializer> fPixelSerializer;
+    SkPixelSerializer* getPixelSerializer() const { return fPixelSerializer.get(); }
+    void setPixelSerializer(SkPixelSerializer* ps)  { fPixelSerializer.reset(ps); }
 
 private:
     struct FontRec {
@@ -116,5 +117,7 @@
 
     SkTHashMap<SkBitmapKey, const SkImage*> fBitmapToImageMap;
     SkTHashMap<uint32_t /*ImageUniqueID*/, SkPDFObject*> fPDFBitmapMap;
+
+    SkAutoTUnref<SkPixelSerializer> fPixelSerializer;
 };
 #endif  // SkPDFCanon_DEFINED
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 239b738..4feb78f 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -888,7 +888,7 @@
     border->appendInt(0);  // Horizontal corner radius.
     border->appendInt(0);  // Vertical corner radius.
     border->appendInt(0);  // Width, 0 = no border.
-    annotation->insertObject("Border", border.detach());
+    annotation->insertObject("Border", border.release());
 
     SkAutoTUnref<SkPDFArray> rect(new SkPDFArray);
     rect->reserve(4);
@@ -896,9 +896,9 @@
     rect->appendScalar(translatedRect.fTop);
     rect->appendScalar(translatedRect.fRight);
     rect->appendScalar(translatedRect.fBottom);
-    annotation->insertObject("Rect", rect.detach());
+    annotation->insertObject("Rect", rect.release());
 
-    return annotation.detach();
+    return annotation.release();
 }
 
 static SkPDFDict* create_link_to_url(const SkData* urlData, const SkRect& r) {
@@ -909,8 +909,8 @@
     SkAutoTUnref<SkPDFDict> action(new SkPDFDict("Action"));
     action->insertName("S", "URI");
     action->insertString("URI", url);
-    annotation->insertObject("A", action.detach());
-    return annotation.detach();
+    annotation->insertObject("A", action.release());
+    return annotation.release();
 }
 
 static SkPDFDict* create_link_named_dest(const SkData* nameData,
@@ -919,7 +919,7 @@
     SkString name(static_cast<const char *>(nameData->data()),
                   nameData->size() - 1);
     annotation->insertName("Dest", name);
-    return annotation.detach();
+    return annotation.release();
 }
 
 void SkPDFDevice::drawRect(const SkDraw& d,
@@ -1165,7 +1165,7 @@
         if (!autoImageUnref) {
             return;
         }
-        image = autoImageUnref;
+        image = autoImageUnref.get();
         // Since we did an extract, we need to adjust the matrix accordingly
         SkScalar dx = 0, dy = 0;
         if (srcIR.fLeft > 0) {
@@ -1533,7 +1533,7 @@
     mediaBox->appendInt(0);
     mediaBox->appendInt(fPageSize.fWidth);
     mediaBox->appendInt(fPageSize.fHeight);
-    return mediaBox.detach();
+    return mediaBox.release();
 }
 
 SkStreamAsset* SkPDFDevice::content() const {
@@ -1719,7 +1719,7 @@
         pdfDest->appendScalar(p.y());
         pdfDest->appendInt(0);  // Leave zoom unchanged
         SkString name(static_cast<const char*>(dest.nameData->data()));
-        dict->insertObject(name, pdfDest.detach());
+        dict->insertObject(name, pdfDest.release());
     }
 }
 
@@ -1855,7 +1855,7 @@
         lastContentEntry->fNext.reset(entry);
         setLastContentEntry(entry);
     }
-    newEntry.detach();
+    newEntry.release();
     return entry;
 }
 
@@ -2209,7 +2209,7 @@
         if (!autoImageUnref) {
             return;
         }
-        image = autoImageUnref;
+        image = autoImageUnref.get();
     }
     // Rasterize the bitmap using perspective in a new bitmap.
     if (origMatrix.hasPerspective()) {
@@ -2285,7 +2285,7 @@
         srcRect = nullptr;
 
         autoImageUnref.reset(surface->newImageSnapshot());
-        image = autoImageUnref;
+        image = autoImageUnref.get();
     }
 
     SkMatrix scaled;
@@ -2318,18 +2318,18 @@
         // rasterize a layer on this backend).  Fortuanely, this seems
         // to be how Chromium impements most color-filters.
         autoImageUnref.reset(color_filter(image, colorFilter));
-        image = autoImageUnref;
+        image = autoImageUnref.get();
         // TODO(halcanary): de-dupe this by caching filtered images.
         // (maybe in the resource cache?)
     }
     SkAutoTUnref<SkPDFObject> pdfimage(SkSafeRef(fCanon->findPDFBitmap(image)));
     if (!pdfimage) {
         pdfimage.reset(SkPDFCreateBitmapObject(
-                               image, fCanon->fPixelSerializer));
+                               image, fCanon->getPixelSerializer()));
         if (!pdfimage) {
             return;
         }
-        fCanon->addPDFBitmap(image->uniqueID(), pdfimage);
+        fCanon->addPDFBitmap(image->uniqueID(), pdfimage.get());
     }
     SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()),
                                 &content.entry()->fContent);
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index 5c06bcc..48899eb 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -343,7 +343,7 @@
                     appendAdvance(advanceInfo->fAdvance[j], emSize,
                                   advanceArray.get());
                 result->appendInt(advanceInfo->fStartId);
-                result->appendObject(advanceArray.detach());
+                result->appendObject(advanceArray.release());
                 break;
             }
             case SkAdvancedTypefaceMetrics::WidthRange::kRun: {
@@ -1022,8 +1022,8 @@
     SkAutoTUnref<SkPDFCIDFont> newCIDFont(
             new SkPDFCIDFont(fontInfo(), typeface(), subset));
     SkAutoTUnref<SkPDFArray> descendantFonts(new SkPDFArray());
-    descendantFonts->appendObjRef(newCIDFont.detach());
-    this->insertObject("DescendantFonts", descendantFonts.detach());
+    descendantFonts->appendObjRef(newCIDFont.release());
+    this->insertObject("DescendantFonts", descendantFonts.release());
 
     this->populateToUnicodeTable(subset);
 
@@ -1049,7 +1049,7 @@
     SkAutoTUnref<SkPDFDict> descriptor(new SkPDFDict("FontDescriptor"));
     setFontDescriptor(descriptor.get());
     if (!addCommonFontDescriptorEntries(defaultWidth)) {
-        this->insertObjRef("FontDescriptor", descriptor.detach());
+        this->insertObjRef("FontDescriptor", descriptor.release());
         return false;
     }
     SkASSERT(this->canEmbed());
@@ -1068,7 +1068,7 @@
                 if (rawStream) {
                     fontStream.reset(rawStream);
                     fontStream->insertInt("Length1", fontSize);
-                    descriptor->insertObjRef("FontFile2", fontStream.detach());
+                    descriptor->insertObjRef("FontFile2", fontStream.release());
                     break;
                 }
             }
@@ -1081,7 +1081,7 @@
             SkASSERT(fontSize > 0);
             fontStream.reset(new SkPDFSharedStream(fontData.detach()));
             fontStream->dict()->insertInt("Length1", fontSize);
-            descriptor->insertObjRef("FontFile2", fontStream.detach());
+            descriptor->insertObjRef("FontFile2", fontStream.release());
             break;
         }
         case SkAdvancedTypefaceMetrics::kCFF_Font:
@@ -1094,13 +1094,13 @@
             } else {
                 fontStream->dict()->insertName("Subtype", "CIDFontType0c");
             }
-            descriptor->insertObjRef("FontFile3", fontStream.detach());
+            descriptor->insertObjRef("FontFile3", fontStream.release());
             break;
         }
         default:
             SkASSERT(false);
     }
-    this->insertObjRef("FontDescriptor", descriptor.detach());
+    this->insertObjRef("FontDescriptor", descriptor.release());
     return true;
 }
 
@@ -1147,7 +1147,7 @@
     sysInfo->insertString("Registry", "Adobe");
     sysInfo->insertString("Ordering", "Identity");
     sysInfo->insertInt("Supplement", 0);
-    this->insertObject("CIDSystemInfo", sysInfo.detach());
+    this->insertObject("CIDSystemInfo", sysInfo.release());
 
     if (fontInfo()->fGlyphWidths.get()) {
         int16_t defaultWidth = 0;
@@ -1156,7 +1156,7 @@
                                fontInfo()->fEmSize, &appendWidth,
                                &defaultWidth));
         if (widths->size())
-            this->insertObject("W", widths.detach());
+            this->insertObject("W", widths.release());
         if (defaultWidth != 0) {
             this->insertScalar(
                     "DW",
@@ -1173,7 +1173,7 @@
                                fontInfo()->fEmSize, &appendVerticalAdvance,
                                &defaultAdvance));
         if (advances->size())
-            this->insertObject("W2", advances.detach());
+            this->insertObject("W2", advances.release());
         if (defaultAdvance.fVerticalAdvance ||
                 defaultAdvance.fOriginXDisp ||
                 defaultAdvance.fOriginYDisp) {
@@ -1225,9 +1225,9 @@
     fontStream->insertInt("Length1", header);
     fontStream->insertInt("Length2", data);
     fontStream->insertInt("Length3", trailer);
-    descriptor->insertObjRef("FontFile", fontStream.detach());
+    descriptor->insertObjRef("FontFile", fontStream.release());
 
-    this->insertObjRef("FontDescriptor", descriptor.detach());
+    this->insertObjRef("FontDescriptor", descriptor.release());
 
     return addCommonFontDescriptorEntries(defaultWidth);
 }
@@ -1276,8 +1276,8 @@
     }
 
     SkAutoTUnref<SkPDFDict> encoding(new SkPDFDict("Encoding"));
-    encoding->insertObject("Differences", encDiffs.detach());
-    this->insertObject("Encoding", encoding.detach());
+    encoding->insertObject("Differences", encDiffs.release());
+    this->insertObject("Encoding", encoding.release());
     return true;
 }
 
@@ -1307,7 +1307,7 @@
     }
     this->insertInt("FirstChar", firstChar);
     this->insertInt("LastChar", firstChar + widthArray->size() - 1);
-    this->insertObject("Widths", widthArray.detach());
+    this->insertObject("Widths", widthArray.release());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1380,15 +1380,15 @@
                                 new SkPDFStream(glyphStream.get()));
     }
 
-    encoding->insertObject("Differences", encDiffs.detach());
+    encoding->insertObject("Differences", encDiffs.release());
 
-    this->insertObject("CharProcs", charProcs.detach());
-    this->insertObject("Encoding", encoding.detach());
+    this->insertObject("CharProcs", charProcs.release());
+    this->insertObject("Encoding", encoding.release());
 
     this->insertObject("FontBBox", makeFontBBox(bbox, 1000));
     this->insertInt("FirstChar", 1);
     this->insertInt("LastChar", lastGlyphID() - firstGlyphID() + 1);
-    this->insertObject("Widths", widthArray.detach());
+    this->insertObject("Widths", widthArray.release());
     this->insertName("CIDToGIDMap", "Identity");
 
     this->populateToUnicodeTable(nullptr);
diff --git a/src/pdf/SkPDFFormXObject.cpp b/src/pdf/SkPDFFormXObject.cpp
index 09db140..c6f1f70 100644
--- a/src/pdf/SkPDFFormXObject.cpp
+++ b/src/pdf/SkPDFFormXObject.cpp
@@ -25,7 +25,7 @@
     this->setData(content.get());
 
     SkAutoTUnref<SkPDFArray> bboxArray(device->copyMediaBox());
-    this->init(nullptr, resourceDict.get(), bboxArray);
+    this->init(nullptr, resourceDict.get(), bboxArray.get());
 
     // We invert the initial transform and apply that to the xobject so that
     // it doesn't get applied twice. We can't just undo it because it's
@@ -49,7 +49,7 @@
     setData(content);
 
     SkAutoTUnref<SkPDFArray> bboxArray(SkPDFUtils::RectToArray(bbox));
-    init("DeviceRGB", resourceDict, bboxArray);
+    this->init("DeviceRGB", resourceDict, bboxArray.get());
 }
 
 /**
@@ -72,7 +72,7 @@
         group->insertName("CS", colorSpace);
     }
     group->insertBool("I", true);  // Isolated.
-    this->insertObject("Group", group.detach());
+    this->insertObject("Group", group.release());
 }
 
 SkPDFFormXObject::~SkPDFFormXObject() {}
diff --git a/src/pdf/SkPDFGraphicState.cpp b/src/pdf/SkPDFGraphicState.cpp
index 0ad1853..2bccac0 100644
--- a/src/pdf/SkPDFGraphicState.cpp
+++ b/src/pdf/SkPDFGraphicState.cpp
@@ -139,11 +139,11 @@
     SkAutoTUnref<SkData> psInvertStream(
             SkData::NewWithoutCopy(psInvert, strlen(psInvert)));
 
-    SkPDFStream* invertFunction = new SkPDFStream(psInvertStream.get());
+    SkAutoTUnref<SkPDFStream> invertFunction(new SkPDFStream(psInvertStream.get()));
     invertFunction->insertInt("FunctionType", 4);
     invertFunction->insertObject("Domain", SkRef(domainAndRange.get()));
-    invertFunction->insertObject("Range", domainAndRange.detach());
-    return invertFunction;
+    invertFunction->insertObject("Range", domainAndRange.release());
+    return invertFunction.release();
 }
 
 SK_DECLARE_STATIC_ONCE_PTR(SkPDFObject, invertFunction);
@@ -165,9 +165,9 @@
         sMaskDict->insertObjRef("TR", SkRef(invertFunction.get(create_invert_function)));
     }
 
-    SkPDFDict* result = new SkPDFDict("ExtGState");
-    result->insertObject("SMask", sMaskDict.detach());
-    return result;
+    SkAutoTUnref<SkPDFDict> result(new SkPDFDict("ExtGState"));
+    result->insertObject("SMask", sMaskDict.release());
+    return result.release();
 }
 
 static SkPDFDict* create_no_smask_graphic_state() {
diff --git a/src/pdf/SkPDFMetadata.cpp b/src/pdf/SkPDFMetadata.cpp
index 51619c6..8359786 100644
--- a/src/pdf/SkPDFMetadata.cpp
+++ b/src/pdf/SkPDFMetadata.cpp
@@ -45,7 +45,7 @@
     if (fModified) {
         dict->insertString("ModDate", pdf_date(*fModified.get()));
     }
-    return dict.detach();
+    return dict.release();
 }
 
 #ifdef SK_PDF_GENERATE_PDFA
@@ -92,7 +92,7 @@
             SkString(reinterpret_cast<const char*>(&doc), sizeof(UUID)));
     array->appendString(
             SkString(reinterpret_cast<const char*>(&instance), sizeof(UUID)));
-    return array.detach();
+    return array.release();
 }
 
 // Improvement on SkStringPrintf to allow for arbitrarily long output.
diff --git a/src/pdf/SkPDFResourceDict.cpp b/src/pdf/SkPDFResourceDict.cpp
index 2f9abca..b72e666 100644
--- a/src/pdf/SkPDFResourceDict.cpp
+++ b/src/pdf/SkPDFResourceDict.cpp
@@ -66,7 +66,7 @@
         resources->insertObjRef(SkPDFResourceDict::getResourceName(type, i),
                                 SkRef(resourceList[i]));
     }
-    dst->insertObject(get_resource_type_name(type), resources.detach());
+    dst->insertObject(get_resource_type_name(type), resources.release());
 }
 
 SkPDFDict* SkPDFResourceDict::Create(
@@ -83,19 +83,19 @@
     for (size_t i = 0; i < SK_ARRAY_COUNT(kProcs); i++) {
         procSets->appendName(kProcs[i]);
     }
-    dict->insertObject("ProcSets", procSets.detach());
+    dict->insertObject("ProcSets", procSets.release());
 
     if (gStateResources) {
-        add_subdict(*gStateResources, kExtGState_ResourceType, dict);
+        add_subdict(*gStateResources, kExtGState_ResourceType, dict.get());
     }
     if (patternResources) {
-        add_subdict(*patternResources, kPattern_ResourceType, dict);
+        add_subdict(*patternResources, kPattern_ResourceType, dict.get());
     }
     if (xObjectResources) {
-        add_subdict(*xObjectResources, kXObject_ResourceType, dict);
+        add_subdict(*xObjectResources, kXObject_ResourceType, dict.get());
     }
     if (fontResources) {
-        add_subdict(*fontResources, kFont_ResourceType, dict);
+        add_subdict(*fontResources, kFont_ResourceType, dict.get());
     }
-    return dict.detach();
+    return dict.release();
 }
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index fe6e47c..56926f3 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -593,7 +593,7 @@
     SkAutoTDelete<SkStream> alphaStream(create_pattern_fill_content(-1, bbox));
 
     SkAutoTUnref<SkPDFDict>
-        resources(get_gradient_resource_dict(luminosityShader, nullptr));
+        resources(get_gradient_resource_dict(luminosityShader.get(), nullptr));
 
     SkAutoTUnref<SkPDFFormXObject> alphaMask(
             new SkPDFFormXObject(alphaStream.get(), bbox, resources.get()));
@@ -806,17 +806,17 @@
 
     SkAutoTUnref<SkPDFStream> function(
             make_ps_function(functionCode, domain.get()));
-    pdfShader->insertObjRef("Function", function.detach());
+    pdfShader->insertObjRef("Function", function.release());
 
-    SkPDFFunctionShader* pdfFunctionShader = new SkPDFFunctionShader(autoState->detach());
+    SkAutoTUnref<SkPDFFunctionShader> pdfFunctionShader(new SkPDFFunctionShader(autoState->detach()));
 
     pdfFunctionShader->insertInt("PatternType", 2);
     pdfFunctionShader->insertObject("Matrix",
                                     SkPDFUtils::MatrixToArray(finalMatrix));
-    pdfFunctionShader->insertObject("Shading", pdfShader.detach());
+    pdfFunctionShader->insertObject("Shading", pdfShader.release());
 
-    canon->addFunctionShader(pdfFunctionShader);
-    return pdfFunctionShader;
+    canon->addFunctionShader(pdfFunctionShader.get());
+    return pdfFunctionShader.release();
 }
 
 SkPDFImageShader* SkPDFImageShader::Create(
diff --git a/src/pdf/SkPDFTypes.h b/src/pdf/SkPDFTypes.h
index 99320b1..97c4fa1 100644
--- a/src/pdf/SkPDFTypes.h
+++ b/src/pdf/SkPDFTypes.h
@@ -318,7 +318,7 @@
 public:
     // Takes ownership of asset.
     SkPDFSharedStream(SkStreamAsset* data) : fAsset(data), fDict(new SkPDFDict) { SkASSERT(data); }
-    SkPDFDict* dict() { return fDict; }
+    SkPDFDict* dict() { return fDict.get(); }
     void emitObject(SkWStream*,
                     const SkPDFObjNumMap&,
                     const SkPDFSubstituteMap&) const override;