Remove CJS_Value constructors

This CL removes most of the CJS_Value constructors and leaves the
v8::Local<v8::Value> constructor as the only non-default construtor.
Change-Id: Ie98260d10eff645d0ca688b353e7d40ba1aac157
Reviewed-on: https://pdfium-review.googlesource.com/16611
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index a47deea..c406425 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -325,7 +325,9 @@
       static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pFieldObj));
   Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
   pField->AttachField(this, wideName);
-  vRet = CJS_Value(pJSField);
+
+  if (pJSField)
+    vRet = CJS_Value(pJSField->ToV8Object());
   return true;
 }
 
@@ -353,7 +355,7 @@
   if (!pField)
     return false;
 
-  vRet = CJS_Value(pRuntime, pField->GetFullName().c_str());
+  vRet = CJS_Value(pRuntime->NewString(pField->GetFullName().c_str()));
   return true;
 }
 
@@ -1279,7 +1281,9 @@
       static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
   Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
   pAnnot->SetSDKAnnot(pSDKBAAnnot);
-  vRet = CJS_Value(pJS_Annot);
+  if (pJS_Annot)
+    vRet = CJS_Value(pJS_Annot->ToV8Object());
+
   return true;
 }
 
@@ -1317,10 +1321,12 @@
           static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
       Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
       pAnnot->SetSDKAnnot(static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur.Get()));
-      annots.SetElement(pRuntime, i, CJS_Value(pJS_Annot));
+      annots.SetElement(
+          pRuntime, i,
+          pJS_Annot ? CJS_Value(pJS_Annot->ToV8Object()) : CJS_Value());
     }
   }
-  vRet = CJS_Value(pRuntime, annots);
+  vRet = CJS_Value(annots.ToV8Array(pRuntime));
   return true;
 }
 
@@ -1408,7 +1414,9 @@
         static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
     Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
     pIcon->SetIconName(name);
-    Icons.SetElement(pRuntime, i++, CJS_Value(pJS_Icon));
+    Icons.SetElement(
+        pRuntime, i++,
+        pJS_Icon ? CJS_Value(pJS_Icon->ToV8Object()) : CJS_Value());
   }
 
   vp->Set(Icons.ToV8Array(pRuntime));
@@ -1444,7 +1452,9 @@
   CJS_Icon* pJS_Icon = static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
   Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
   pIcon->SetIconName(*it);
-  vRet = CJS_Value(pJS_Icon);
+  if (pJS_Icon)
+    vRet = CJS_Value(pJS_Icon->ToV8Object());
+
   return true;
 }
 
@@ -1560,7 +1570,7 @@
     swRet.TrimRight();
   }
 
-  vRet = CJS_Value(pRuntime, swRet.c_str());
+  vRet = CJS_Value(pRuntime->NewString(swRet.c_str()));
   return true;
 }
 
@@ -1611,7 +1621,7 @@
       nWords += CountWords(pPageObj->AsText());
   }
 
-  vRet = CJS_Value(pRuntime, nWords);
+  vRet = CJS_Value(pRuntime->NewNumber(nWords));
   return true;
 }
 
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index ce94fd8..8979e7f 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -856,8 +856,9 @@
 
   CJS_Array SelArray;
   for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
-    SelArray.SetElement(pRuntime, i,
-                        CJS_Value(pRuntime, pFormField->GetSelectedIndex(i)));
+    SelArray.SetElement(
+        pRuntime, i,
+        CJS_Value(pRuntime->NewNumber(pFormField->GetSelectedIndex(i))));
   }
   vp->Set(SelArray.ToV8Array(pRuntime));
 
@@ -1163,9 +1164,9 @@
   if (m_nFormControlIndex < 0) {
     for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
       CPDF_FormControl* pFormControl = pFormField->GetControl(i);
-      ExportValusArray.SetElement(
-          pRuntime, i,
-          CJS_Value(pRuntime, pFormControl->GetExportValue().c_str()));
+      ExportValusArray.SetElement(pRuntime, i,
+                                  CJS_Value(pRuntime->NewString(
+                                      pFormControl->GetExportValue().c_str())));
     }
   } else {
     if (m_nFormControlIndex >= pFormField->CountControls())
@@ -1178,7 +1179,7 @@
 
     ExportValusArray.SetElement(
         pRuntime, 0,
-        CJS_Value(pRuntime, pFormControl->GetExportValue().c_str()));
+        CJS_Value(pRuntime->NewString(pFormControl->GetExportValue().c_str())));
   }
 
   vp->Set(ExportValusArray.ToV8Array(pRuntime));
