diff --git a/BUILD.gn b/BUILD.gn
index 22f018e..3d455f6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -429,7 +429,6 @@
     "core/fpdfapi/fpdf_page/cpdf_contentmark.h",
     "core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp",
     "core/fpdfapi/fpdf_page/cpdf_contentmarkitem.h",
-    "core/fpdfapi/fpdf_page/cpdf_countedobject.h",
     "core/fpdfapi/fpdf_page/cpdf_form.cpp",
     "core/fpdfapi/fpdf_page/cpdf_formobject.cpp",
     "core/fpdfapi/fpdf_page/cpdf_generalstate.cpp",
@@ -710,6 +709,7 @@
     "core/fxcrt/include/cfx_observable.h",
     "core/fxcrt/include/cfx_retain_ptr.h",
     "core/fxcrt/include/cfx_string_pool_template.h",
+    "core/fxcrt/include/cfx_weak_ptr.h",
     "core/fxcrt/include/fx_basic.h",
     "core/fxcrt/include/fx_coordinates.h",
     "core/fxcrt/include/fx_ext.h",
diff --git a/core/fpdfapi/fpdf_page/cpdf_countedobject.h b/core/fpdfapi/fpdf_page/cpdf_countedobject.h
deleted file mode 100644
index c61e024..0000000
--- a/core/fpdfapi/fpdf_page/cpdf_countedobject.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FPDFAPI_FPDF_PAGE_CPDF_COUNTEDOBJECT_H_
-#define CORE_FPDFAPI_FPDF_PAGE_CPDF_COUNTEDOBJECT_H_
-
-#include "core/fpdfapi/fpdf_page/cpdf_pattern.h"
-#include "core/fpdfapi/fpdf_page/include/cpdf_colorspace.h"
-#include "core/fxcrt/include/fx_system.h"
-
-template <class T>
-class CPDF_CountedObject {
- public:
-  explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {}
-  void reset(T* ptr) {  // CAUTION: tosses prior ref counts.
-    m_nCount = 1;
-    m_pObj = ptr;
-  }
-  void clear() {  // Now you're all weak ptrs ...
-    // Guard against accidental re-entry.
-    T* pObj = m_pObj;
-    m_pObj = nullptr;
-    delete pObj;
-  }
-  T* get() const { return m_pObj; }
-  T* AddRef() {
-    ASSERT(m_pObj);
-    ++m_nCount;
-    return m_pObj;
-  }
-  void RemoveRef() {
-    if (m_nCount)
-      --m_nCount;
-  }
-  size_t use_count() const { return m_nCount; }
-
- protected:
-  size_t m_nCount;
-  T* m_pObj;
-};
-using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>;
-using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>;
-
-#endif  // CORE_FPDFAPI_FPDF_PAGE_CPDF_COUNTEDOBJECT_H_
diff --git a/core/fpdfapi/fpdf_page/cpdf_pattern.h b/core/fpdfapi/fpdf_page/cpdf_pattern.h
index 983c9ea..f18a32d 100644
--- a/core/fpdfapi/fpdf_page/cpdf_pattern.h
+++ b/core/fpdfapi/fpdf_page/cpdf_pattern.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FPDFAPI_FPDF_PAGE_CPDF_PATTERN_H_
 #define CORE_FPDFAPI_FPDF_PAGE_CPDF_PATTERN_H_
 
+#include "core/fxcrt/include/cfx_weak_ptr.h"
 #include "core/fxcrt/include/fx_coordinates.h"
 #include "core/fxcrt/include/fx_system.h"
 
@@ -42,4 +43,6 @@
   const CFX_Matrix m_ParentMatrix;
 };
 
+using CPDF_CountedPattern = CFX_WeakPtr<CPDF_Pattern>::Handle;
+
 #endif  // CORE_FPDFAPI_FPDF_PAGE_CPDF_PATTERN_H_
diff --git a/core/fpdfapi/fpdf_page/cpdf_shadingpattern.h b/core/fpdfapi/fpdf_page/cpdf_shadingpattern.h
index 7fe2cc6..9386c19 100644
--- a/core/fpdfapi/fpdf_page/cpdf_shadingpattern.h
+++ b/core/fpdfapi/fpdf_page/cpdf_shadingpattern.h
@@ -10,8 +10,9 @@
 #include <memory>
 #include <vector>
 
-#include "core/fpdfapi/fpdf_page/cpdf_countedobject.h"
 #include "core/fpdfapi/fpdf_page/cpdf_pattern.h"
