Types used with SharedCopyOnWrite<> need private constructors.

Ensure these are only constructed with MakeRetain<>.

Change-Id: Icdc47d1670d46ad02c9ab07f99f787f9f8735d04
Reviewed-on: https://pdfium-review.googlesource.com/c/49210
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_clippath.h b/core/fpdfapi/page/cpdf_clippath.h
index c0b5ce5..f8d09da 100644
--- a/core/fpdfapi/page/cpdf_clippath.h
+++ b/core/fpdfapi/page/cpdf_clippath.h
@@ -46,14 +46,18 @@
  private:
   class PathData final : public Retainable {
    public:
-    using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
+    template <typename T, typename... Args>
+    friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
-    PathData();
-    PathData(const PathData& that);
-    ~PathData() override;
+    using PathAndTypeData = std::pair<CPDF_Path, uint8_t>;
 
     std::vector<PathAndTypeData> m_PathAndTypeList;
     std::vector<std::unique_ptr<CPDF_TextObject>> m_TextList;
+
+   private:
+    PathData();
+    PathData(const PathData& that);
+    ~PathData() override;
   };
 
   SharedCopyOnWrite<PathData> m_Ref;
diff --git a/core/fpdfapi/page/cpdf_colorstate.h b/core/fpdfapi/page/cpdf_colorstate.h
index cc8d91d..27f5eea 100644
--- a/core/fpdfapi/page/cpdf_colorstate.h
+++ b/core/fpdfapi/page/cpdf_colorstate.h
@@ -52,9 +52,8 @@
  private:
   class ColorData final : public Retainable {
    public:
-    ColorData();
-    ColorData(const ColorData& src);
-    ~ColorData() override;
+    template <typename T, typename... Args>
+    friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
     void SetDefault();
 
@@ -62,6 +61,11 @@
     FX_COLORREF m_StrokeColorRef = 0;
     CPDF_Color m_FillColor;
     CPDF_Color m_StrokeColor;
+
+   private:
+    ColorData();
+    ColorData(const ColorData& src);
+    ~ColorData() override;
   };
 
   void SetColor(CPDF_ColorSpace* pCS,
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index 4df3d0e..7eff896 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -80,9 +80,8 @@
  private:
   class StateData final : public Retainable {
    public:
-    StateData();
-    StateData(const StateData& that);
-    ~StateData() override;
+    template <typename T, typename... Args>
+    friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
     ByteString m_BlendMode = pdfium::transparency::kNormal;
     BlendMode m_BlendType = BlendMode::kNormal;
@@ -105,6 +104,11 @@
     UnownedPtr<const CPDF_Object> m_pHT;
     float m_Flatness = 1.0f;
     float m_Smoothness = 0.0f;
+
+   private:
+    StateData();
+    StateData(const StateData& that);
+    ~StateData() override;
   };
 
   SharedCopyOnWrite<StateData> m_Ref;
diff --git a/core/fpdfapi/page/cpdf_textstate.h b/core/fpdfapi/page/cpdf_textstate.h
index c1c3ba8..0c914a6 100644
--- a/core/fpdfapi/page/cpdf_textstate.h
+++ b/core/fpdfapi/page/cpdf_textstate.h
@@ -61,9 +61,8 @@
  private:
   class TextData final : public Retainable {
    public:
-    TextData();
-    TextData(const TextData& src);
-    ~TextData() override;
+    template <typename T, typename... Args>
+    friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
     void SetFont(CPDF_Font* pFont);
     float GetFontSizeV() const;
@@ -81,6 +80,10 @@
     float m_CTM[4];
 
    private:
+    TextData();
+    TextData(const TextData& src);
+    ~TextData() override;
+
     void ReleaseFont();
   };