@@ -1571,8 +1572,9 @@
     if (!pPageView)
       return false;
 
-    PageArray.SetElement(
-        pRuntime, i, CJS_Value(pRuntime, (int32_t)pPageView->GetPageIndex()));
+    PageArray.SetElement(pRuntime, i,
+                         CJS_Value(pRuntime->NewNumber(
+                             static_cast<int32_t>(pPageView->GetPageIndex()))));
     ++i;
   }
 
@@ -1749,14 +1751,18 @@
 
   CFX_FloatRect crRect = pWidget->GetRect();
   CJS_Array rcArray;
-  rcArray.SetElement(pRuntime, 0,
-                     CJS_Value(pRuntime, static_cast<int32_t>(crRect.left)));
-  rcArray.SetElement(pRuntime, 1,
-                     CJS_Value(pRuntime, static_cast<int32_t>(crRect.top)));
-  rcArray.SetElement(pRuntime, 2,
-                     CJS_Value(pRuntime, static_cast<int32_t>(crRect.right)));
-  rcArray.SetElement(pRuntime, 3,
-                     CJS_Value(pRuntime, static_cast<int32_t>(crRect.bottom)));
+  rcArray.SetElement(
+      pRuntime, 0,
+      CJS_Value(pRuntime->NewNumber(static_cast<int32_t>(crRect.left))));
+  rcArray.SetElement(
+      pRuntime, 1,
+      CJS_Value(pRuntime->NewNumber(static_cast<int32_t>(crRect.top))));
+  rcArray.SetElement(
+      pRuntime, 2,
+      CJS_Value(pRuntime->NewNumber(static_cast<int32_t>(crRect.right))));
+  rcArray.SetElement(
+      pRuntime, 3,
+      CJS_Value(pRuntime->NewNumber(static_cast<int32_t>(crRect.bottom))));
   vp->Set(rcArray.ToV8Array(pRuntime));
   return true;
 }
@@ -2251,11 +2257,11 @@
         int iIndex;
         for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
           iIndex = pFormField->GetSelectedIndex(i);
-          ElementValue =
-              CJS_Value(pRuntime, pFormField->GetOptionValue(iIndex).c_str());
+          ElementValue = CJS_Value(
+              pRuntime->NewString(pFormField->GetOptionValue(iIndex).c_str()));
           if (wcslen(ElementValue.ToWideString(pRuntime).c_str()) == 0) {
-            ElementValue =
-                CJS_Value(pRuntime, pFormField->GetOptionLabel(iIndex).c_str());
+            ElementValue = CJS_Value(pRuntime->NewString(
+                pFormField->GetOptionLabel(iIndex).c_str()));
           }
           ValueArray.SetElement(pRuntime, i, ElementValue);
         }
@@ -2462,11 +2468,14 @@
     return false;
 
   if (nface == 0)
-    vRet = CJS_Value(pRuntime, pFormControl->GetNormalCaption().c_str());
+    vRet = CJS_Value(
+        pRuntime->NewString(pFormControl->GetNormalCaption().c_str()));
   else if (nface == 1)
-    vRet = CJS_Value(pRuntime, pFormControl->GetDownCaption().c_str());
+    vRet =
+        CJS_Value(pRuntime->NewString(pFormControl->GetDownCaption().c_str()));
   else if (nface == 2)
-    vRet = CJS_Value(pRuntime, pFormControl->GetRolloverCaption().c_str());
+    vRet = CJS_Value(
+        pRuntime->NewString(pFormControl->GetRolloverCaption().c_str()));
   else
     return false;
 
@@ -2501,7 +2510,9 @@
     return false;
 
   CJS_Icon* pJS_Icon = static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