+#include "core/fpdfapi/fpdf_page/include/cpdf_colorspace.h"
+#include "core/fxcrt/include/cfx_weak_ptr.h"
 #include "core/fxcrt/include/fx_system.h"
 
 enum ShadingType {
diff --git a/core/fpdfapi/fpdf_page/include/cpdf_colorspace.h b/core/fpdfapi/fpdf_page/include/cpdf_colorspace.h
index fad85a1..fc0433f 100644
--- a/core/fpdfapi/fpdf_page/include/cpdf_colorspace.h
+++ b/core/fpdfapi/fpdf_page/include/cpdf_colorspace.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_COLORSPACE_H_
 #define CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_COLORSPACE_H_
 
+#include "core/fxcrt/include/cfx_weak_ptr.h"
 #include "core/fxcrt/include/fx_string.h"
 #include "core/fxcrt/include/fx_system.h"
 
@@ -101,4 +102,6 @@
   uint32_t m_dwStdConversion;
 };
 
+using CPDF_CountedColorSpace = CFX_WeakPtr<CPDF_ColorSpace>::Handle;
+
 #endif  // CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_COLORSPACE_H_
diff --git a/core/fpdfapi/fpdf_page/pageint.h b/core/fpdfapi/fpdf_page/pageint.h
index 427a363..8b3f863 100644
--- a/core/fpdfapi/fpdf_page/pageint.h
+++ b/core/fpdfapi/fpdf_page/pageint.h
@@ -14,13 +14,14 @@
 #include <vector>
 
 #include "core/fpdfapi/fpdf_page/cpdf_contentmark.h"
-#include "core/fpdfapi/fpdf_page/cpdf_countedobject.h"
+#include "core/fpdfapi/fpdf_page/cpdf_pattern.h"
+#include "core/fpdfapi/fpdf_page/include/cpdf_colorspace.h"
 #include "core/fpdfapi/fpdf_page/include/cpdf_pageobjectholder.h"
+#include "core/fxcrt/include/cfx_weak_ptr.h"
 #include "core/fxge/include/cfx_pathdata.h"
 #include "core/fxge/include/cfx_renderdevice.h"
 
 class CPDF_AllStates;
-class CPDF_ColorSpace;
 class CPDF_ExpIntFunc;
 class CPDF_Font;
 class CPDF_FontEncoding;
@@ -29,7 +30,6 @@
 class CPDF_Image;
 class CPDF_ImageObject;
 class CPDF_Page;
-class CPDF_Pattern;
 class CPDF_SampledFunc;
 class CPDF_StitchFunc;
 class CPDF_StreamAcc;
@@ -345,10 +345,10 @@
   CPDF_CountedPattern* FindPatternPtr(CPDF_Object* pPatternObj) const;
 
  private:
-  using CPDF_CountedFont = CPDF_CountedObject<CPDF_Font>;
-  using CPDF_CountedIccProfile = CPDF_CountedObject<CPDF_IccProfile>;
-  using CPDF_CountedImage = CPDF_CountedObject<CPDF_Image>;
-  using CPDF_CountedStreamAcc = CPDF_CountedObject<CPDF_StreamAcc>;
+  using CPDF_CountedFont = CFX_WeakPtr<CPDF_Font>::Handle;
+  using CPDF_CountedIccProfile = CFX_WeakPtr<CPDF_IccProfile>::Handle;
+  using CPDF_CountedImage = CFX_WeakPtr<CPDF_Image>::Handle;
+  using CPDF_CountedStreamAcc = CFX_WeakPtr<CPDF_StreamAcc>::Handle;
 
   using CPDF_ColorSpaceMap =
       std::map<const CPDF_Object*, CPDF_CountedColorSpace*>;
