Convert std::vector<v8::Local<T>> to v8::LocalVector<T>.

Bug: pdfium:2090
Change-Id: I9eb02cdd71354b3a60b57bacd924359e8f1636bf
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/113293
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index 5b2358c..d00f8d0 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -220,7 +220,7 @@
 
 CJS_Result CJS_App::alert(CJS_Runtime* pRuntime,
                           pdfium::span<v8::Local<v8::Value>> params) {
-  std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
+  v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 4, "cMsg", "nIcon", "nType", "cTitle");
 
   if (!IsExpandedParamKnown(newParams[0]))
@@ -423,7 +423,7 @@
 
 CJS_Result CJS_App::mailMsg(CJS_Runtime* pRuntime,
                             pdfium::span<v8::Local<v8::Value>> params) {
-  std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
+  v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 6, "bUI", "cTo", "cCc", "cBcc", "cSubject", "cMsg");
 
   if (!IsExpandedParamKnown(newParams[0]))
@@ -519,7 +519,7 @@
 
 CJS_Result CJS_App::response(CJS_Runtime* pRuntime,
                              pdfium::span<v8::Local<v8::Value>> params) {
-  std::vector<v8::Local<v8::Value>> newParams =
+  v8::LocalVector<v8::Value> newParams =
       ExpandKeywordParams(pRuntime, params, 5, "cQuestion", "cTitle",
                           "cDefault", "bPassword", "cLabel");
 
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index cbb3598..4336ce2 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -315,7 +315,7 @@
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
+  v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 6, "bUI", "cTo", "cCc", "cBcc", "cSubject", "cMsg");
 
   bool bUI = true;
@@ -366,7 +366,7 @@
   if (sTextBuf.IsEmpty())
     return CJS_Result::Failure(L"Bad FDF format.");
 
-  std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
+  v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 6, "bUI", "cTo", "cCc", "cBcc", "cSubject", "cMsg");
 
   bool bUI = true;
@@ -402,7 +402,7 @@
 
 CJS_Result CJS_Document::print(CJS_Runtime* pRuntime,
                                pdfium::span<v8::Local<v8::Value>> params) {
-  std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
+  v8::LocalVector<v8::Value> newParams = ExpandKeywordParams(
       pRuntime, params, 8, "bUI", "nStart", "nEnd", "bSilent", "bShrinkToFit",
       "bPrintAsImage", "bReverse", "bAnnotations");
 
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 9ac0476..0377d93 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -153,7 +153,7 @@
   if (!pRuntime)
     return;
 
-  std::vector<v8::Local<v8::Value>> parameters;
+  v8::LocalVector<v8::Value> parameters(info.GetIsolate());
   for (int i = 0; i < info.Length(); ++i)
     parameters.push_back(info[i]);
 
@@ -993,7 +993,7 @@
 
   int iIndex =
       WithinBoundsOrZero(pRuntime->ToInt32(params[0]), std::size(kDateFormats));
-  std::vector<v8::Local<v8::Value>> newParams;
+  v8::LocalVector<v8::Value> newParams(pRuntime->GetIsolate());
   newParams.push_back(pRuntime->NewString(kDateFormats[iIndex]));
   return AFDate_FormatEx(pRuntime, newParams);
 }
@@ -1007,7 +1007,7 @@
 
   int iIndex =
       WithinBoundsOrZero(pRuntime->ToInt32(params[0]), std::size(kDateFormats));
-  std::vector<v8::Local<v8::Value>> newParams;
+  v8::LocalVector<v8::Value> newParams(pRuntime->GetIsolate());
   newParams.push_back(pRuntime->NewString(kDateFormats[iIndex]));
   return AFDate_KeystrokeEx(pRuntime, newParams);
 }
@@ -1021,7 +1021,7 @@
 
   int iIndex =
       WithinBoundsOrZero(pRuntime->ToInt32(params[0]), std::size(kTimeFormats));
-  std::vector<v8::Local<v8::Value>> newParams;
+  v8::LocalVector<v8::Value> newParams(pRuntime->GetIsolate());
   newParams.push_back(pRuntime->NewString(kTimeFormats[iIndex]));
   return AFDate_FormatEx(pRuntime, newParams);
 }
@@ -1034,7 +1034,7 @@
 
   int iIndex =
       WithinBoundsOrZero(pRuntime->ToInt32(params[0]), std::size(kTimeFormats));
-  std::vector<v8::Local<v8::Value>> newParams;
+  v8::LocalVector<v8::Value> newParams(pRuntime->GetIsolate());
   newParams.push_back(pRuntime->NewString(kTimeFormats[iIndex]));
   return AFDate_KeystrokeEx(pRuntime, newParams);
 }
@@ -1199,7 +1199,7 @@
       break;
   }
 
-  std::vector<v8::Local<v8::Value>> params2;
+  v8::LocalVector<v8::Value> params2(pRuntime->GetIsolate());
   params2.push_back(pRuntime->NewString(cFormat));
   return AFSpecial_KeystrokeEx(pRuntime, params2);
 }