-  vRet = CJS_Value(pJS_Icon);
+  if (pJS_Icon)
+    vRet = CJS_Value(pJS_Icon->ToV8Object());
+
   return true;
 }
 
@@ -2590,9 +2601,9 @@
   if (nWidget < 0 || nWidget >= pFormField->CountControls())
     return false;
 
-  vRet = CJS_Value(pRuntime,
-                   pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
-                       pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON);
+  vRet = CJS_Value(pRuntime->NewBoolean(
+      pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
+      pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON));
 
   return true;
 }
@@ -2635,10 +2646,12 @@
         static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pObj));
     Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
     pField->AttachField(m_pJSDoc, *pStr);
-    FormFieldArray.SetElement(pRuntime, j++, CJS_Value(pJSField));
+    FormFieldArray.SetElement(
+        pRuntime, j++,
+        pJSField ? CJS_Value(pJSField->ToV8Object()) : CJS_Value());
   }
 
-  vRet = CJS_Value(pRuntime, FormFieldArray);
+  vRet = CJS_Value(FormFieldArray.ToV8Array(pRuntime));
   return true;
 }
 
@@ -2667,11 +2680,13 @@
     if (bExport) {
       WideString strval = pFormField->GetOptionValue(nIdx);
       if (strval.IsEmpty())
-        vRet = CJS_Value(pRuntime, pFormField->GetOptionLabel(nIdx).c_str());
+        vRet = CJS_Value(
+            pRuntime->NewString(pFormField->GetOptionLabel(nIdx).c_str()));
       else
-        vRet = CJS_Value(pRuntime, strval.c_str());
+        vRet = CJS_Value(pRuntime->NewString(strval.c_str()));
     } else {
-      vRet = CJS_Value(pRuntime, pFormField->GetOptionLabel(nIdx).c_str());
+      vRet = CJS_Value(
+          pRuntime->NewString(pFormField->GetOptionLabel(nIdx).c_str()));
     }
   } else {
     return false;
@@ -2710,10 +2725,10 @@
   if (nIndex < 0 || nIndex >= pFormField->CountControls())
     return false;
 
-  vRet = CJS_Value(pRuntime,
-                   ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
-                     pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) &&
-                    pFormField->GetControl(nIndex)->IsChecked() != 0));
+  vRet = CJS_Value(pRuntime->NewBoolean(
+      ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
+        pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) &&
+       pFormField->GetControl(nIndex)->IsChecked() != 0)));
   return true;
 }
 
@@ -2733,10 +2748,10 @@
   if (nIndex < 0 || nIndex >= pFormField->CountControls())
     return false;
 
-  vRet = CJS_Value(pRuntime,
-                   ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
-                     pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) &&
-                    pFormField->GetControl(nIndex)->IsDefaultChecked() != 0));
+  vRet = CJS_Value(pRuntime->NewBoolean(
+      ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX ||
+        pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) &&
+       pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)));
   return true;
 }
 
diff --git a/fpdfsdk/javascript/JS_Value.cpp b/fpdfsdk/javascript/JS_Value.cpp
index 7de267e..fcf913a 100644
--- a/fpdfsdk/javascript/JS_Value.cpp
+++ b/fpdfsdk/javascript/JS_Value.cpp
@@ -182,31 +182,6 @@
 
 CJS_Value::CJS_Value(v8::Local<v8::Value> pValue) : m_pValue(pValue) {}
 
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, int iValue)
-    : CJS_Value(pRuntime->NewNumber(iValue)) {}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, bool bValue)
-    : CJS_Value(pRuntime->NewBoolean(bValue)) {}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, double dValue)
-    : CJS_Value(pRuntime->NewNumber(dValue)) {}
-
-CJS_Value::CJS_Value(CJS_Object* pObj) {
-  if (pObj)
-    m_pValue = pObj->ToV8Object();
-}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const wchar_t* pWstr)
-    : CJS_Value(pRuntime->NewString(pWstr)) {}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const char* pStr)
-    : CJS_Value(pRuntime->NewString(WideString::FromLocal(pStr).c_str())) {}
-
-CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array)
-    : CJS_Value(array.ToV8Array(pRuntime)) {}
-
-CJS_Value::CJS_Value(const CJS_Date& date) : CJS_Value(date.ToV8Date()) {}
-
 CJS_Value::~CJS_Value() {}
 
 CJS_Value::CJS_Value(const CJS_Value& other) = default;
