Update CPDF_IndirectObjectHolder APIs for unique objects.

Doing so highlights a few places where ownership is dubious.
Add convenience functions to return an unowned reference to
a newly-created indirect object.

Review-Url: https://codereview.chromium.org/2419173002
diff --git a/fpdfsdk/fpdfppo.cpp b/fpdfsdk/fpdfppo.cpp
index 8a46ea4..023c41a 100644
--- a/fpdfsdk/fpdfppo.cpp
+++ b/fpdfsdk/fpdfppo.cpp
@@ -70,9 +70,9 @@
   CPDF_Dictionary* pNewPages =
       pElement ? ToDictionary(pElement->GetDirect()) : nullptr;
   if (!pNewPages) {
-    pNewPages = new CPDF_Dictionary(pDestPDFDoc->GetByteStringPool());
-    pNewRoot->SetReferenceFor("Pages", pDestPDFDoc,
-                              pDestPDFDoc->AddIndirectObject(pNewPages));
+    pNewPages =
+        pDestPDFDoc->AddIndirectDictionary(pDestPDFDoc->GetByteStringPool());
+    pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, pNewPages);
   }
 
   CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", "");
@@ -83,7 +83,7 @@
   if (!pNewPages->GetArrayFor("Kids")) {
     pNewPages->SetIntegerFor("Count", 0);
     pNewPages->SetReferenceFor("Kids", pDestPDFDoc,
-                               pDestPDFDoc->AddIndirectObject(new CPDF_Array));
+                               pDestPDFDoc->AddIndirectArray());
   }
 
   return TRUE;
@@ -277,7 +277,7 @@
   if (!pDirect)
     return 0;
 
-  CPDF_Object* pClone = pDirect->Clone();
+  UniqueObject pClone(pDirect->Clone());
   if (!pClone)
     return 0;
 
@@ -294,10 +294,11 @@
       }
     }
   }
-  dwNewObjNum = pDoc->AddIndirectObject(pClone);
+  CPDF_Object* pUnowned = pDoc->AddIndirectObject(std::move(pClone));
+  dwNewObjNum = pUnowned->GetObjNum();
   (*pObjNumberMap)[dwObjnum] = dwNewObjNum;
-  if (!UpdateReference(pClone, pDoc, pObjNumberMap)) {
-    pClone->Release();
+  if (!UpdateReference(pUnowned, pDoc, pObjNumberMap)) {
+    pDoc->DeleteIndirectObject(dwNewObjNum);
     return 0;
   }
   return dwNewObjNum;