diff --git a/fxjs/cjs_publicmethods_embeddertest.cpp b/fxjs/cjs_publicmethods_embeddertest.cpp
index 5a1a6e7..3184a56 100644
--- a/fxjs/cjs_publicmethods_embeddertest.cpp
+++ b/fxjs/cjs_publicmethods_embeddertest.cpp
@@ -203,7 +203,7 @@
   runtime.PutArrayElement(ary, 0, runtime.NewString("Calc1_A"));
   runtime.PutArrayElement(ary, 1, runtime.NewString("Calc1_B"));
 
-  std::vector<v8::Local<v8::Value>> params;
+  v8::LocalVector<v8::Value> params(runtime.GetIsolate());
   params.push_back(runtime.NewString("SUM"));
   params.push_back(ary);
 
@@ -244,7 +244,7 @@
   handler->SetSelStart(0);
   handler->SetSelEnd(0);
 
-  std::vector<v8::Local<v8::Value>> params;
+  v8::LocalVector<v8::Value> params(runtime.GetIsolate());
   params.push_back(runtime.NewString("-10"));
   params.push_back(runtime.NewString(""));
 
diff --git a/fxjs/js_define.cpp b/fxjs/js_define.cpp
index 2664cb8..2e2087a 100644
--- a/fxjs/js_define.cpp
+++ b/fxjs/js_define.cpp
@@ -60,14 +60,14 @@
   return isfinite(date) ? FX_LocalTime(date) : date;
 }
 