diff --git a/fpdfsdk/javascript/JS_Value.h b/fpdfsdk/javascript/JS_Value.h
index 72d381e..c0e267a 100644
--- a/fpdfsdk/javascript/JS_Value.h
+++ b/fpdfsdk/javascript/JS_Value.h
@@ -34,16 +34,7 @@
 
   CJS_Value();
   explicit CJS_Value(v8::Local<v8::Value> pValue);
-  CJS_Value(CJS_Runtime* pRuntime, int iValue);
-  CJS_Value(CJS_Runtime* pRuntime, double dValue);
-  CJS_Value(CJS_Runtime* pRuntime, bool bValue);
-  explicit CJS_Value(CJS_Object* pObj);
-  CJS_Value(CJS_Runtime* pRuntime, const char* pStr);
-  CJS_Value(CJS_Runtime* pRuntime, const wchar_t* pWstr);
-  CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array);
-  explicit CJS_Value(const CJS_Date& date);
   CJS_Value(const CJS_Value& other);
-
   ~CJS_Value();
 
   // These calls may re-enter JS (and hence invalidate objects).
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index ccd2cfc..9f336ae 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -261,8 +261,9 @@
   while (*p) {
     const char* pTemp = strchr(p, ch);
     if (!pTemp) {
-      StrArray.SetElement(pRuntime, nIndex,
-                          CJS_Value(pRuntime, StrTrim(ByteString(p)).c_str()));
+      StrArray.SetElement(
+          pRuntime, nIndex,
+          CJS_Value(pRuntime->NewString(StrTrim(ByteString(p)).c_str())));
       break;
     }
 
@@ -270,8 +271,9 @@
     strncpy(pSub, p, pTemp - p);
     *(pSub + (pTemp - p)) = '\0';
 
-    StrArray.SetElement(pRuntime, nIndex,
-                        CJS_Value(pRuntime, StrTrim(ByteString(pSub)).c_str()));
+    StrArray.SetElement(
+        pRuntime, nIndex,
+        CJS_Value(pRuntime->NewString(StrTrim(ByteString(pSub)).c_str())));
     delete[] pSub;
 
     nIndex++;
@@ -896,16 +898,17 @@
     if (iNegStyle == 1 || iNegStyle == 3) {
       if (Field* fTarget = pEvent->Target_Field()) {
         CJS_Array arColor;
-        CJS_Value vColElm;
-        vColElm = CJS_Value(pRuntime, L"RGB");
+        CJS_Value vColElm(pRuntime->NewString(L"RGB"));
         arColor.SetElement(pRuntime, 0, vColElm);
-        vColElm = CJS_Value(pRuntime, 1);
+
+        vColElm = CJS_Value(pRuntime->NewNumber(1));
         arColor.SetElement(pRuntime, 1, vColElm);
-        vColElm = CJS_Value(pRuntime, 0);
+
+        vColElm = CJS_Value(pRuntime->NewNumber(0));
         arColor.SetElement(pRuntime, 2, vColElm);
         arColor.SetElement(pRuntime, 3, vColElm);
 
-        CJS_Value vProp(pRuntime, arColor);
+        CJS_Value vProp(arColor.ToV8Array(pRuntime));
         fTarget->set_text_color(pRuntime, vProp, &sError);  // red
       }
     }
@@ -913,10 +916,10 @@
     if (iNegStyle == 1 || iNegStyle == 3) {
       if (Field* fTarget = pEvent->Target_Field()) {
         CJS_Array arColor;
-        CJS_Value vColElm;
-        vColElm = CJS_Value(pRuntime, L"RGB");
+        CJS_Value vColElm(pRuntime->NewString(L"RGB"));
         arColor.SetElement(pRuntime, 0, vColElm);
-        vColElm = CJS_Value(pRuntime, 0);
+
+        vColElm = CJS_Value(pRuntime->NewNumber(0));
         arColor.SetElement(pRuntime, 1, vColElm);
         arColor.SetElement(pRuntime, 2, vColElm);
         arColor.SetElement(pRuntime, 3, vColElm);
@@ -928,8 +931,8 @@
             color::ConvertArrayToPWLColor(pRuntime, vProp.ToArray(pRuntime));
         CFX_Color crColor = color::ConvertArrayToPWLColor(pRuntime, arColor);
         if (crColor != crProp) {
-          fTarget->set_text_color(pRuntime, CJS_Value(pRuntime, arColor),
-                                  &sError);
+          fTarget->set_text_color(
+              pRuntime, CJS_Value(arColor.ToV8Array(pRuntime)), &sError);
         }
       }
     }
@@ -1296,7 +1299,7 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  newParams.push_back(CJS_Value(pRuntime->NewString(cFormats[iIndex])));
   return AFDate_FormatEx(pRuntime, newParams, vRet, sError);
 }
 
