Pass retained arguments to CFX_Face::New()

Alas, callers have to copy and remain unadjusted, but it is
the same work since we move in the new code.

Bug: pdfium:1843
Change-Id: I82822099d3baaea68c36ab5e6e01a3babb7363e5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/95631
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index d838a4b..50e0bc3 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -4,12 +4,14 @@
 
 #include "core/fxge/cfx_face.h"
 
+#include <utility>
+
 #include "third_party/base/check.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
 // static
 RetainPtr<CFX_Face> CFX_Face::New(FT_Library library,
-                                  const RetainPtr<Retainable>& pDesc,
+                                  RetainPtr<Retainable> pDesc,
                                   pdfium::span<const FT_Byte> data,
                                   FT_Long face_index) {
   FXFT_FaceRec* pRec = nullptr;
@@ -18,7 +20,8 @@
                          face_index, &pRec) != 0) {
     return nullptr;
   }
-  return pdfium::WrapRetain(new CFX_Face(pRec, pDesc));
+  // Private ctor.
+  return pdfium::WrapRetain(new CFX_Face(pRec, std::move(pDesc)));
 }
 
 // static
@@ -29,11 +32,12 @@
   if (FT_Open_Face(library, args, face_index, &pRec) != 0)
     return nullptr;
 
+  // Private ctor.
   return pdfium::WrapRetain(new CFX_Face(pRec, nullptr));
 }
 
-CFX_Face::CFX_Face(FXFT_FaceRec* rec, const RetainPtr<Retainable>& pDesc)
-    : m_pRec(rec), m_pDesc(pDesc) {
+CFX_Face::CFX_Face(FXFT_FaceRec* rec, RetainPtr<Retainable> pDesc)
+    : m_pRec(rec), m_pDesc(std::move(pDesc)) {
   DCHECK(m_pRec);
 }
 
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h
index a4f527f..4ab5c78 100644
--- a/core/fxge/cfx_face.h
+++ b/core/fxge/cfx_face.h
@@ -13,7 +13,7 @@
 class CFX_Face final : public Retainable, public Observable {
  public:
   static RetainPtr<CFX_Face> New(FT_Library library,
-                                 const RetainPtr<Retainable>& pDesc,
+                                 RetainPtr<Retainable> pDesc,
                                  pdfium::span<const FT_Byte> data,
                                  FT_Long face_index);
 
@@ -26,7 +26,7 @@
   FXFT_FaceRec* GetRec() { return m_pRec.get(); }
 
  private:
-  CFX_Face(FXFT_FaceRec* pRec, const RetainPtr<Retainable>& pDesc);
+  CFX_Face(FXFT_FaceRec* pRec, RetainPtr<Retainable> pDesc);
 
   ScopedFXFTFaceRec const m_pRec;
   RetainPtr<Retainable> const m_pDesc;
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 9b2b6f5..eacffc2 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -116,11 +116,12 @@
   return pNewDesc;
 }
 
-RetainPtr<CFX_Face> CFX_FontMgr::NewFixedFace(const RetainPtr<FontDesc>& pDesc,
+RetainPtr<CFX_Face> CFX_FontMgr::NewFixedFace(RetainPtr<FontDesc> pDesc,
                                               pdfium::span<const uint8_t> span,
                                               size_t face_index) {
-  RetainPtr<CFX_Face> face = CFX_Face::New(m_FTLibrary.get(), pDesc, span,
-                                           static_cast<FT_Long>(face_index));
+  RetainPtr<CFX_Face> face =
+      CFX_Face::New(m_FTLibrary.get(), std::move(pDesc), span,
+                    static_cast<FT_Long>(face_index));
   if (!face)
     return nullptr;
 
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index dfbb753..5bb9620 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -70,7 +70,7 @@
       std::unique_ptr<uint8_t, FxFreeDeleter> pData,
       size_t size);
 
-  RetainPtr<CFX_Face> NewFixedFace(const RetainPtr<FontDesc>& pDesc,
+  RetainPtr<CFX_Face> NewFixedFace(RetainPtr<FontDesc> pDesc,
                                    pdfium::span<const uint8_t> span,
                                    size_t face_index);