diff --git a/core/fpdfapi/fpdf_render/fpdf_render.cpp b/core/fpdfapi/fpdf_render/fpdf_render.cpp
index 8043f93..0fdcb92 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render.cpp
@@ -45,7 +45,7 @@
 void CPDF_DocRenderData::Clear(FX_BOOL bRelease) {
   for (auto it = m_Type3FaceMap.begin(); it != m_Type3FaceMap.end();) {
     auto curr_it = it++;
-    CPDF_CountedObject<CPDF_Type3Cache>* cache = curr_it->second;
+    CFX_WeakPtr<CPDF_Type3Cache>::Handle* cache = curr_it->second;
     if (bRelease || cache->use_count() < 2) {
       delete cache->get();
       delete cache;
@@ -55,7 +55,7 @@
 
   for (auto it = m_TransferFuncMap.begin(); it != m_TransferFuncMap.end();) {
     auto curr_it = it++;
-    CPDF_CountedObject<CPDF_TransferFunc>* value = curr_it->second;
+    CFX_WeakPtr<CPDF_TransferFunc>::Handle* value = curr_it->second;
     if (bRelease || value->use_count() < 2) {
       delete value->get();
       delete value;
@@ -65,11 +65,11 @@
 }
 
 CPDF_Type3Cache* CPDF_DocRenderData::GetCachedType3(CPDF_Type3Font* pFont) {
-  CPDF_CountedObject<CPDF_Type3Cache>* pCache;
+  CFX_WeakPtr<CPDF_Type3Cache>::Handle* pCache;
   auto it = m_Type3FaceMap.find(pFont);
   if (it == m_Type3FaceMap.end()) {
     CPDF_Type3Cache* pType3 = new CPDF_Type3Cache(pFont);
-    pCache = new CPDF_CountedObject<CPDF_Type3Cache>(pType3);
+    pCache = new CFX_WeakPtr<CPDF_Type3Cache>::Handle(pType3);
     m_Type3FaceMap[pFont] = pCache;
   } else {
     pCache = it->second;
@@ -1086,7 +1086,7 @@
 
   auto it = m_TransferFuncMap.find(pObj);
   if (it != m_TransferFuncMap.end()) {
-    CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter = it->second;
+    CFX_WeakPtr<CPDF_TransferFunc>::Handle* pTransferCounter = it->second;
     return pTransferCounter->AddRef();
   }
 
@@ -1109,8 +1109,8 @@
       return nullptr;
   }
   CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc(m_pPDFDoc);
-  CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter =
-      new CPDF_CountedObject<CPDF_TransferFunc>(pTransfer);
+  CFX_WeakPtr<CPDF_TransferFunc>::Handle* pTransferCounter =
+      new CFX_WeakPtr<CPDF_TransferFunc>::Handle(pTransfer);
   m_TransferFuncMap[pObj] = pTransferCounter;
   static const int kMaxOutputs = 16;
   FX_FLOAT output[kMaxOutputs];
diff --git a/core/fpdfapi/fpdf_render/render_int.h b/core/fpdfapi/fpdf_render/render_int.h
index afd9c83..386da76 100644
--- a/core/fpdfapi/fpdf_render/render_int.h
+++ b/core/fpdfapi/fpdf_render/render_int.h
@@ -11,11 +11,11 @@
 #include <memory>
 #include <vector>
 
-#include "core/fpdfapi/fpdf_page/cpdf_countedobject.h"
 #include "core/fpdfapi/fpdf_page/cpdf_graphicstates.h"
 #include "core/fpdfapi/fpdf_page/include/cpdf_clippath.h"
 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h"
 #include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h"
+#include "core/fxcrt/include/cfx_weak_ptr.h"
 #include "core/fxge/include/cfx_fxgedevice.h"
 #include "core/fxge/include/cfx_renderdevice.h"
 
@@ -76,9 +76,9 @@
 
  private:
   using CPDF_Type3CacheMap =
-      std::map<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache>*>;
+      std::map<CPDF_Font*, CFX_WeakPtr<CPDF_Type3Cache>::Handle*>;
   using CPDF_TransferFuncMap =
-      std::map<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc>*>;
+      std::map<CPDF_Object*, CFX_WeakPtr<CPDF_TransferFunc>::Handle*>;
 
   CPDF_Document* m_pPDFDoc;
   CPDF_Type3CacheMap m_Type3FaceMap;
diff --git a/core/fxcrt/include/cfx_weak_ptr.h b/core/fxcrt/include/cfx_weak_ptr.h
new file mode 100644
index 0000000..ea71cd0
--- /dev/null
+++ b/core/fxcrt/include/cfx_weak_ptr.h
@@ -0,0 +1,48 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXCRT_INCLUDE_CFX_WEAK_PTR_H_
+#define CORE_FXCRT_INCLUDE_CFX_WEAK_PTR_H_
+
+#include "core/fxcrt/include/fx_system.h"
+
+template <class T>
+class CFX_WeakPtr {
+ public:
+  class Handle {
+   public:
+    explicit Handle(T* ptr) : m_nCount(1), m_pObj(ptr) {}
+    void reset(T* ptr) {  // CAUTION: tosses prior ref counts.
+      m_nCount = 1;
+      m_pObj = ptr;
+    }
+    void clear() {  // Now you're all weak ptrs ...
+      // Guard against accidental re-entry.
+      T* pObj = m_pObj;
+      m_pObj = nullptr;
+      delete pObj;
+    }
+    T* get() const { return m_pObj; }
+    T* AddRef() {
+      ASSERT(m_pObj);
+      ++m_nCount;
+      return m_pObj;
+    }
+    void RemoveRef() {
+      if (m_nCount)
+        --m_nCount;
+    }
+    size_t use_count() const { return m_nCount; }
+
+   protected:
+    size_t m_nCount;
+    T* m_pObj;
+  };
+
+  // TODO(tsepez): implement weak pointer operations themselves.
+};
+
+#endif  // CORE_FXCRT_INCLUDE_CFX_WEAK_PTR_H_