@@ -1330,7 +1333,7 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  newParams.push_back(CJS_Value(pRuntime->NewString(cFormats[iIndex])));
   return AFDate_KeystrokeEx(pRuntime, newParams, vRet, sError);
 }
 
@@ -1352,7 +1355,7 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  newParams.push_back(CJS_Value(pRuntime->NewString(cFormats[iIndex])));
   return AFDate_FormatEx(pRuntime, newParams, vRet, sError);
 }
 
@@ -1373,7 +1376,7 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  newParams.push_back(CJS_Value(pRuntime->NewString(cFormats[iIndex])));
   return AFDate_KeystrokeEx(pRuntime, newParams, vRet, sError);
 }
 
@@ -1549,7 +1552,7 @@
   }
 
   std::vector<CJS_Value> params2;
-  params2.push_back(CJS_Value(pRuntime, cFormat));
+  params2.push_back(CJS_Value(pRuntime->NewString(cFormat)));
   return AFSpecial_KeystrokeEx(pRuntime, params2, vRet, sError);
 }
 
@@ -1570,7 +1573,7 @@
     swValue = pEventHandler->Value();
 
   if (pEventHandler->WillCommit()) {
-    vRet = CJS_Value(pRuntime, swValue.c_str());
+    vRet = CJS_Value(pRuntime->NewString(swValue.c_str()));
     return true;
   }
 
@@ -1588,8 +1591,8 @@
   else
     postfix = L"";
 
-  vRet =
-      CJS_Value(pRuntime, (prefix + pEventHandler->Change() + postfix).c_str());
+  vRet = CJS_Value(pRuntime->NewString(
+      (prefix + pEventHandler->Change() + postfix).c_str()));
   return true;
 }
 
@@ -1613,7 +1616,7 @@
     return false;
   }
 
-  vRet = CJS_Value(pRuntime, dDate);
+  vRet = CJS_Value(pRuntime->NewNumber(dDate));
   return true;
 }
 
@@ -1626,10 +1629,9 @@
     return false;
   }
 
-  vRet = CJS_Value(pRuntime, static_cast<double>(AF_Simple(
-                                 params[0].ToWideString(pRuntime).c_str(),
-                                 params[1].ToDouble(pRuntime),
-                                 params[2].ToDouble(pRuntime))));
+  vRet = CJS_Value(pRuntime->NewNumber(static_cast<double>(
+      AF_Simple(params[0].ToWideString(pRuntime).c_str(),
+                params[1].ToDouble(pRuntime), params[2].ToDouble(pRuntime)))));
 
   return true;
 }
@@ -1645,10 +1647,10 @@
 
   WideString ws = params[0].ToWideString(pRuntime);
   ws.Replace(L",", L".");
-  vRet = CJS_Value(pRuntime, ws.c_str());
+  vRet = CJS_Value(pRuntime->NewString(ws.c_str()));
   vRet.MaybeCoerceToNumber(pRuntime);
   if (vRet.GetType() != CJS_Value::VT_number)
-    vRet = CJS_Value(pRuntime, 0);
+    vRet = CJS_Value(pRuntime->NewNumber(0));
   return true;
 }
 