-std::vector<v8::Local<v8::Value>> ExpandKeywordParams(
+v8::LocalVector<v8::Value> ExpandKeywordParams(
     CJS_Runtime* pRuntime,
     pdfium::span<v8::Local<v8::Value>> originals,
     size_t nKeywords,
     ...) {
   DCHECK(nKeywords);
 
-  std::vector<v8::Local<v8::Value>> result(nKeywords, v8::Local<v8::Value>());
+  v8::LocalVector<v8::Value> result(pRuntime->GetIsolate(), nKeywords);
   size_t size = std::min(originals.size(), nKeywords);
   for (size_t i = 0; i < size; ++i)
     result[i] = originals[i];
diff --git a/fxjs/js_define.h b/fxjs/js_define.h
index d9264c0..045cce1 100644
--- a/fxjs/js_define.h
+++ b/fxjs/js_define.h
@@ -8,7 +8,6 @@
 #define FXJS_JS_DEFINE_H_
 
 #include <memory>
-#include <vector>
 
 #include "core/fxcrt/unowned_ptr.h"
 #include "fxjs/cfxjs_engine.h"
@@ -16,6 +15,7 @@
 #include "fxjs/cjs_runtime.h"
 #include "fxjs/js_resources.h"
 #include "third_party/base/containers/span.h"
+#include "v8/include/v8-local-handle.h"
 
 class CJS_Object;
 
@@ -27,7 +27,7 @@
 // names as wchar_t string literals corresponding to each positional argument.
 // The result will always contain |nKeywords| value, check for the unspecified
 // ones in the result using IsExpandedParamKnown() below.
-std::vector<v8::Local<v8::Value>> ExpandKeywordParams(
+v8::LocalVector<v8::Value> ExpandKeywordParams(
     CJS_Runtime* pRuntime,
     pdfium::span<v8::Local<v8::Value>> originals,
     size_t nKeywords,
@@ -123,7 +123,7 @@
   if (!pRuntime)
     return;
 
-  std::vector<v8::Local<v8::Value>> parameters;
+  v8::LocalVector<v8::Value> parameters(info.GetIsolate());
   for (unsigned int i = 0; i < (unsigned int)info.Length(); i++)
     parameters.push_back(info[i]);
 
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index ecb8c96..1d47de6 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -25,6 +25,7 @@
 #include "third_party/base/containers/contains.h"
 #include "v8/include/v8-function-callback.h"
 #include "v8/include/v8-function.h"
+#include "v8/include/v8-local-handle.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
@@ -543,7 +544,7 @@
   CFXJSE_Engine* pScriptContext = pObject->GetDocument()->GetScriptContext();
   pObject = pScriptContext->GetVariablesThis(pObject);
 
-  std::vector<v8::Local<v8::Value>> parameters;
+  v8::LocalVector<v8::Value> parameters(info.GetIsolate());
   for (int i = 0; i < info.Length(); i++)
     parameters.push_back(info[i]);
 
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index 82a5097..8172b33 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -35,6 +35,7 @@
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/v8-container.h"
 #include "v8/include/v8-function-callback.h"
+#include "v8/include/v8-local-handle.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fgas/crt/cfgas_decimal.h"
@@ -1186,9 +1187,9 @@
   return fxv8::IsNull(firstValue) && fxv8::IsNull(secondValue);
 }
 
-std::vector<v8::Local<v8::Value>> UnfoldArgs(
+v8::LocalVector<v8::Value> UnfoldArgs(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  std::vector<v8::Local<v8::Value>> results;
+  v8::LocalVector<v8::Value> results(info.GetIsolate());
   v8::Isolate* pIsolate = info.GetIsolate();
   for (int i = 1; i < info.Length(); ++i) {
     v8::Local<v8::Value> arg = info[i];
@@ -1303,14 +1304,14 @@
                                         dwFlags);
 }
 
-std::vector<v8::Local<v8::Value>> ParseResolveResult(
+v8::LocalVector<v8::Value> ParseResolveResult(
     CFXJSE_HostObject* pHostObject,
     const CFXJSE_Engine::ResolveResult& resolveNodeRS,
     v8::Local<v8::Value> pParentValue,
     bool* bAttribute) {
-  std::vector<v8::Local<v8::Value>> resultValues;
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pHostObject);
   v8::Isolate* pIsolate = pContext->GetIsolate();
+  v8::LocalVector<v8::Value> resultValues(pIsolate);
 
   if (resolveNodeRS.type == CFXJSE_Engine::ResolveResult::Type::kNodes) {
     *bAttribute = false;
@@ -3016,7 +3017,7 @@
     return;
   }
 
-  std::vector<v8::Local<v8::Value>> values(3);
+  v8::LocalVector<v8::Value> values(info.GetIsolate(), 3);
   int intVal = 3;
   if (fxv8::IsNull(argOne)) {
     // TODO(dsinclair): Why is this 4 when the others are all 3?
@@ -4900,7 +4901,7 @@
   }
 
   if (iFlags == 4) {
-    std::vector<v8::Local<v8::Value>> values(3);
+    v8::LocalVector<v8::Value> values(info.GetIsolate(), 3);
     values[0] = fxv8::NewNumberHelper(info.GetIsolate(), 3);
     values[1] = fxv8::NewNullHelper(info.GetIsolate());
     values[2] = fxv8::NewNullHelper(info.GetIsolate());
@@ -4922,7 +4923,7 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
-  std::vector<v8::Local<v8::Value>> returnValues;
+  v8::LocalVector<v8::Value> returnValues(pIsolate);
   for (int i = 0; i < info.Length(); ++i) {
     if (fxv8::IsArray(info[i])) {
       v8::Local<v8::Array> arr = info[i].As<v8::Array>();
@@ -5053,7 +5054,10 @@
       return;
     }
 
-    std::vector<std::vector<v8::Local<v8::Value>>> resolveValues(iLength - 2);
+    // TODO(crbug.com/pdfium/2090) - doublecheck use of std::vector
+    std::vector<v8::LocalVector<v8::Value>> resolveValues(
+        iLength - 2, v8::LocalVector<v8::Value>(info.GetIsolate()));
+
     bool bAttribute = false;
     bool bAllEmpty = true;
     for (uint32_t i = 2; i < iLength; i++) {
@@ -5074,7 +5078,7 @@
       return;
     }
 
-    std::vector<v8::Local<v8::Value>> values;
+    v8::LocalVector<v8::Value> values(pIsolate);
     values.push_back(fxv8::NewNumberHelper(pIsolate, 1));
     values.push_back(
         bAttribute ? fxv8::NewStringHelper(pIsolate, bsName.AsStringView())
@@ -5111,10 +5115,10 @@
   }
 
   bool bAttribute = false;
-  std::vector<v8::Local<v8::Value>> resolveValues =
+  v8::LocalVector<v8::Value> resolveValues =
       ParseResolveResult(pThis, maybeResult.value(), argAccessor, &bAttribute);
 
-  std::vector<v8::Local<v8::Value>> values(resolveValues.size() + 2);
+  v8::LocalVector<v8::Value> values(pIsolate, resolveValues.size() + 2);
   values[0] = fxv8::NewNumberHelper(pIsolate, 1);
   values[1] = bAttribute
                   ? fxv8::NewStringHelper(pIsolate, bsName.AsStringView())
diff --git a/fxjs/xfa/cfxjse_value.cpp b/fxjs/xfa/cfxjse_value.cpp
index 112a648..64c2015 100644
--- a/fxjs/xfa/cfxjse_value.cpp
+++ b/fxjs/xfa/cfxjse_value.cpp
@@ -16,6 +16,7 @@
 #include "v8/include/v8-container.h"
 #include "v8/include/v8-exception.h"
 #include "v8/include/v8-function.h"
+#include "v8/include/v8-local-handle.h"
 #include "v8/include/v8-primitive.h"
 #include "v8/include/v8-script.h"
 
@@ -97,7 +98,7 @@
     v8::Isolate* pIsolate,
     const std::vector<std::unique_ptr<CFXJSE_Value>>& values) {
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
-  std::vector<v8::Local<v8::Value>> local_values;
+  v8::LocalVector<v8::Value> local_values(pIsolate);
   local_values.reserve(values.size());
   for (auto& v : values) {
     if (v->IsEmpty())