Replace const-ref std::vector arguments with pdfium::span in fxjs.

Gets us closer to what will someday be required by removing many
occurrences of std::vector<v8::Local<T>>. Use pdfium's span until
proven incorrect later on, as v8::MemorySpan<> does not appear to
do any additional work besides holding a ptr/size pair in the
usual manner.

Nearly automatic change, fixed some IWYU manually.

Bug: pdfium:2090
Change-Id: I83431fc4069e27dfeeb60c36b081b28b4346ceed
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/113292
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index 0784e7e..5b2358c 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -20,6 +20,7 @@
 #include "fxjs/global_timer.h"
 #include "fxjs/ijs_event_context.h"
 #include "fxjs/js_resources.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-container.h"
 
 namespace {
@@ -201,7 +202,7 @@
 // note:
 // CFDF_Document * CPDFSDK_FormFillEnvironment::NewFDF();
 CJS_Result CJS_App::newFDF(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params) {
+                           pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
@@ -213,12 +214,12 @@
 // bUserConv);
 
 CJS_Result CJS_App::openFDF(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_App::alert(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params) {
+                          pdfium::span<v8::Local<v8::Value>> params) {
   std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
       pRuntime, params, 4, "cMsg", "nIcon", "nType", "cTitle");
 
@@ -268,7 +269,7 @@
 }
 
 CJS_Result CJS_App::beep(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params) {
+                         pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -280,15 +281,13 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_App::findComponent(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::findComponent(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_App::popUpMenuEx(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::popUpMenuEx(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
@@ -300,9 +299,8 @@
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_App::setInterval(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::setInterval(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() == 0 || params.size() > 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -328,9 +326,8 @@
   return CJS_Result::Success(pRetObj);
 }
 
-CJS_Result CJS_App::setTimeOut(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::setTimeOut(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() == 0 || params.size() > 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -357,9 +354,8 @@
   return CJS_Result::Success(pRetObj);
 }
 
-CJS_Result CJS_App::clearTimeOut(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::clearTimeOut(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -367,9 +363,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_App::clearInterval(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::clearInterval(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -390,9 +385,8 @@
   GlobalTimer::Cancel(pTimer->GetTimerID());
 }
 
-CJS_Result CJS_App::execMenuItem(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::execMenuItem(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
@@ -416,19 +410,19 @@
 }
 
 CJS_Result CJS_App::goBack(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params) {
+                           pdfium::span<v8::Local<v8::Value>> params) {
   // Not supported, but do not return error.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_App::goForward(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   // Not supported, but do not return error.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_App::mailMsg(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
       pRuntime, params, 6, "bUI", "cTo", "cCc", "cBcc", "cSubject", "cMsg");
 
@@ -469,7 +463,7 @@
 }
 
 CJS_Result CJS_App::launchURL(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported, but do not return error.
   return CJS_Result::Success();
 }
@@ -494,13 +488,12 @@
 }
 
 CJS_Result CJS_App::popUpMenu(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_App::browseForDoc(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::browseForDoc(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported, but do not return an error.
   return CJS_Result::Success();
 }
@@ -515,17 +508,17 @@
 }
 
 CJS_Result CJS_App::newDoc(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params) {
+                           pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_App::openDoc(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_App::response(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   std::vector<v8::Local<v8::Value>> newParams =
       ExpandKeywordParams(pRuntime, params, 5, "cQuestion", "cTitle",
                           "cDefault", "bPassword", "cLabel");
@@ -575,8 +568,7 @@
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_App::execDialog(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_App::execDialog(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
diff --git a/fxjs/cjs_app.h b/fxjs/cjs_app.h
index 23b5c1f..e151258 100644
--- a/fxjs/cjs_app.h
+++ b/fxjs/cjs_app.h
@@ -13,6 +13,7 @@
 
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 class CJS_Runtime;
 class GlobalTimer;
@@ -110,47 +111,47 @@
   CJS_Result set_viewer_version(CJS_Runtime* pRuntime, v8::Local<v8::Value> vp);
 
   CJS_Result alert(CJS_Runtime* pRuntime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result beep(CJS_Runtime* pRuntime,
-                  const std::vector<v8::Local<v8::Value>>& params);
+                  pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result browseForDoc(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result clearInterval(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result clearTimeOut(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result execDialog(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result execMenuItem(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result findComponent(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result goBack(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result goForward(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result launchURL(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result mailMsg(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result newFDF(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result newDoc(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result openDoc(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result openFDF(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result popUpMenuEx(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result popUpMenu(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result response(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setInterval(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setTimeOut(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
 
   void RunJsScript(CJS_Runtime* pRuntime, const WideString& wsScript);
   void ClearTimerCommon(CJS_Runtime* pRuntime, v8::Local<v8::Value> param);
diff --git a/fxjs/cjs_color.cpp b/fxjs/cjs_color.cpp
index 22b31fc..3e3c0aa 100644
--- a/fxjs/cjs_color.cpp
+++ b/fxjs/cjs_color.cpp
@@ -15,6 +15,7 @@
 #include "fxjs/cjs_runtime.h"
 #include "fxjs/fxv8.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-container.h"
 
 const JSPropertySpec CJS_Color::PropertySpecs[] = {
@@ -270,7 +271,7 @@
 }
 
 CJS_Result CJS_Color::convert(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -299,7 +300,7 @@
 }
 
 CJS_Result CJS_Color::equal(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/cjs_color.h b/fxjs/cjs_color.h
index b768709..751acd2 100644
--- a/fxjs/cjs_color.h
+++ b/fxjs/cjs_color.h
@@ -12,6 +12,7 @@
 #include "core/fxge/cfx_color.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 class CJS_Color final : public CJS_Object {
  public:
@@ -84,9 +85,9 @@
   CJS_Result set_yellow(CJS_Runtime* pRuntime, v8::Local<v8::Value> vp);
 
   CJS_Result convert(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result equal(CJS_Runtime* pRuntime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
 
   CJS_Result GetPropertyHelper(CJS_Runtime* pRuntime, CFX_Color* val);
   CJS_Result SetPropertyHelper(CJS_Runtime* pRuntime,
diff --git a/fxjs/cjs_console.cpp b/fxjs/cjs_console.cpp
index 91c2ca0..883c1d4 100644
--- a/fxjs/cjs_console.cpp
+++ b/fxjs/cjs_console.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cjs_event_context.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 const JSMethodSpec CJS_Console::MethodSpecs[] = {{"clear", clear_static},
                                                  {"hide", hide_static},
@@ -38,22 +39,21 @@
 CJS_Console::~CJS_Console() = default;
 
 CJS_Result CJS_Console::clear(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Console::hide(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Console::println(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Console::println(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Console::show(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
diff --git a/fxjs/cjs_console.h b/fxjs/cjs_console.h
index 5608d55..e99637f 100644
--- a/fxjs/cjs_console.h
+++ b/fxjs/cjs_console.h
@@ -11,6 +11,7 @@
 
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 class CJS_Console final : public CJS_Object {
  public:
@@ -31,13 +32,13 @@
   static const JSMethodSpec MethodSpecs[];
 
   CJS_Result clear(CJS_Runtime* pRuntime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result hide(CJS_Runtime* pRuntime,
-                  const std::vector<v8::Local<v8::Value>>& params);
+                  pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result println(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result show(CJS_Runtime* pRuntime,
-                  const std::vector<v8::Local<v8::Value>>& params);
+                  pdfium::span<v8::Local<v8::Value>> params);
 };
 
 #endif  // FXJS_CJS_CONSOLE_H_
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 5a842ce..cbb3598 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -32,6 +32,7 @@
 #include "fxjs/cjs_icon.h"
 #include "fxjs/js_resources.h"
 #include "third_party/base/check.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-container.h"
 
 const JSPropertySpec CJS_Document::PropertySpecs[] = {
@@ -207,44 +208,41 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::addAnnot(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::addAnnot(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   // Not supported, but do not return an error.
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::addField(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::addField(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   // Not supported, but do not return an error.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::exportAsText(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported, but do not return an error.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::exportAsFDF(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported, but do not return an error.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::exportAsXFDF(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported, but do not return an error.
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getField(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getField(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -273,7 +271,7 @@
 // Gets the name of the nth field in the document
 CJS_Result CJS_Document::getNthFieldName(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
   if (!m_pFormFillEnv)
@@ -293,28 +291,27 @@
 
 CJS_Result CJS_Document::importAnFDF(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::importAnXFDF(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::importTextData(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::mailDoc(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::mailDoc(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -355,9 +352,8 @@
 // exports the form data and mails the resulting fdf file as an attachment to
 // all recipients.
 // comment: need reader supports
-CJS_Result CJS_Document::mailForm(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::mailForm(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -404,9 +400,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::print(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::print(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   std::vector<v8::Local<v8::Value>> newParams = ExpandKeywordParams(
       pRuntime, params, 8, "bUI", "nStart", "nEnd", "bSilent", "bShrinkToFit",
       "bPrintAsImage", "bReverse", "bAnnotations");
@@ -460,7 +455,7 @@
 // note: if the filed name is not rational, adobe is dumb for it.
 CJS_Result CJS_Document::removeField(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
   if (!m_pFormFillEnv)
@@ -507,9 +502,8 @@
 // comment:
 // note: if the fields names r not rational, aodbe is dumb for it.
 
-CJS_Result CJS_Document::resetForm(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::resetForm(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -552,22 +546,20 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::saveAs(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::saveAs(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::syncAnnotScan(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::submitForm(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::submitForm(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   size_t nSize = params.size();
   if (nSize < 1)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -979,27 +971,23 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::addLink(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::addLink(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::closeDoc(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::closeDoc(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getPageBox(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getPageBox(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getAnnot(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getAnnot(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
   if (!m_pFormFillEnv)
@@ -1037,9 +1025,8 @@
   return CJS_Result::Success(pJS_Annot->ToV8Object());
 }
 
-CJS_Result CJS_Document::getAnnots(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getAnnots(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -1075,33 +1062,29 @@
   return CJS_Result::Success(annots);
 }
 
-CJS_Result CJS_Document::getAnnot3D(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getAnnot3D(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success(pRuntime->NewUndefined());
 }
 
 CJS_Result CJS_Document::getAnnots3D(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getOCGs(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getOCGs(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getLinks(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getLinks(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::addIcon(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::addIcon(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1147,9 +1130,8 @@
   return CJS_Result::Failure(JSMessage::kReadOnlyError);
 }
 
-CJS_Result CJS_Document::getIcon(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getIcon(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1172,16 +1154,15 @@
   return CJS_Result::Success(pJSIcon->ToV8Object());
 }
 
-CJS_Result CJS_Document::removeIcon(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::removeIcon(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, no supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::createDataObject(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not implemented.
   return CJS_Result::Success();
 }
@@ -1197,7 +1178,7 @@
 
 CJS_Result CJS_Document::calculateNow(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -1223,7 +1204,7 @@
 
 CJS_Result CJS_Document::getPageNthWord(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -1271,7 +1252,7 @@
 
 CJS_Result CJS_Document::getPageNthWordQuads(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -1284,7 +1265,7 @@
 
 CJS_Result CJS_Document::getPageNumWords(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
@@ -1316,7 +1297,7 @@
 
 CJS_Result CJS_Document::getPrintParams(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
@@ -1340,42 +1321,41 @@
 
 CJS_Result CJS_Document::deletePages(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::extractPages(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::insertPages(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::replacePages(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Document::getURL(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Document::getURL(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   // Unsafe, not supported.
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Document::gotoNamedDest(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/cjs_document.h b/fxjs/cjs_document.h
index d410a5e..4ec8e44 100644
--- a/fxjs/cjs_document.h
+++ b/fxjs/cjs_document.h
@@ -14,6 +14,7 @@
 #include "core/fxcrt/observed_ptr.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 class CPDFSDK_InteractiveForm;
 class CPDF_InteractiveForm;
@@ -215,90 +216,89 @@
   CJS_Result set_URL(CJS_Runtime* pRuntime, v8::Local<v8::Value> vp);
 
   CJS_Result addAnnot(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result addField(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result addLink(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result addIcon(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result calculateNow(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result closeDoc(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result createDataObject(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result deletePages(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result exportAsText(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result exportAsFDF(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result exportAsXFDF(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result extractPages(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getAnnot(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getAnnots(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getAnnot3D(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getAnnots3D(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getField(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getIcon(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getLinks(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getNthFieldName(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params);
+                             pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getOCGs(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getPageBox(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getPageNthWord(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params);
-  CJS_Result getPageNthWordQuads(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+                            pdfium::span<v8::Local<v8::Value>> params);
+  CJS_Result getPageNthWordQuads(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getPageNumWords(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params);
+                             pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getPrintParams(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params);
+                            pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getURL(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result gotoNamedDest(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result importAnFDF(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result importAnXFDF(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result importTextData(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params);
+                            pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result insertPages(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result mailForm(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result print(CJS_Runtime* pRuntime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result removeField(CJS_Runtime* pRuntime,
-                         const std::vector<v8::Local<v8::Value>>& params);
+                         pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result replacePages(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result resetForm(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result saveAs(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result submitForm(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result syncAnnotScan(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result mailDoc(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result removeIcon(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
 
   CJS_Result getPropertyInternal(CJS_Runtime* pRuntime,
                                  const ByteString& propName);
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index c9127dd..1724f81 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -29,6 +29,7 @@
 #include "fxjs/js_resources.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/base/check.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/notreached.h"
 #include "v8/include/v8-container.h"
 
@@ -2176,7 +2177,7 @@
 
 CJS_Result CJS_Field::browseForFileToSubmit(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CPDF_FormField* pFormField = GetFirstFormField();
   if (!pFormField)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
@@ -2195,7 +2196,7 @@
 
 CJS_Result CJS_Field::buttonGetCaption(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   int nface = 0;
   if (params.size() >= 1)
     nface = pRuntime->ToInt32(params[0]);
@@ -2226,9 +2227,8 @@
   return CJS_Result::Failure(JSMessage::kValueError);
 }
 
-CJS_Result CJS_Field::buttonGetIcon(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::buttonGetIcon(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() >= 1) {
     int nFace = pRuntime->ToInt32(params[0]);
     if (nFace < 0 || nFace > 2)
@@ -2259,25 +2259,23 @@
 
 CJS_Result CJS_Field::buttonImportIcon(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Field::buttonSetCaption(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_Field::buttonSetIcon(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::buttonSetIcon(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_Field::checkThisBox(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::checkThisBox(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   const size_t nSize = params.size();
   if (nSize == 0)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -2307,15 +2305,14 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Field::clearItems(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::clearItems(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Field::defaultIsChecked(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!m_bCanSet)
     return CJS_Result::Failure(JSMessage::kReadOnlyError);
 
@@ -2334,15 +2331,13 @@
       pRuntime->NewBoolean(IsCheckBoxOrRadioButton(pFormField)));
 }
 
-CJS_Result CJS_Field::deleteItemAt(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::deleteItemAt(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Field::getArray(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::getArray(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields();
   if (FieldArray.empty())
     return CJS_Result::Failure(JSMessage::kBadObjectError);
@@ -2375,9 +2370,8 @@
   return CJS_Result::Success(FormFieldArray);
 }
 
-CJS_Result CJS_Field::getItemAt(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::getItemAt(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   const size_t nSize = params.size();
   int nIdx = -1;
   if (nSize >= 1)
@@ -2410,19 +2404,17 @@
 }
 
 CJS_Result CJS_Field::getLock(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_Field::insertItemAt(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::insertItemAt(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Field::isBoxChecked(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::isBoxChecked(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = pRuntime->ToInt32(params[0]);
@@ -2441,7 +2433,7 @@
 
 CJS_Result CJS_Field::isDefaultChecked(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = pRuntime->ToInt32(params[0]);
@@ -2458,15 +2450,13 @@
        pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)));
 }
 
-CJS_Result CJS_Field::setAction(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::setAction(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Field::setFocus(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::setFocus(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   CPDF_FormField* pFormField = GetFirstFormField();
   if (!pFormField)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
@@ -2503,50 +2493,47 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJS_Field::setItems(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::setItems(CJS_Runtime* pRuntime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJS_Field::setLock(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_Field::signatureGetModifications(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_Field::signatureGetSeedValue(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_Field::signatureInfo(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::signatureInfo(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_Field::signatureSetSeedValue(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
-CJS_Result CJS_Field::signatureSign(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Field::signatureSign(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
 CJS_Result CJS_Field::signatureValidate(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
diff --git a/fxjs/cjs_field.h b/fxjs/cjs_field.h
index 7a66277..8d3b737 100644
--- a/fxjs/cjs_field.h
+++ b/fxjs/cjs_field.h
@@ -12,6 +12,7 @@
 #include "fxjs/cjs_document.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 
 class CFX_FloatRect;
 class CPDF_FormControl;
@@ -292,62 +293,59 @@
   CJS_Result get_source(CJS_Runtime* pRuntime);
   CJS_Result set_source(CJS_Runtime* pRuntime, v8::Local<v8::Value> vp);
 
-  CJS_Result browseForFileToSubmit(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+  CJS_Result browseForFileToSubmit(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result buttonGetCaption(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result buttonGetIcon(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result buttonImportIcon(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result buttonSetCaption(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result buttonSetIcon(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result checkThisBox(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result clearItems(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result defaultIsChecked(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result deleteItemAt(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getArray(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getItemAt(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result getLock(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result insertItemAt(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result isBoxChecked(CJS_Runtime* pRuntime,
-                          const std::vector<v8::Local<v8::Value>>& params);
+                          pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result isDefaultChecked(CJS_Runtime* pRuntime,
-                              const std::vector<v8::Local<v8::Value>>& params);
+                              pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setAction(CJS_Runtime* pRuntime,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setFocus(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setItems(CJS_Runtime* pRuntime,
-                      const std::vector<v8::Local<v8::Value>>& params);
+                      pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result setLock(CJS_Runtime* pRuntime,
-                     const std::vector<v8::Local<v8::Value>>& params);
+                     pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result signatureGetModifications(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  CJS_Result signatureGetSeedValue(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  CJS_Result signatureGetSeedValue(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result signatureInfo(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
-  CJS_Result signatureSetSeedValue(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
+  CJS_Result signatureSetSeedValue(CJS_Runtime* pRuntime,
+                                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result signatureSign(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result signatureValidate(CJS_Runtime* pRuntime,
-                               const std::vector<v8::Local<v8::Value>>& params);
+                               pdfium::span<v8::Local<v8::Value>> params);
 
   std::vector<CPDF_FormField*> GetFormFields() const;
   CPDF_FormField* GetFirstFormField() const;
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 5582682..66963b1 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -20,6 +20,7 @@
 #include "fxjs/js_resources.h"
 #include "third_party/base/check.h"
 #include "third_party/base/containers/contains.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-isolate.h"
 
 namespace {
@@ -254,7 +255,7 @@
 
 CJS_Result CJS_Global::setPersistent(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h
index 944c030..c26814a 100644
--- a/fxjs/cjs_global.h
+++ b/fxjs/cjs_global.h
@@ -15,6 +15,7 @@
 #include "fxjs/cfx_keyvalue.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/cjs_result.h"
+#include "third_party/base/containers/span.h"
 
 class CFX_GlobalData;
 
@@ -82,7 +83,7 @@
       v8::Local<v8::Object> pObj);
   void PutObjectProperty(v8::Local<v8::Object> obj, CFX_KeyValue* pData);
   CJS_Result setPersistent(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params);
+                           pdfium::span<v8::Local<v8::Value>> params);
   bool HasProperty(const ByteString& propname);
   bool DelProperty(const ByteString& propname);
   CJS_Result GetProperty(CJS_Runtime* pRuntime, const ByteString& propname);
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 07fe8c5..9ac0476 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -37,6 +37,7 @@
 #include "fxjs/js_resources.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/base/check.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/v8-container.h"
 
@@ -140,8 +141,7 @@
   return prefix + change + postfix;
 }
 
-template <CJS_Result (*F)(CJS_Runtime*,
-                          const std::vector<v8::Local<v8::Value>>&)>
+template <CJS_Result (*F)(CJS_Runtime*, pdfium::span<v8::Local<v8::Value>>)>
 void JSGlobalFunc(const char* func_name_string,
                   const v8::FunctionCallbackInfo<v8::Value>& info) {
   CJS_Object* pObj =
@@ -592,7 +592,7 @@
 // bCurrencyPrepend)
 CJS_Result CJS_PublicMethods::AFNumber_Format(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
 #if !BUILDFLAG(IS_ANDROID)
   if (params.size() != 6)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -699,7 +699,7 @@
 // bCurrencyPrepend)
 CJS_Result CJS_PublicMethods::AFNumber_Keystroke(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -786,7 +786,7 @@
 // function AFPercent_Format(nDec, sepStyle, bPercentPrepend)
 CJS_Result CJS_PublicMethods::AFPercent_Format(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
 #if !BUILDFLAG(IS_ANDROID)
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -874,14 +874,14 @@
 // AFPercent_Keystroke(nDec, sepStyle)
 CJS_Result CJS_PublicMethods::AFPercent_Keystroke(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return AFNumber_Keystroke(pRuntime, params);
 }
 
 // function AFDate_FormatEx(cFormat)
 CJS_Result CJS_PublicMethods::AFDate_FormatEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -955,7 +955,7 @@
 // AFDate_KeystrokeEx(cFormat)
 CJS_Result CJS_PublicMethods::AFDate_KeystrokeEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1) {
     return CJS_Result::Failure(WideString::FromASCII(
         "AFDate_KeystrokeEx's parameter size not correct"));
@@ -987,7 +987,7 @@
 
 CJS_Result CJS_PublicMethods::AFDate_Format(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1001,7 +1001,7 @@
 // AFDate_KeystrokeEx(cFormat)
 CJS_Result CJS_PublicMethods::AFDate_Keystroke(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1015,7 +1015,7 @@
 // function AFTime_Format(ptf)
 CJS_Result CJS_PublicMethods::AFTime_Format(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1028,7 +1028,7 @@
 
 CJS_Result CJS_PublicMethods::AFTime_Keystroke(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1041,20 +1041,20 @@
 
 CJS_Result CJS_PublicMethods::AFTime_FormatEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return AFDate_FormatEx(pRuntime, params);
 }
 
 CJS_Result CJS_PublicMethods::AFTime_KeystrokeEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return AFDate_KeystrokeEx(pRuntime, params);
 }
 
 // function AFSpecial_Format(psf)
 CJS_Result CJS_PublicMethods::AFSpecial_Format(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1089,7 +1089,7 @@
 // function AFSpecial_KeystrokeEx(mask)
 CJS_Result CJS_PublicMethods::AFSpecial_KeystrokeEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1172,7 +1172,7 @@
 // function AFSpecial_Keystroke(psf)
 CJS_Result CJS_PublicMethods::AFSpecial_Keystroke(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1206,7 +1206,7 @@
 
 CJS_Result CJS_PublicMethods::AFMergeChange(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1225,7 +1225,7 @@
 
 CJS_Result CJS_PublicMethods::AFParseDateEx(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1245,7 +1245,7 @@
 
 CJS_Result CJS_PublicMethods::AFSimple(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1268,7 +1268,7 @@
 
 CJS_Result CJS_PublicMethods::AFMakeNumber(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1285,7 +1285,7 @@
 
 CJS_Result CJS_PublicMethods::AFSimple_Calculate(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1380,7 +1380,7 @@
 // within the specified range.
 CJS_Result CJS_PublicMethods::AFRange_Validate(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 4)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -1425,7 +1425,7 @@
 
 CJS_Result CJS_PublicMethods::AFExtractNums(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/cjs_publicmethods.h b/fxjs/cjs_publicmethods.h
index ddf13cd..3117d76 100644
--- a/fxjs/cjs_publicmethods.h
+++ b/fxjs/cjs_publicmethods.h
@@ -11,6 +11,7 @@
 
 #include "fxjs/cjs_object.h"
 #include "fxjs/cjs_result.h"
+#include "third_party/base/containers/span.h"
 
 class CJS_PublicMethods final : public CJS_Object {
  public:
@@ -32,71 +33,57 @@
                                          const WideString& format);
   static bool IsNumber(const WideString& str);
 
-  static CJS_Result AFNumber_Format(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+  static CJS_Result AFNumber_Format(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFNumber_Keystroke(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFPercent_Format(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFPercent_Format(CJS_Runtime* pRuntime,
+                                     pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFPercent_Keystroke(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFDate_FormatEx(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFDate_FormatEx(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFDate_KeystrokeEx(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFDate_Format(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFDate_Keystroke(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFTime_FormatEx(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFDate_Format(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFDate_Keystroke(CJS_Runtime* pRuntime,
+                                     pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFTime_FormatEx(CJS_Runtime* pRuntime,
+                                    pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFTime_KeystrokeEx(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFTime_Format(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFTime_Keystroke(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFSpecial_Format(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFTime_Format(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFTime_Keystroke(CJS_Runtime* pRuntime,
+                                     pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFSpecial_Format(CJS_Runtime* pRuntime,
+                                     pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFSpecial_Keystroke(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFSpecial_KeystrokeEx(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFSimple(CJS_Runtime* pRuntime,
-                             const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFMakeNumber(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+                             pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFMakeNumber(CJS_Runtime* pRuntime,
+                                 pdfium::span<v8::Local<v8::Value>> params);
   static CJS_Result AFSimple_Calculate(
       CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFRange_Validate(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFMergeChange(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFParseDateEx(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
-  static CJS_Result AFExtractNums(
-      CJS_Runtime* pRuntime,
-      const std::vector<v8::Local<v8::Value>>& params);
+      pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFRange_Validate(CJS_Runtime* pRuntime,
+                                     pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFMergeChange(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFParseDateEx(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params);
+  static CJS_Result AFExtractNums(CJS_Runtime* pRuntime,
+                                  pdfium::span<v8::Local<v8::Value>> params);
 
   static void AFNumber_Format_static(
       const v8::FunctionCallbackInfo<v8::Value>& info);
diff --git a/fxjs/cjs_util.cpp b/fxjs/cjs_util.cpp
index 812e12b..7efb840 100644
--- a/fxjs/cjs_util.cpp
+++ b/fxjs/cjs_util.cpp
@@ -24,6 +24,7 @@
 #include "fxjs/js_define.h"
 #include "fxjs/js_resources.h"
 #include "third_party/base/check_op.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-date.h"
 
 #if BUILDFLAG(IS_ANDROID)
@@ -98,7 +99,7 @@
 CJS_Util::~CJS_Util() = default;
 
 CJS_Result CJS_Util::printf(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   const size_t num_params = params.size();
   if (num_params < 1)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -161,7 +162,7 @@
 }
 
 CJS_Result CJS_Util::printd(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   const size_t iSize = params.size();
   if (iSize < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -268,7 +269,7 @@
 }
 
 CJS_Result CJS_Util::printx(CJS_Runtime* pRuntime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -369,7 +370,7 @@
 }
 
 CJS_Result CJS_Util::scand(CJS_Runtime* pRuntime,
-                           const std::vector<v8::Local<v8::Value>>& params) {
+                           pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -385,9 +386,8 @@
   return CJS_Result::Success(pRuntime->NewDate(dDate));
 }
 
-CJS_Result CJS_Util::byteToChar(
-    CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJS_Util::byteToChar(CJS_Runtime* pRuntime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/cjs_util.h b/fxjs/cjs_util.h
index 45e58e0..6157172 100644
--- a/fxjs/cjs_util.h
+++ b/fxjs/cjs_util.h
@@ -12,6 +12,7 @@
 #include "core/fxcrt/widestring.h"
 #include "fxjs/cjs_object.h"
 #include "fxjs/js_define.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-forward.h"
 
 class CJS_Util final : public CJS_Object {
@@ -54,15 +55,15 @@
   static const JSMethodSpec MethodSpecs[];
 
   CJS_Result printd(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result printf(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result printx(CJS_Runtime* pRuntime,
-                    const std::vector<v8::Local<v8::Value>>& params);
+                    pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result scand(CJS_Runtime* pRuntime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
   CJS_Result byteToChar(CJS_Runtime* pRuntime,
-                        const std::vector<v8::Local<v8::Value>>& params);
+                        pdfium::span<v8::Local<v8::Value>> params);
 };
 
 #endif  // FXJS_CJS_UTIL_H_
diff --git a/fxjs/js_define.cpp b/fxjs/js_define.cpp
index b19c2e2..2664cb8 100644
--- a/fxjs/js_define.cpp
+++ b/fxjs/js_define.cpp
@@ -19,6 +19,7 @@
 #include "fxjs/fx_date_helpers.h"
 #include "fxjs/fxv8.h"
 #include "third_party/base/check.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-context.h"
 #include "v8/include/v8-function.h"
 #include "v8/include/v8-isolate.h"
@@ -61,7 +62,7 @@
 
 std::vector<v8::Local<v8::Value>> ExpandKeywordParams(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& originals,
+    pdfium::span<v8::Local<v8::Value>> originals,
     size_t nKeywords,
     ...) {
   DCHECK(nKeywords);
diff --git a/fxjs/js_define.h b/fxjs/js_define.h
index 5b6573a..d9264c0 100644
--- a/fxjs/js_define.h
+++ b/fxjs/js_define.h
@@ -15,6 +15,7 @@
 #include "fxjs/cjs_result.h"
 #include "fxjs/cjs_runtime.h"
 #include "fxjs/js_resources.h"
+#include "third_party/base/containers/span.h"
 
 class CJS_Object;
 
@@ -28,7 +29,7 @@
 // ones in the result using IsExpandedParamKnown() below.
 std::vector<v8::Local<v8::Value>> ExpandKeywordParams(
     CJS_Runtime* pRuntime,
-    const std::vector<v8::Local<v8::Value>>& originals,
+    pdfium::span<v8::Local<v8::Value>> originals,
     size_t nKeywords,
     ...);
 
@@ -110,8 +111,7 @@
 }
 
 template <class C,
-          CJS_Result (C::*M)(CJS_Runtime*,
-                             const std::vector<v8::Local<v8::Value>>&)>
+          CJS_Result (C::*M)(CJS_Runtime*, pdfium::span<v8::Local<v8::Value>>)>
 void JSMethod(const char* method_name_string,
               const char* class_name_string,
               const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/fxjs/xfa/cjx_container.cpp b/fxjs/xfa/cjx_container.cpp
index d6cabac..8e8fb3e 100644
--- a/fxjs/xfa/cjx_container.cpp
+++ b/fxjs/xfa/cjx_container.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/xfa/cfxjse_class.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/cppgc/allocation.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/parser/cxfa_arraynodelist.h"
@@ -31,15 +32,13 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Container::getDelta(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Container::getDelta(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Container::getDeltas(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Container::getDeltas(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* pDoc = GetDocument();
   auto* pList = cppgc::MakeGarbageCollected<CXFA_ArrayNodeList>(
       pDoc->GetHeap()->GetAllocationHandle(), pDoc);
diff --git a/fxjs/xfa/cjx_datawindow.cpp b/fxjs/xfa/cjx_datawindow.cpp
index 10f8365..cc6de50 100644
--- a/fxjs/xfa/cjx_datawindow.cpp
+++ b/fxjs/xfa/cjx_datawindow.cpp
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "xfa/fxfa/parser/cscript_datawindow.h"
 
 const CJX_MethodSpec CJX_DataWindow::MethodSpecs[] = {
@@ -30,25 +31,24 @@
 
 CJS_Result CJX_DataWindow::moveCurrentRecord(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_DataWindow::record(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_DataWindow::record(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_DataWindow::gotoRecord(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_DataWindow::isRecordGroup(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
diff --git a/fxjs/xfa/cjx_delta.cpp b/fxjs/xfa/cjx_delta.cpp
index 266ddef..fb535e9 100644
--- a/fxjs/xfa/cjx_delta.cpp
+++ b/fxjs/xfa/cjx_delta.cpp
@@ -10,6 +10,7 @@
 
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "xfa/fxfa/parser/cxfa_delta.h"
 
 const CJX_MethodSpec CJX_Delta::MethodSpecs[] = {{"restore", restore_static}};
@@ -25,7 +26,7 @@
 }
 
 CJS_Result CJX_Delta::restore(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_desc.cpp b/fxjs/xfa/cjx_desc.cpp
index 792f076..173b810 100644
--- a/fxjs/xfa/cjx_desc.cpp
+++ b/fxjs/xfa/cjx_desc.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/parser/cxfa_desc.h"
 
@@ -27,7 +28,7 @@
 }
 
 CJS_Result CJX_Desc::metadata(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 0 && params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_eventpseudomodel.cpp b/fxjs/xfa/cjx_eventpseudomodel.cpp
index 8f9d076..1032a99 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.cpp
+++ b/fxjs/xfa/cjx_eventpseudomodel.cpp
@@ -11,6 +11,7 @@
 
 #include "fxjs/fxv8.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/notreached.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/v8-primitive.h"
@@ -200,7 +201,7 @@
 
 CJS_Result CJX_EventPseudoModel::emit(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_EventParam* pEventParam = runtime->GetEventParam();
   if (!pEventParam)
     return CJS_Result::Success();
@@ -215,7 +216,7 @@
 
 CJS_Result CJX_EventPseudoModel::reset(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_EventParam* pEventParam = runtime->GetEventParam();
   if (pEventParam)
     *pEventParam = CXFA_EventParam();
diff --git a/fxjs/xfa/cjx_exclgroup.cpp b/fxjs/xfa/cjx_exclgroup.cpp
index 641f0f2..9d5cfef 100644
--- a/fxjs/xfa/cjx_exclgroup.cpp
+++ b/fxjs/xfa/cjx_exclgroup.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
@@ -36,9 +37,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_ExclGroup::execEvent(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_ExclGroup::execEvent(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -49,7 +49,7 @@
 
 CJS_Result CJX_ExclGroup::execInitialize(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -62,7 +62,7 @@
 
 CJS_Result CJX_ExclGroup::execCalculate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -75,7 +75,7 @@
 
 CJS_Result CJX_ExclGroup::execValidate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -91,7 +91,7 @@
 
 CJS_Result CJX_ExclGroup::selectedMember(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_field.cpp b/fxjs/xfa/cjx_field.cpp
index 8d158dc..7c21b95 100644
--- a/fxjs/xfa/cjx_field.cpp
+++ b/fxjs/xfa/cjx_field.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fgas/crt/cfgas_decimal.h"
@@ -45,18 +46,16 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Field::clearItems(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::clearItems(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Node* node = GetXFANode();
   if (node->IsWidgetReady())
     node->DeleteItem(-1, true, false);
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Field::execEvent(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::execEvent(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -72,7 +71,7 @@
 
 CJS_Result CJX_Field::execInitialize(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -84,9 +83,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Field::deleteItem(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::deleteItem(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -98,9 +96,8 @@
   return CJS_Result::Success(runtime->NewBoolean(bValue));
 }
 
-CJS_Result CJX_Field::getSaveItem(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::getSaveItem(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -120,9 +117,8 @@
       runtime->NewString(value->ToUTF8().AsStringView()));
 }
 
-CJS_Result CJX_Field::boundItem(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::boundItem(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -136,9 +132,8 @@
       runtime->NewString(boundValue.ToUTF8().AsStringView()));
 }
 
-CJS_Result CJX_Field::getItemState(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::getItemState(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -150,9 +145,8 @@
   return CJS_Result::Success(runtime->NewBoolean(state != 0));
 }
 
-CJS_Result CJX_Field::execCalculate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::execCalculate(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -166,7 +160,7 @@
 
 CJS_Result CJX_Field::getDisplayItem(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -186,9 +180,8 @@
       runtime->NewString(value->ToUTF8().AsStringView()));
 }
 
-CJS_Result CJX_Field::setItemState(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::setItemState(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -208,7 +201,7 @@
 }
 
 CJS_Result CJX_Field::addItem(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1 && params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -228,9 +221,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Field::execValidate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Field::execValidate(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_form.cpp b/fxjs/xfa/cjx_form.cpp
index ec68b70..462b47a 100644
--- a/fxjs/xfa/cjx_form.cpp
+++ b/fxjs/xfa/cjx_form.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/cppgc/allocation.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
@@ -38,9 +39,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Form::formNodes(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Form::formNodes(CFXJSE_Engine* runtime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -58,7 +58,7 @@
 }
 
 CJS_Result CJX_Form::remerge(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -66,9 +66,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Form::execInitialize(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Form::execInitialize(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -79,9 +78,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Form::recalculate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Form::recalculate(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_EventParam* pEventParam = runtime->GetEventParam();
   if (pEventParam && (pEventParam->m_eType == XFA_EVENT_Calculate ||
                       pEventParam->m_eType == XFA_EVENT_InitCalculate)) {
@@ -100,9 +98,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Form::execCalculate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Form::execCalculate(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -113,9 +110,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Form::execValidate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Form::execValidate(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 0)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index f79a0cd..00a6eb1 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -12,6 +12,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "third_party/base/check.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/cxfa_ffnotify.h"
@@ -258,7 +259,7 @@
 
 CJS_Result CJX_HostPseudoModel::gotoURL(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -276,7 +277,7 @@
 
 CJS_Result CJX_HostPseudoModel::openList(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -316,7 +317,7 @@
 
 CJS_Result CJX_HostPseudoModel::response(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 4)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -348,13 +349,13 @@
 
 CJS_Result CJX_HostPseudoModel::documentInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success(runtime->NewNumber(0));
 }
 
 CJS_Result CJX_HostPseudoModel::resetData(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() > 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -401,7 +402,7 @@
 
 CJS_Result CJX_HostPseudoModel::beep(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -423,7 +424,7 @@
 
 CJS_Result CJX_HostPseudoModel::setFocus(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -463,7 +464,7 @@
 
 CJS_Result CJX_HostPseudoModel::getFocus(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (!pNotify)
     return CJS_Result::Success();
@@ -477,7 +478,7 @@
 
 CJS_Result CJX_HostPseudoModel::messageBox(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -518,13 +519,13 @@
 
 CJS_Result CJX_HostPseudoModel::documentCountInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success(runtime->NewNumber(0));
 }
 
 CJS_Result CJX_HostPseudoModel::print(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!runtime->IsRunAtClient()) {
     return CJS_Result::Success();
   }
@@ -558,7 +559,7 @@
 
 CJS_Result CJX_HostPseudoModel::importData(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -567,7 +568,7 @@
 
 CJS_Result CJX_HostPseudoModel::exportData(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -589,7 +590,7 @@
 
 CJS_Result CJX_HostPseudoModel::pageUp(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (!pNotify)
     return CJS_Result::Success();
@@ -605,7 +606,7 @@
 
 CJS_Result CJX_HostPseudoModel::pageDown(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (!pNotify)
     return CJS_Result::Success();
diff --git a/fxjs/xfa/cjx_instancemanager.cpp b/fxjs/xfa/cjx_instancemanager.cpp
index 58a14a1..2e3a375 100644
--- a/fxjs/xfa/cjx_instancemanager.cpp
+++ b/fxjs/xfa/cjx_instancemanager.cpp
@@ -13,6 +13,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "third_party/base/check_op.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
@@ -133,7 +134,7 @@
 
 CJS_Result CJX_InstanceManager::moveInstance(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* doc = runtime->GetDocument();
   if (doc->GetFormType() != FormType::kXFAFull)
     return CJS_Result::Failure(JSMessage::kNotSupportedError);
@@ -163,7 +164,7 @@
 
 CJS_Result CJX_InstanceManager::removeInstance(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* doc = runtime->GetDocument();
   if (doc->GetFormType() != FormType::kXFAFull)
     return CJS_Result::Failure(JSMessage::kNotSupportedError);
@@ -202,7 +203,7 @@
 
 CJS_Result CJX_InstanceManager::setInstances(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* doc = runtime->GetDocument();
   if (doc->GetFormType() != FormType::kXFAFull)
     return CJS_Result::Failure(JSMessage::kNotSupportedError);
@@ -216,7 +217,7 @@
 
 CJS_Result CJX_InstanceManager::addInstance(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* doc = runtime->GetDocument();
   if (doc->GetFormType() != FormType::kXFAFull)
     return CJS_Result::Failure(JSMessage::kNotSupportedError);
@@ -252,7 +253,7 @@
 
 CJS_Result CJX_InstanceManager::insertInstance(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Document* doc = runtime->GetDocument();
   if (doc->GetFormType() != FormType::kXFAFull)
     return CJS_Result::Failure(JSMessage::kNotSupportedError);
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index 484d883..f270bf5 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -84,7 +84,7 @@
 
 CJS_Result CJX_LayoutPseudoModel::DoHWXYInternal(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params,
+    pdfium::span<v8::Local<v8::Value>> params,
     HWXY layoutModel) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
@@ -140,27 +140,23 @@
       runtime->NewNumber(FXSYS_roundf(fValue * 1000) / 1000.0f));
 }
 
-CJS_Result CJX_LayoutPseudoModel::h(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_LayoutPseudoModel::h(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return DoHWXYInternal(runtime, params, HWXY::kH);
 }
 
-CJS_Result CJX_LayoutPseudoModel::w(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_LayoutPseudoModel::w(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return DoHWXYInternal(runtime, params, HWXY::kW);
 }
 
-CJS_Result CJX_LayoutPseudoModel::x(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_LayoutPseudoModel::x(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return DoHWXYInternal(runtime, params, HWXY::kX);
 }
 
-CJS_Result CJX_LayoutPseudoModel::y(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_LayoutPseudoModel::y(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   return DoHWXYInternal(runtime, params, HWXY::kY);
 }
 
@@ -187,13 +183,13 @@
 
 CJS_Result CJX_LayoutPseudoModel::pageCount(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return NumberedPageCount(runtime);
 }
 
 CJS_Result CJX_LayoutPseudoModel::pageSpan(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -215,7 +211,7 @@
 
 CJS_Result CJX_LayoutPseudoModel::page(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return PageInternals(runtime, params, false);
 }
 
@@ -352,7 +348,7 @@
 
 CJS_Result CJX_LayoutPseudoModel::pageContent(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -384,25 +380,25 @@
 
 CJS_Result CJX_LayoutPseudoModel::absPageCount(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return AllPageCount(runtime);
 }
 
 CJS_Result CJX_LayoutPseudoModel::absPageCountInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success(runtime->NewNumber(0));
 }
 
 CJS_Result CJX_LayoutPseudoModel::sheetCountInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success(runtime->NewNumber(0));
 }
 
 CJS_Result CJX_LayoutPseudoModel::relayout(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   CXFA_Node* pRootNode = GetDocument()->GetRoot();
   auto* pLayoutProcessor = GetDocument()->GetLayoutProcessor();
   CXFA_Form* pFormRoot =
@@ -417,13 +413,13 @@
 
 CJS_Result CJX_LayoutPseudoModel::absPageSpan(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return pageSpan(runtime, params);
 }
 
 CJS_Result CJX_LayoutPseudoModel::absPageInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -432,7 +428,7 @@
 
 CJS_Result CJX_LayoutPseudoModel::sheetInBatch(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -441,31 +437,31 @@
 
 CJS_Result CJX_LayoutPseudoModel::sheet(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return PageInternals(runtime, params, true);
 }
 
 CJS_Result CJX_LayoutPseudoModel::relayoutPageArea(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_LayoutPseudoModel::sheetCount(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return AllPageCount(runtime);
 }
 
 CJS_Result CJX_LayoutPseudoModel::absPage(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return PageInternals(runtime, params, true);
 }
 
 CJS_Result CJX_LayoutPseudoModel::PageInternals(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params,
+    pdfium::span<v8::Local<v8::Value>> params,
     bool bAbsPage) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.h b/fxjs/xfa/cjx_layoutpseudomodel.h
index 80cf310..17bbfc3 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.h
+++ b/fxjs/xfa/cjx_layoutpseudomodel.h
@@ -11,6 +11,7 @@
 
 #include "fxjs/xfa/cjx_object.h"
 #include "fxjs/xfa/jse_define.h"
+#include "third_party/base/containers/span.h"
 
 class CScript_LayoutPseudoModel;
 class CXFA_LayoutProcessor;
@@ -60,14 +61,14 @@
   CJS_Result AllPageCount(CFXJSE_Engine* runtime);
   CJS_Result NumberedPageCount(CFXJSE_Engine* runtime);
   CJS_Result DoHWXYInternal(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params,
+                            pdfium::span<v8::Local<v8::Value>> params,
                             HWXY layoutModel);
   std::vector<CXFA_Node*> GetObjArray(CXFA_LayoutProcessor* pDocLayout,
                                       int32_t iPageNo,
                                       const WideString& wsType,
                                       bool bOnPageArea);
   CJS_Result PageInternals(CFXJSE_Engine* runtime,
-                           const std::vector<v8::Local<v8::Value>>& params,
+                           pdfium::span<v8::Local<v8::Value>> params,
                            bool bAbsPage);
 };
 
diff --git a/fxjs/xfa/cjx_list.cpp b/fxjs/xfa/cjx_list.cpp
index 8c4735d..9eccdcd 100644
--- a/fxjs/xfa/cjx_list.cpp
+++ b/fxjs/xfa/cjx_list.cpp
@@ -12,6 +12,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_class.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
@@ -39,7 +40,7 @@
 }
 
 CJS_Result CJX_List::append(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -54,7 +55,7 @@
 }
 
 CJS_Result CJX_List::insert(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -70,7 +71,7 @@
 }
 
 CJS_Result CJX_List::remove(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -83,7 +84,7 @@
 }
 
 CJS_Result CJX_List::item(CFXJSE_Engine* runtime,
-                          const std::vector<v8::Local<v8::Value>>& params) {
+                          pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_logpseudomodel.cpp b/fxjs/xfa/cjx_logpseudomodel.cpp
index a100697..01faaad 100644
--- a/fxjs/xfa/cjx_logpseudomodel.cpp
+++ b/fxjs/xfa/cjx_logpseudomodel.cpp
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "xfa/fxfa/parser/cscript_logpseudomodel.h"
 
 const CJX_MethodSpec CJX_LogPseudoModel::MethodSpecs[] = {
@@ -31,7 +32,7 @@
 
 CJS_Result CJX_LogPseudoModel::message(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // Uncomment to allow using xfa.log.message(""); from JS.
   // fprintf(stderr, "LOG\n");
   // for (auto& val : params) {
@@ -44,24 +45,24 @@
 
 CJS_Result CJX_LogPseudoModel::traceEnabled(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_LogPseudoModel::traceActivate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_LogPseudoModel::traceDeactivate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_LogPseudoModel::trace(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
diff --git a/fxjs/xfa/cjx_manifest.cpp b/fxjs/xfa/cjx_manifest.cpp
index 7d4e6e6..9450187 100644
--- a/fxjs/xfa/cjx_manifest.cpp
+++ b/fxjs/xfa/cjx_manifest.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/parser/cxfa_manifest.h"
 
@@ -27,9 +28,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Manifest::evaluate(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Manifest::evaluate(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_model.cpp b/fxjs/xfa/cjx_model.cpp
index e94954e..00529e7 100644
--- a/fxjs/xfa/cjx_model.cpp
+++ b/fxjs/xfa/cjx_model.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/parser/cxfa_delta.h"
 #include "xfa/fxfa/parser/cxfa_document.h"
@@ -33,13 +34,12 @@
 
 CJS_Result CJX_Model::clearErrorList(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Model::createNode(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Model::createNode(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -70,7 +70,7 @@
 
 CJS_Result CJX_Model::isCompatibleNS(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_node.cpp b/fxjs/xfa/cjx_node.cpp
index 9db88ba..d7e2c06 100644
--- a/fxjs/xfa/cjx_node.cpp
+++ b/fxjs/xfa/cjx_node.cpp
@@ -19,6 +19,7 @@
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
@@ -113,7 +114,7 @@
 }
 
 CJS_Result CJX_Node::applyXSL(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -121,9 +122,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Node::assignNode(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Node::assignNode(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -132,7 +132,7 @@
 }
 
 CJS_Result CJX_Node::clone(CFXJSE_Engine* runtime,
-                           const std::vector<v8::Local<v8::Value>>& params) {
+                           pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -140,9 +140,8 @@
   return CJS_Result::Success(runtime->GetOrCreateJSBindingFromMap(pCloneNode));
 }
 
-CJS_Result CJX_Node::getAttribute(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Node::getAttribute(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -151,9 +150,8 @@
       GetAttributeByString(expression.AsStringView()).ToUTF8().AsStringView()));
 }
 
-CJS_Result CJX_Node::getElement(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Node::getElement(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -172,7 +170,7 @@
 
 CJS_Result CJX_Node::isPropertySpecified(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -199,7 +197,7 @@
 }
 
 CJS_Result CJX_Node::loadXML(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 3)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -324,13 +322,13 @@
 
 CJS_Result CJX_Node::saveFilteredXML(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   // TODO(weili): Check whether we need to implement this, pdfium:501.
   return CJS_Result::Success();
 }
 
 CJS_Result CJX_Node::saveXML(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() > 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -371,9 +369,8 @@
       runtime->NewString(ByteStringView(pMemoryStream->GetSpan())));
 }
 
-CJS_Result CJX_Node::setAttribute(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Node::setAttribute(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -387,9 +384,8 @@
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Node::setElement(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Node::setElement(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1 && params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 7542e8a..2479b4a 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -26,6 +26,7 @@
 #include "third_party/base/check.h"
 #include "third_party/base/check_op.h"
 #include "third_party/base/containers/contains.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-forward.h"
 #include "v8/include/v8-object.h"
 #include "v8/include/v8-primitive.h"
@@ -158,10 +159,9 @@
   return pdfium::Contains(method_specs_, func.ToUTF8());
 }
 
-CJS_Result CJX_Object::RunMethod(
-    CFXJSE_Engine* pScriptContext,
-    const WideString& func,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Object::RunMethod(CFXJSE_Engine* pScriptContext,
+                                 const WideString& func,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   auto it = method_specs_.find(func.ToUTF8());
   if (it == method_specs_.end())
     return CJS_Result::Failure(JSMessage::kUnknownMethod);
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 51a2a13..fb98185 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -35,7 +35,7 @@
 using CJX_MethodCall =
     CJS_Result (*)(CJX_Object* obj,
                    CFXJSE_Engine* runtime,
-                   const std::vector<v8::Local<v8::Value>>& params);
+                   pdfium::span<v8::Local<v8::Value>> params);
 
 struct CJX_MethodSpec {
   const char* pName;
@@ -121,7 +121,7 @@
   bool HasMethod(const WideString& func) const;
   CJS_Result RunMethod(CFXJSE_Engine* pScriptContext,
                        const WideString& func,
-                       const std::vector<v8::Local<v8::Value>>& params);
+                       pdfium::span<v8::Local<v8::Value>> params);
 
   bool HasAttribute(XFA_Attribute eAttr) const;
   WideString GetAttributeByString(WideStringView attr) const;
diff --git a/fxjs/xfa/cjx_packet.cpp b/fxjs/xfa/cjx_packet.cpp
index e77f165..b7d36e8 100644
--- a/fxjs/xfa/cjx_packet.cpp
+++ b/fxjs/xfa/cjx_packet.cpp
@@ -15,6 +15,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/cxfa_ffnotify.h"
@@ -35,9 +36,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Packet::getAttribute(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Packet::getAttribute(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -50,9 +50,8 @@
       runtime->NewString(attributeValue.ToUTF8().AsStringView()));
 }
 
-CJS_Result CJX_Packet::setAttribute(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Packet::setAttribute(CFXJSE_Engine* runtime,
+                                    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -66,7 +65,7 @@
 
 CJS_Result CJX_Packet::removeAttribute(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_signaturepseudomodel.cpp b/fxjs/xfa/cjx_signaturepseudomodel.cpp
index a740cb8..4734c47 100644
--- a/fxjs/xfa/cjx_signaturepseudomodel.cpp
+++ b/fxjs/xfa/cjx_signaturepseudomodel.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/parser/cscript_signaturepseudomodel.h"
 
@@ -34,7 +35,7 @@
 
 CJS_Result CJX_SignaturePseudoModel::verifySignature(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 4)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -43,7 +44,7 @@
 
 CJS_Result CJX_SignaturePseudoModel::sign(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() < 3 || params.size() > 7)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -52,7 +53,7 @@
 
 CJS_Result CJX_SignaturePseudoModel::enumerate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -61,7 +62,7 @@
 
 CJS_Result CJX_SignaturePseudoModel::clear(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.empty() || params.size() > 2)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_source.cpp b/fxjs/xfa/cjx_source.cpp
index 33a11ff..fd1a6cb 100644
--- a/fxjs/xfa/cjx_source.cpp
+++ b/fxjs/xfa/cjx_source.cpp
@@ -10,6 +10,7 @@
 
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "xfa/fxfa/parser/cxfa_source.h"
 
 const CJX_MethodSpec CJX_Source::MethodSpecs[] = {
@@ -42,16 +43,15 @@
 }
 
 CJS_Result CJX_Source::next(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Source::cancelBatch(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Source::cancelBatch(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -59,25 +59,23 @@
 }
 
 CJS_Result CJX_Source::first(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Source::updateBatch(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Source::updateBatch(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Source::previous(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Source::previous(CFXJSE_Engine* runtime,
+                                pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -85,7 +83,7 @@
 }
 
 CJS_Result CJX_Source::isBOF(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -93,7 +91,7 @@
 }
 
 CJS_Result CJX_Source::isEOF(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -101,7 +99,7 @@
 }
 
 CJS_Result CJX_Source::cancel(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -109,7 +107,7 @@
 }
 
 CJS_Result CJX_Source::update(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -117,16 +115,15 @@
 }
 
 CJS_Result CJX_Source::open(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Source::deleteItem(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Source::deleteItem(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -134,16 +131,15 @@
 }
 
 CJS_Result CJX_Source::addNew(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success();
 }
 
-CJS_Result CJX_Source::requery(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Source::requery(CFXJSE_Engine* runtime,
+                               pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -151,7 +147,7 @@
 }
 
 CJS_Result CJX_Source::resync(CFXJSE_Engine* runtime,
-                              const std::vector<v8::Local<v8::Value>>& params) {
+                              pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -159,7 +155,7 @@
 }
 
 CJS_Result CJX_Source::close(CFXJSE_Engine* runtime,
-                             const std::vector<v8::Local<v8::Value>>& params) {
+                             pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -167,7 +163,7 @@
 }
 
 CJS_Result CJX_Source::last(CFXJSE_Engine* runtime,
-                            const std::vector<v8::Local<v8::Value>>& params) {
+                            pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -176,7 +172,7 @@
 
 CJS_Result CJX_Source::hasDataChanged(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_subform.cpp b/fxjs/xfa/cjx_subform.cpp
index 5a4efc0..4fdad59 100644
--- a/fxjs/xfa/cjx_subform.cpp
+++ b/fxjs/xfa/cjx_subform.cpp
@@ -12,6 +12,7 @@
 #include "fxjs/fxv8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffnotify.h"
@@ -35,9 +36,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Subform::execEvent(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Subform::execEvent(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -48,7 +48,7 @@
 
 CJS_Result CJX_Subform::execInitialize(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -61,7 +61,7 @@
 
 CJS_Result CJX_Subform::execCalculate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -74,7 +74,7 @@
 
 CJS_Result CJX_Subform::execValidate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_template.cpp b/fxjs/xfa/cjx_template.cpp
index e3779e3..321036c 100644
--- a/fxjs/xfa/cjx_template.cpp
+++ b/fxjs/xfa/cjx_template.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/parser/cxfa_document.h"
 #include "xfa/fxfa/parser/cxfa_template.h"
@@ -33,18 +34,16 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Template::formNodes(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Template::formNodes(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
   return CJS_Result::Success(runtime->NewBoolean(true));
 }
 
-CJS_Result CJX_Template::remerge(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Template::remerge(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -54,7 +53,7 @@
 
 CJS_Result CJX_Template::execInitialize(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -64,7 +63,7 @@
 
 CJS_Result CJX_Template::recalculate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -73,7 +72,7 @@
 
 CJS_Result CJX_Template::execCalculate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -83,7 +82,7 @@
 
 CJS_Result CJX_Template::execValidate(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty())
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_tree.cpp b/fxjs/xfa/cjx_tree.cpp
index daabd09..8fe54e4 100644
--- a/fxjs/xfa/cjx_tree.cpp
+++ b/fxjs/xfa/cjx_tree.cpp
@@ -12,6 +12,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_class.h"
 #include "fxjs/xfa/cfxjse_engine.h"
+#include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "v8/include/cppgc/allocation.h"
 #include "v8/include/v8-object.h"
@@ -36,9 +37,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-CJS_Result CJX_Tree::resolveNode(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Tree::resolveNode(CFXJSE_Engine* runtime,
+                                 pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
@@ -76,9 +76,8 @@
   return CJS_Result::Success(pValue);
 }
 
-CJS_Result CJX_Tree::resolveNodes(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_Tree::resolveNodes(CFXJSE_Engine* runtime,
+                                  pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_treelist.cpp b/fxjs/xfa/cjx_treelist.cpp
index a721349..898804a 100644
--- a/fxjs/xfa/cjx_treelist.cpp
+++ b/fxjs/xfa/cjx_treelist.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-object.h"
 #include "xfa/fxfa/parser/cxfa_document.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
@@ -33,9 +34,8 @@
   return ToTreeList(GetXFAObject());
 }
 
-CJS_Result CJX_TreeList::namedItem(
-    CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+CJS_Result CJX_TreeList::namedItem(CFXJSE_Engine* runtime,
+                                   pdfium::span<v8::Local<v8::Value>> params) {
   if (params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/cjx_wsdlconnection.cpp b/fxjs/xfa/cjx_wsdlconnection.cpp
index 1f7f45e..c7c1983 100644
--- a/fxjs/xfa/cjx_wsdlconnection.cpp
+++ b/fxjs/xfa/cjx_wsdlconnection.cpp
@@ -11,6 +11,7 @@
 #include "fxjs/cfx_v8.h"
 #include "fxjs/js_resources.h"
 #include "fxjs/xfa/cfxjse_value.h"
+#include "third_party/base/containers/span.h"
 #include "v8/include/v8-primitive.h"
 #include "xfa/fxfa/parser/cxfa_wsdlconnection.h"
 
@@ -30,7 +31,7 @@
 
 CJS_Result CJX_WsdlConnection::execute(
     CFXJSE_Engine* runtime,
-    const std::vector<v8::Local<v8::Value>>& params) {
+    pdfium::span<v8::Local<v8::Value>> params) {
   if (!params.empty() && params.size() != 1)
     return CJS_Result::Failure(JSMessage::kParamError);
 
diff --git a/fxjs/xfa/jse_define.h b/fxjs/xfa/jse_define.h
index 0800601..7b991b1 100644
--- a/fxjs/xfa/jse_define.h
+++ b/fxjs/xfa/jse_define.h
@@ -10,19 +10,20 @@
 #include <vector>
 
 #include "fxjs/cjs_result.h"
+#include "third_party/base/containers/span.h"
 
 class CFXJSE_Engine;
 
 #define JSE_METHOD(method_name)                                      \
   static CJS_Result method_name##_static(                            \
       CJX_Object* node, CFXJSE_Engine* runtime,                      \
-      const std::vector<v8::Local<v8::Value>>& params) {             \
+      pdfium::span<v8::Local<v8::Value>> params) {                   \
     if (!node->DynamicTypeIs(static_type__))                         \
       return CJS_Result::Failure(JSMessage::kBadObjectError);        \
     return static_cast<Type__*>(node)->method_name(runtime, params); \
   }                                                                  \
   CJS_Result method_name(CFXJSE_Engine* runtime,                     \
-                         const std::vector<v8::Local<v8::Value>>& params)
+                         pdfium::span<v8::Local<v8::Value>> params)
 
 #define JSE_PROP(prop_name)                                                 \
   static void prop_name##_static(v8::Isolate* pIsolate, CJX_Object* node,   \