Make NewNull return an actual Null

This CL updates the CFXJS_Engine::NewNull method to return a real v8::Null
instead of an empty v8::Local. This also adds a NewUndefined and returns
undefined in most of the places null was returned previously.

Change-Id: If1a96bf253057892a3b709cbc72f8825c52503c3
Reviewed-on: https://pdfium-review.googlesource.com/16730
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 9404ded..2217f44 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -213,7 +213,7 @@
 bool Document::get_ADBE(CJS_Runtime* pRuntime,
                         CJS_Value* vp,
                         WideString* sError) {
-  vp->Set(pRuntime->NewNull());
+  vp->Set(pRuntime->NewUndefined());
   return true;
 }
 
@@ -312,7 +312,7 @@
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
   if (pPDFForm->CountFields(wideName) <= 0) {
-    vRet.Set(pRuntime->NewNull());
+    vRet.Set(pRuntime->NewUndefined());
     return true;
   }
 
@@ -1321,7 +1321,7 @@
                           const std::vector<v8::Local<v8::Value>>& params,
                           CJS_Value& vRet,
                           WideString& sError) {
-  vRet.Set(pRuntime->NewNull());
+  vRet.Set(pRuntime->NewUndefined());
   return true;
 }
 
@@ -1387,7 +1387,7 @@
                          CJS_Value* vp,
                          WideString* sError) {
   if (m_IconNames.empty()) {
-    vp->Set(pRuntime->NewNull());
+    vp->Set(pRuntime->NewUndefined());
     return true;
   }
 
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index c0441a8..667127f 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -1840,7 +1840,7 @@
     else
       vRet = CJS_Value(nums.ToV8Value());
   } else {
-    vRet.Set(pRuntime->NewNull());
+    vRet.Set(pRuntime->NewUndefined());
   }
 
   return true;
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index ca440f6..cbc3145 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -237,7 +237,7 @@
     else
       vp->Set(aDocs.ToV8Value());
   } else {
-    vp->Set(pRuntime->NewNull());
+    vp->Set(pRuntime->NewUndefined());
   }
 
   return true;
diff --git a/fpdfsdk/javascript/global.cpp b/fpdfsdk/javascript/global.cpp
index 040c6e6..5dc6ac9 100644
--- a/fpdfsdk/javascript/global.cpp
+++ b/fpdfsdk/javascript/global.cpp
@@ -109,7 +109,8 @@
     pRuntime->Error(JSFormatErrorString(class_name, "GetProperty", L""));
     return;
   }
-  info.GetReturnValue().Set(value.ToV8Value());
+  if (!value.ToV8Value().IsEmpty())
+    info.GetReturnValue().Set(value.ToV8Value());
 }
 
 template <class Alt>
@@ -284,16 +285,12 @@
                                     const wchar_t* propname,
                                     CJS_Value* vp) {
   auto it = m_MapGlobal.find(ByteString::FromUnicode(propname));
-  if (it == m_MapGlobal.end()) {
-    vp->Set(pRuntime->NewNull());
+  if (it == m_MapGlobal.end())
     return true;
-  }
 
   JSGlobalData* pData = it->second.get();
-  if (pData->bDeleted) {
-    vp->Set(pRuntime->NewNull());
+  if (pData->bDeleted)
     return true;
-  }
 
   switch (pData->nType) {
     case JS_GlobalDataType::NUMBER:
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index ecec8d1..202a1ea 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -398,7 +398,7 @@
   if (!std::isnan(dDate)) {
     vRet = CJS_Value(CJS_Date(pRuntime, dDate).ToV8Value());
   } else {
-    vRet.Set(pRuntime->NewNull());
+    vRet.Set(pRuntime->NewUndefined());
   }
 
   return true;