@@ -1739,7 +1741,7 @@
   dValue = (double)floor(dValue * FXSYS_pow((double)10, (double)6) + 0.49) /
            FXSYS_pow((double)10, (double)6);
 
-  CJS_Value jsValue(pRuntime, dValue);
+  CJS_Value jsValue(pRuntime->NewNumber(dValue));
   CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
   if (pContext->GetEventHandler()->m_pValue)
     pContext->GetEventHandler()->Value() = jsValue.ToWideString(pRuntime);
@@ -1815,16 +1817,18 @@
     if (std::iswdigit(wc)) {
       sPart += wc;
     } else if (sPart.GetLength() > 0) {
-      nums.SetElement(pRuntime, nIndex, CJS_Value(pRuntime, sPart.c_str()));
+      nums.SetElement(pRuntime, nIndex,
+                      CJS_Value(pRuntime->NewString(sPart.c_str())));
       sPart = L"";
       nIndex++;
     }
   }
   if (sPart.GetLength() > 0)
-    nums.SetElement(pRuntime, nIndex, CJS_Value(pRuntime, sPart.c_str()));
+    nums.SetElement(pRuntime, nIndex,
+                    CJS_Value(pRuntime->NewString(sPart.c_str())));
 
   if (nums.GetLength(pRuntime) > 0)
-    vRet = CJS_Value(pRuntime, nums);
+    vRet = CJS_Value(nums.ToV8Array(pRuntime));
   else
     vRet.Set(pRuntime->NewNull());
 
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index 1c822df..7203c3b 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -217,7 +217,9 @@
     pJSDocument = static_cast<CJS_Document*>(pRuntime->GetObjectPrivate(pObj));
 
   CJS_Array aDocs;
-  aDocs.SetElement(pRuntime, 0, CJS_Value(pJSDocument));
+  aDocs.SetElement(
+      pRuntime, 0,
+      pJSDocument ? CJS_Value(pJSDocument->ToV8Object()) : CJS_Value());
   if (aDocs.GetLength(pRuntime) > 0)
     vp->Set(aDocs.ToV8Array(pRuntime));
   else
@@ -392,7 +394,7 @@
 
   CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
   if (!pFormFillEnv) {
-    vRet = CJS_Value(pRuntime, 0);
+    vRet = CJS_Value(pRuntime->NewNumber(0));
     return true;
   }
 
@@ -433,8 +435,8 @@
   pRuntime->BeginBlock();
   pFormFillEnv->KillFocusAnnot(0);
 
-  vRet = CJS_Value(pRuntime, pFormFillEnv->JS_appAlert(
-                                 swMsg.c_str(), swTitle.c_str(), iType, iIcon));
+  vRet = CJS_Value(pRuntime->NewNumber(
+      pFormFillEnv->JS_appAlert(swMsg.c_str(), swTitle.c_str(), iType, iIcon)));
   pRuntime->EndBlock();
   return true;
 }
@@ -796,10 +798,10 @@
     return false;
   }
 
-  vRet = CJS_Value(pRuntime, WideString::FromUTF16LE(
-                                 reinterpret_cast<uint16_t*>(pBuff.data()),
-                                 nLengthBytes / sizeof(uint16_t))
-                                 .c_str());
+  vRet = CJS_Value(pRuntime->NewString(
+      WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
+                              nLengthBytes / sizeof(uint16_t))
+          .c_str()));
 
   return true;
 }
diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp
index 37ab1cc..e730c31 100644
--- a/fpdfsdk/javascript/color.cpp
+++ b/fpdfsdk/javascript/color.cpp
@@ -44,24 +44,32 @@
   CJS_Array array;
   switch (color.nColorType) {
     case CFX_Color::kTransparent:
-      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "T"));
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime->NewString(L"T")));
       break;
     case CFX_Color::kGray:
-      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "G"));
-      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime->NewString(L"G")));
+      array.SetElement(pRuntime, 1,
+                       CJS_Value(pRuntime->NewNumber(color.fColor1)));
       break;
     case CFX_Color::kRGB:
