diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index d8ad4ef..9796038 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -75,11 +75,6 @@
 typedef CFX_PSTemplate<int32_t> CFX_Size;
 typedef CFX_PSTemplate<FX_FLOAT> CFX_SizeF;
 
-#ifdef PDF_ENABLE_XFA
-typedef CFX_ArrayTemplate<CFX_Point> CFX_Points;
-typedef CFX_ArrayTemplate<CFX_PointF> CFX_PointsF;
-#endif  // PDF_ENABLE_XFA
-
 template <class BaseType>
 class CFX_VTemplate : public CFX_PSTemplate<BaseType> {
  public:
diff --git a/xfa/fde/cfde_path.cpp b/xfa/fde/cfde_path.cpp
index 23aad50..6db0ccc 100644
--- a/xfa/fde/cfde_path.cpp
+++ b/xfa/fde/cfde_path.cpp
@@ -6,6 +6,7 @@
 
 #include "xfa/fde/cfde_path.h"
 
+#include "third_party/base/stl_util.h"
 #include "xfa/fde/fde_object.h"
 
 bool CFDE_Path::StartFigure() {
@@ -106,39 +107,38 @@
            CFX_PointF(cx + rx * cos_beta, cy + ry * sin_beta));
 }
 
-void CFDE_Path::AddBezier(const CFX_PointsF& points) {
-  if (points.GetSize() != 4)
+void CFDE_Path::AddBezier(const std::vector<CFX_PointF>& points) {
+  if (points.size() != 4)
     return;
 
-  const CFX_PointF* p = points.GetData();
-  MoveTo(p[0]);
-  BezierTo(p[1], p[2], p[3]);
+  MoveTo(points[0]);
+  BezierTo(points[1], points[2], points[3]);
 }
 
-void CFDE_Path::AddBeziers(const CFX_PointsF& points) {
-  int32_t iCount = points.GetSize();
+void CFDE_Path::AddBeziers(const std::vector<CFX_PointF>& points) {
+  int32_t iCount = points.size();
   if (iCount < 4)
     return;
 
-  const CFX_PointF* p = points.GetData();
+  const CFX_PointF* p = points.data();
   const CFX_PointF* pEnd = p + iCount;
   MoveTo(p[0]);
   for (++p; p <= pEnd - 3; p += 3)
     BezierTo(p[0], p[1], p[2]);
 }
 
-void CFDE_Path::GetCurveTangents(const CFX_PointsF& points,
-                                 CFX_PointsF& tangents,
+void CFDE_Path::GetCurveTangents(const std::vector<CFX_PointF>& points,
+                                 std::vector<CFX_PointF>* tangents,
                                  bool bClosed,
                                  FX_FLOAT fTension) const {
-  int32_t iCount = points.GetSize();
-  tangents.SetSize(iCount);
+  int32_t iCount = pdfium::CollectionSize<int32_t>(points);
+  tangents->resize(iCount);
   if (iCount < 3)
     return;
 
   FX_FLOAT fCoefficient = fTension / 3.0f;
-  const CFX_PointF* pPoints = points.GetData();
-  CFX_PointF* pTangents = tangents.GetData();
+  const CFX_PointF* pPoints = points.data();
+  CFX_PointF* pTangents = tangents->data();
   for (int32_t i = 0; i < iCount; ++i) {
     int32_t r = i + 1;
     int32_t s = i - 1;
@@ -152,17 +152,17 @@
   }
 }
 
-void CFDE_Path::AddCurve(const CFX_PointsF& points,
+void CFDE_Path::AddCurve(const std::vector<CFX_PointF>& points,
                          bool bClosed,
                          FX_FLOAT fTension) {
-  int32_t iLast = points.GetUpperBound();
+  int32_t iLast = pdfium::CollectionSize<int32_t>(points) - 1;
   if (iLast < 1)
     return;
 
-  CFX_PointsF tangents;
-  GetCurveTangents(points, tangents, bClosed, fTension);
-  const CFX_PointF* pPoints = points.GetData();
-  CFX_PointF* pTangents = tangents.GetData();
+  std::vector<CFX_PointF> tangents;
+  GetCurveTangents(points, &tangents, bClosed, fTension);
+  const CFX_PointF* pPoints = points.data();
+  CFX_PointF* pTangents = tangents.data();
   MoveTo(pPoints[0]);
   for (int32_t i = 0; i < iLast; ++i) {
     BezierTo(CFX_PointF(pPoints[i].x + pTangents[i].x,
@@ -214,13 +214,13 @@
   m_Path.Append(&pSrc->m_Path, nullptr);
 }
 
-void CFDE_Path::AddPolygon(const CFX_PointsF& points) {
-  int32_t iCount = points.GetSize();
+void CFDE_Path::AddPolygon(const std::vector<CFX_PointF>& points) {
+  size_t iCount = points.size();
   if (iCount < 2)
     return;
 
   AddLines(points);
-  const CFX_PointF* p = points.GetData();
+  const CFX_PointF* p = points.data();
   if (FXSYS_fabs(p[0].x - p[iCount - 1].x) < 0.01f ||
       FXSYS_fabs(p[0].y - p[iCount - 1].y) < 0.01f) {
     LineTo(p[0]);
@@ -228,12 +228,12 @@
   CloseFigure();
 }
 
-void CFDE_Path::AddLines(const CFX_PointsF& points) {
-  int32_t iCount = points.GetSize();
+void CFDE_Path::AddLines(const std::vector<CFX_PointF>& points) {
+  size_t iCount = points.size();
   if (iCount < 2)
     return;
 
-  const CFX_PointF* p = points.GetData();
+  const CFX_PointF* p = points.data();
   const CFX_PointF* pEnd = p + iCount;
   MoveTo(p[0]);
   for (++p; p < pEnd; ++p)
diff --git a/xfa/fde/cfde_path.h b/xfa/fde/cfde_path.h
index 936a5c8..d2d8fe9 100644
--- a/xfa/fde/cfde_path.h
+++ b/xfa/fde/cfde_path.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FDE_CFDE_PATH_H_
 #define XFA_FDE_CFDE_PATH_H_
 
+#include <vector>
+
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 
@@ -15,16 +17,16 @@
   bool StartFigure();
   bool CloseFigure();
 
-  void AddBezier(const CFX_PointsF& points);
-  void AddBeziers(const CFX_PointsF& points);
-  void AddCurve(const CFX_PointsF& points,
+  void AddBezier(const std::vector<CFX_PointF>& points);
+  void AddBeziers(const std::vector<CFX_PointF>& points);
+  void AddCurve(const std::vector<CFX_PointF>& points,
                 bool bClosed,
                 FX_FLOAT fTension = 0.5f);
   void AddEllipse(const CFX_RectF& rect);
-  void AddLines(const CFX_PointsF& points);
+  void AddLines(const std::vector<CFX_PointF>& points);
   void AddLine(const CFX_PointF& pt1, const CFX_PointF& pt2);
   void AddPath(const CFDE_Path* pSrc, bool bConnect);
-  void AddPolygon(const CFX_PointsF& points);
+  void AddPolygon(const std::vector<CFX_PointF>& points);
   void AddRectangle(const CFX_RectF& rect);
   void GetBBox(CFX_RectF& bbox) const;
   void GetBBox(CFX_RectF& bbox,
@@ -44,8 +46,8 @@
              FX_FLOAT endAngle);
   void MoveTo(const CFX_PointF& p0) { MoveTo(p0.x, p0.y); }
   void LineTo(const CFX_PointF& p1) { LineTo(p1.x, p1.y); }
-  void GetCurveTangents(const CFX_PointsF& points,
-                        CFX_PointsF& tangents,
+  void GetCurveTangents(const std::vector<CFX_PointF>& points,
+                        std::vector<CFX_PointF>* tangents,
                         bool bClosed,
                         FX_FLOAT fTension) const;
   CFX_PathData m_Path;
diff --git a/xfa/fde/fde_gedevice.cpp b/xfa/fde/fde_gedevice.cpp
index 081f00a..b5220cd 100644
--- a/xfa/fde/fde_gedevice.cpp
+++ b/xfa/fde/fde_gedevice.cpp
@@ -198,18 +198,18 @@
                                    const CFX_PointF& pt3,
                                    const CFX_PointF& pt4,
                                    const CFX_Matrix* pMatrix) {
-  CFX_PointsF points;
-  points.Add(pt1);
-  points.Add(pt2);
-  points.Add(pt3);
-  points.Add(pt4);
+  std::vector<CFX_PointF> points;
+  points.push_back(pt1);
+  points.push_back(pt2);
+  points.push_back(pt3);
+  points.push_back(pt4);
   CFDE_Path path;
   path.AddBezier(points);
   return DrawPath(pPen, fPenWidth, &path, pMatrix);
 }
 bool CFDE_RenderDevice::DrawCurve(CFDE_Pen* pPen,
                                   FX_FLOAT fPenWidth,
-                                  const CFX_PointsF& points,
+                                  const std::vector<CFX_PointF>& points,
                                   bool bClosed,
                                   FX_FLOAT fTension,
                                   const CFX_Matrix* pMatrix) {
@@ -227,7 +227,7 @@
 }
 bool CFDE_RenderDevice::DrawLines(CFDE_Pen* pPen,
                                   FX_FLOAT fPenWidth,
-                                  const CFX_PointsF& points,
+                                  const std::vector<CFX_PointF>& points,
                                   const CFX_Matrix* pMatrix) {
   CFDE_Path path;
   path.AddLines(points);
@@ -259,7 +259,7 @@
 }
 bool CFDE_RenderDevice::DrawPolygon(CFDE_Pen* pPen,
                                     FX_FLOAT fPenWidth,
-                                    const CFX_PointsF& points,
+                                    const std::vector<CFX_PointF>& points,
                                     const CFX_Matrix* pMatrix) {
   CFDE_Path path;
   path.AddPolygon(points);
@@ -274,7 +274,7 @@
   return DrawPath(pPen, fPenWidth, &path, pMatrix);
 }
 bool CFDE_RenderDevice::FillClosedCurve(CFDE_Brush* pBrush,
-                                        const CFX_PointsF& points,
+                                        const std::vector<CFX_PointF>& points,
                                         FX_FLOAT fTension,
                                         const CFX_Matrix* pMatrix) {
   CFDE_Path path;
@@ -289,7 +289,7 @@
   return FillPath(pBrush, &path, pMatrix);
 }
 bool CFDE_RenderDevice::FillPolygon(CFDE_Brush* pBrush,
-                                    const CFX_PointsF& points,
+                                    const std::vector<CFX_PointF>& points,
                                     const CFX_Matrix* pMatrix) {
   CFDE_Path path;
   path.AddPolygon(points);
diff --git a/xfa/fde/fde_gedevice.h b/xfa/fde/fde_gedevice.h
index 170bef5..7c772cf 100644
--- a/xfa/fde/fde_gedevice.h
+++ b/xfa/fde/fde_gedevice.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FDE_FDE_GEDEVICE_H_
 #define XFA_FDE_FDE_GEDEVICE_H_
 
+#include <vector>
+
 #include "core/fxge/cfx_renderdevice.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
 
@@ -52,7 +54,7 @@
                   const CFX_Matrix* pMatrix = nullptr);
   bool DrawCurve(CFDE_Pen* pPen,
                  FX_FLOAT fPenWidth,
-                 const CFX_PointsF& points,
+                 const std::vector<CFX_PointF>& points,
                  bool bClosed,
                  FX_FLOAT fTension = 0.5f,
                  const CFX_Matrix* pMatrix = nullptr);
@@ -62,7 +64,7 @@
                    const CFX_Matrix* pMatrix = nullptr);
   bool DrawLines(CFDE_Pen* pPen,
                  FX_FLOAT fPenWidth,
-                 const CFX_PointsF& points,
+                 const std::vector<CFX_PointF>& points,
                  const CFX_Matrix* pMatrix = nullptr);
   bool DrawLine(CFDE_Pen* pPen,
                 FX_FLOAT fPenWidth,
@@ -75,14 +77,14 @@
                 const CFX_Matrix* pMatrix = nullptr);
   bool DrawPolygon(CFDE_Pen* pPen,
                    FX_FLOAT fPenWidth,
-                   const CFX_PointsF& points,
+                   const std::vector<CFX_PointF>& points,
                    const CFX_Matrix* pMatrix = nullptr);
   bool DrawRectangle(CFDE_Pen* pPen,
                      FX_FLOAT fPenWidth,
                      const CFX_RectF& rect,
                      const CFX_Matrix* pMatrix = nullptr);
   bool FillClosedCurve(CFDE_Brush* pBrush,
-                       const CFX_PointsF& points,
+                       const std::vector<CFX_PointF>& points,
                        FX_FLOAT fTension = 0.5f,
                        const CFX_Matrix* pMatrix = nullptr);
   bool FillEllipse(CFDE_Brush* pBrush,
@@ -92,7 +94,7 @@
                 const CFDE_Path* pPath,
                 const CFX_Matrix* pMatrix = nullptr);
   bool FillPolygon(CFDE_Brush* pBrush,
-                   const CFX_PointsF& points,
+                   const std::vector<CFX_PointF>& points,
                    const CFX_Matrix* pMatrix = nullptr);
   bool FillRectangle(CFDE_Brush* pBrush,
                      const CFX_RectF& rect,
