diff --git a/fxjs/BUILD.gn b/fxjs/BUILD.gn
index 93c3bfa..2fb819c 100644
--- a/fxjs/BUILD.gn
+++ b/fxjs/BUILD.gn
@@ -21,8 +21,6 @@
 
   if (pdf_enable_v8) {
     sources += [
-      "cfx_globalarray.cpp",
-      "cfx_globalarray.h",
       "cfx_globaldata.cpp",
       "cfx_globaldata.h",
       "cfx_keyvalue.cpp",
diff --git a/fxjs/cfx_globalarray.cpp b/fxjs/cfx_globalarray.cpp
deleted file mode 100644
index cf57fc8..0000000
--- a/fxjs/cfx_globalarray.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2017 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
-
-#include "fxjs/cfx_globalarray.h"
-
-#include <utility>
-
-#include "fxjs/cfx_keyvalue.h"
-
-CFX_GlobalArray::CFX_GlobalArray() = default;
-
-CFX_GlobalArray::CFX_GlobalArray(CFX_GlobalArray&& that) = default;
-
-CFX_GlobalArray::~CFX_GlobalArray() = default;
-
-CFX_GlobalArray& CFX_GlobalArray::operator=(CFX_GlobalArray&& array) = default;
-
-void CFX_GlobalArray::Add(std::unique_ptr<CFX_KeyValue> pKeyValue) {
-  m_Array.push_back(std::move(pKeyValue));
-}
-
-size_t CFX_GlobalArray::Count() const {
-  return m_Array.size();
-}
-
-CFX_KeyValue* CFX_GlobalArray::GetAt(int index) const {
-  return m_Array.at(index).get();
-}
diff --git a/fxjs/cfx_globalarray.h b/fxjs/cfx_globalarray.h
deleted file mode 100644
index e7e0bde..0000000
--- a/fxjs/cfx_globalarray.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 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 FXJS_CFX_GLOBALARRAY_H_
-#define FXJS_CFX_GLOBALARRAY_H_
-
-#include <memory>
-#include <vector>
-
-class CFX_KeyValue;
-
-class CFX_GlobalArray {
- public:
-  CFX_GlobalArray();
-  CFX_GlobalArray(const CFX_GlobalArray& that) = delete;
-  CFX_GlobalArray(CFX_GlobalArray&& that);
-  ~CFX_GlobalArray();
-
-  CFX_GlobalArray& operator=(const CFX_GlobalArray& array) = delete;
-  CFX_GlobalArray& operator=(CFX_GlobalArray&& array);
-
-  void Add(std::unique_ptr<CFX_KeyValue> pKeyValue);
-  size_t Count() const;
-  CFX_KeyValue* GetAt(int index) const;
-
- private:
-  std::vector<std::unique_ptr<CFX_KeyValue>> m_Array;
-};
-
-#endif  // FXJS_CFX_GLOBALARRAY_H_
diff --git a/fxjs/cfx_globaldata.cpp b/fxjs/cfx_globaldata.cpp
index e22be7f..9131f02 100644
--- a/fxjs/cfx_globaldata.cpp
+++ b/fxjs/cfx_globaldata.cpp
@@ -182,8 +182,9 @@
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
-void CFX_GlobalData::SetGlobalVariableObject(ByteString sPropName,
-                                             CFX_GlobalArray array) {
+void CFX_GlobalData::SetGlobalVariableObject(
+    ByteString sPropName,
+    std::vector<std::unique_ptr<CFX_KeyValue>> array) {
   if (!TrimPropName(&sPropName))
     return;
 
diff --git a/fxjs/cfx_globaldata.h b/fxjs/cfx_globaldata.h
index 91f87af..421a3b4 100644
--- a/fxjs/cfx_globaldata.h
+++ b/fxjs/cfx_globaldata.h
@@ -44,7 +44,9 @@
   void SetGlobalVariableNumber(ByteString propname, double dData);
   void SetGlobalVariableBoolean(ByteString propname, bool bData);
   void SetGlobalVariableString(ByteString propname, const ByteString& sData);
-  void SetGlobalVariableObject(ByteString propname, CFX_GlobalArray array);
+  void SetGlobalVariableObject(
+      ByteString propname,
+      std::vector<std::unique_ptr<CFX_KeyValue>> array);
   void SetGlobalVariableNull(ByteString propname);
   bool SetGlobalVariablePersistent(ByteString propname, bool bPersistent);
   bool DeleteGlobalVariable(ByteString propname);
diff --git a/fxjs/cfx_globaldata_unittest.cpp b/fxjs/cfx_globaldata_unittest.cpp
index acc756b..3eb0ac4 100644
--- a/fxjs/cfx_globaldata_unittest.cpp
+++ b/fxjs/cfx_globaldata_unittest.cpp
@@ -53,7 +53,7 @@
 
 TEST(CFXGlobalData, StoreReload) {
   TestDelegate delegate;
-  CFX_GlobalArray array;
+  std::vector<std::unique_ptr<CFX_KeyValue>> array;
   CFX_GlobalData* pInstance = CFX_GlobalData::GetRetainedInstance(&delegate);
   pInstance->SetGlobalVariableNumber("double", 2.0);
   pInstance->SetGlobalVariableString("string", "clams");
diff --git a/fxjs/cfx_keyvalue.h b/fxjs/cfx_keyvalue.h
index 59c31cb..b66dc12 100644
--- a/fxjs/cfx_keyvalue.h
+++ b/fxjs/cfx_keyvalue.h
@@ -7,8 +7,12 @@
 #ifndef FXJS_CFX_KEYVALUE_H_
 #define FXJS_CFX_KEYVALUE_H_
 
+#include <memory>
+#include <vector>
+
 #include "core/fxcrt/fx_string.h"
-#include "fxjs/cfx_globalarray.h"
+
+class CFX_KeyValue;
 
 class CFX_Value {
  public:
@@ -27,7 +31,7 @@
   bool bData;
   double dData;
   ByteString sData;
-  CFX_GlobalArray objData;
+  std::vector<std::unique_ptr<CFX_KeyValue>> objData;
 };
 
 class CFX_KeyValue : public CFX_Value {
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 3d61c17..8ac3181 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -393,7 +393,7 @@
         m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
         break;
       case CFX_Value::DataType::OBJECT: {
-        CFX_GlobalArray array;
+        std::vector<std::unique_ptr<CFX_KeyValue>> array;
         v8::Local<v8::Object> obj =
             v8::Local<v8::Object>::New(GetIsolate(), pData->pData);
         ObjectToArray(pRuntime, obj, &array);
@@ -408,9 +408,10 @@
   }
 }
 
-void CJS_Global::ObjectToArray(CJS_Runtime* pRuntime,
-                               v8::Local<v8::Object> pObj,
-                               CFX_GlobalArray* pArray) {
+void CJS_Global::ObjectToArray(
+    CJS_Runtime* pRuntime,
+    v8::Local<v8::Object> pObj,
+    std::vector<std::unique_ptr<CFX_KeyValue>>* pArray) {
   std::vector<WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj);
   for (const auto& ws : pKeyList) {
     ByteString sKey = ws.ToUTF8();
@@ -421,7 +422,7 @@
       pObjElement->nType = CFX_Value::DataType::NUMBER;
       pObjElement->sKey = sKey;
       pObjElement->dData = pRuntime->ToDouble(v);
-      pArray->Add(std::move(pObjElement));
+      pArray->push_back(std::move(pObjElement));
       continue;
     }
     if (v->IsBoolean()) {
@@ -429,7 +430,7 @@
       pObjElement->nType = CFX_Value::DataType::BOOLEAN;
       pObjElement->sKey = sKey;
       pObjElement->dData = pRuntime->ToBoolean(v);
-      pArray->Add(std::move(pObjElement));
+      pArray->push_back(std::move(pObjElement));
       continue;
     }
     if (v->IsString()) {
@@ -438,7 +439,7 @@
       pObjElement->nType = CFX_Value::DataType::STRING;
       pObjElement->sKey = sKey;
       pObjElement->sData = sValue;
-      pArray->Add(std::move(pObjElement));
+      pArray->push_back(std::move(pObjElement));
       continue;
     }
     if (v->IsObject()) {
@@ -446,14 +447,14 @@
       pObjElement->nType = CFX_Value::DataType::OBJECT;
       pObjElement->sKey = sKey;
       ObjectToArray(pRuntime, pRuntime->ToObject(v), &pObjElement->objData);
-      pArray->Add(std::move(pObjElement));
+      pArray->push_back(std::move(pObjElement));
       continue;
     }
     if (v->IsNull()) {
       auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>();
       pObjElement->nType = CFX_Value::DataType::NULLOBJ;
       pObjElement->sKey = sKey;
-      pArray->Add(std::move(pObjElement));
+      pArray->push_back(std::move(pObjElement));
     }
   }
 }
@@ -464,8 +465,8 @@
   if (pRuntime)
     return;
 
-  for (int i = 0, sz = pData->objData.Count(); i < sz; i++) {
-    CFX_KeyValue* pObjData = pData->objData.GetAt(i);
+  for (size_t i = 0; i < pData->objData.size(); ++i) {
+    CFX_KeyValue* pObjData = pData->objData.at(i).get();
     switch (pObjData->nType) {
       case CFX_Value::DataType::NUMBER:
         pRuntime->PutObjectProperty(pObj, pObjData->sKey.AsStringView(),
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h
index b01a74f..2c89188 100644
--- a/fxjs/cjs_global.h
+++ b/fxjs/cjs_global.h
@@ -76,7 +76,7 @@
                                 bool bDefaultPersistent);
   void ObjectToArray(CJS_Runtime* pRuntime,
                      v8::Local<v8::Object> pObj,
-                     CFX_GlobalArray* pArray);
+                     std::vector<std::unique_ptr<CFX_KeyValue>>* pArray);
   void PutObjectProperty(v8::Local<v8::Object> obj, CFX_KeyValue* pData);
 
   std::map<ByteString, std::unique_ptr<JSGlobalData>> m_MapGlobal;