-      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "RGB"));
-      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
-      array.SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
-      array.SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime->NewString(L"RGB")));
+      array.SetElement(pRuntime, 1,
+                       CJS_Value(pRuntime->NewNumber(color.fColor1)));
+      array.SetElement(pRuntime, 2,
+                       CJS_Value(pRuntime->NewNumber(color.fColor2)));
+      array.SetElement(pRuntime, 3,
+                       CJS_Value(pRuntime->NewNumber(color.fColor3)));
       break;
     case CFX_Color::kCMYK:
-      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "CMYK"));
-      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
-      array.SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
-      array.SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
-      array.SetElement(pRuntime, 4, CJS_Value(pRuntime, color.fColor4));
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime->NewString(L"CMYK")));
+      array.SetElement(pRuntime, 1,
+                       CJS_Value(pRuntime->NewNumber(color.fColor1)));
+      array.SetElement(pRuntime, 2,
+                       CJS_Value(pRuntime->NewNumber(color.fColor2)));
+      array.SetElement(pRuntime, 3,
+                       CJS_Value(pRuntime->NewNumber(color.fColor3)));
+      array.SetElement(pRuntime, 4,
+                       CJS_Value(pRuntime->NewNumber(color.fColor4)));
       break;
   }
   return array;
@@ -300,8 +308,9 @@
 
   CFX_Color color =
       ConvertArrayToPWLColor(pRuntime, params[0].ToArray(pRuntime));
-  vRet = CJS_Value(pRuntime, ConvertPWLColorToArray(
-                                 pRuntime, color.ConvertColorType(nColorType)));
+  vRet = CJS_Value(
+      ConvertPWLColorToArray(pRuntime, color.ConvertColorType(nColorType))
+          .ToV8Array(pRuntime));
 
   return true;
 }
@@ -321,6 +330,6 @@
       ConvertArrayToPWLColor(pRuntime, params[1].ToArray(pRuntime));
 
   color1 = color1.ConvertColorType(color2.nColorType);
-  vRet = CJS_Value(pRuntime, color1 == color2);
+  vRet = CJS_Value(pRuntime->NewBoolean(color1 == color2));
   return true;
 }
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index 3d669b3..63179c8 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -132,7 +132,7 @@
   }
 
   c_strResult.erase(c_strResult.begin());
-  vRet = CJS_Value(pRuntime, c_strResult.c_str());
+  vRet = CJS_Value(pRuntime->NewString(c_strResult.c_str()));
   return true;
 }
 
@@ -185,7 +185,7 @@
         return false;
     }
 
-    vRet = CJS_Value(pRuntime, swResult.c_str());
+    vRet = CJS_Value(pRuntime->NewString(swResult.c_str()));
     return true;
   }
 
@@ -259,7 +259,7 @@
     wchar_t buf[64] = {};
     FXSYS_wcsftime(buf, 64, cFormat.c_str(), &time);
     cFormat = buf;
-    vRet = CJS_Value(pRuntime, cFormat.c_str());
+    vRet = CJS_Value(pRuntime->NewString(cFormat.c_str()));
     return true;
   }
 
@@ -276,9 +276,9 @@
     return false;
   }
 
-  vRet = CJS_Value(pRuntime, printx(params[0].ToWideString(pRuntime),
-                                    params[1].ToWideString(pRuntime))
-                                 .c_str());
+  vRet = CJS_Value(pRuntime->NewString(
+      printx(params[0].ToWideString(pRuntime), params[1].ToWideString(pRuntime))
+          .c_str()));
 
   return true;
 }
@@ -396,7 +396,7 @@
   }
 
   if (!std::isnan(dDate)) {
-    vRet = CJS_Value(CJS_Date(pRuntime, dDate));
+    vRet = CJS_Value(CJS_Date(pRuntime, dDate).ToV8Date());
   } else {
     vRet.Set(pRuntime->NewNull());
   }
@@ -420,7 +420,7 @@
   }
 
   WideString wStr(static_cast<wchar_t>(arg));
-  vRet = CJS_Value(pRuntime, wStr.c_str());
+  vRet = CJS_Value(pRuntime->NewString(wStr.c_str()));
   return true;
 }