Remove another usage of CFXJSE_Value from CFXJSE_Class.

Obtain CFXJSE_HostObject (wrapped C-side object) directly via
a new CFXJSE_HostObject::FromV8() static method.

Change-Id: Ieb3c46dd60a009c182a3d10add7e16d1780dbad2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/67450
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp
index 4aca4a1..b4af07b 100644
--- a/fxjs/xfa/cfxjse_class.cpp
+++ b/fxjs/xfa/cfxjse_class.cpp
@@ -38,9 +38,7 @@
   if (!lpFunctionInfo)
     return;
 
-  auto lpThisValue =
-      pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate(), info.Holder());
-  lpFunctionInfo->callbackProc(lpThisValue->ToHostObject(), info);
+  lpFunctionInfo->callbackProc(CFXJSE_HostObject::FromV8(info.Holder()), info);
 }
 
 void V8ConstructorCallback_Wrapper(
diff --git a/fxjs/xfa/cfxjse_value.cpp b/fxjs/xfa/cfxjse_value.cpp
index d308d43..1be3fc3 100644
--- a/fxjs/xfa/cfxjse_value.cpp
+++ b/fxjs/xfa/cfxjse_value.cpp
@@ -79,13 +79,8 @@
 
 CFXJSE_HostObject* CFXJSE_Value::ToHostObject() const {
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> pValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  ASSERT(!pValue.IsEmpty());
-  if (!pValue->IsObject())
-    return nullptr;
-
-  return FXJSE_RetrieveObjectBinding(pValue.As<v8::Object>());
+  return CFXJSE_HostObject::FromV8(
+      v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
 }
 
 void CFXJSE_Value::SetHostObject(CFXJSE_HostObject* lpObject,
diff --git a/fxjs/xfa/fxjse.cpp b/fxjs/xfa/fxjse.cpp
index ff6176b..439988e 100644
--- a/fxjs/xfa/fxjse.cpp
+++ b/fxjs/xfa/fxjse.cpp
@@ -6,6 +6,8 @@
 
 #include "fxjs/xfa/fxjse.h"
 
+#include "fxjs/xfa/cfxjse_context.h"
+
 namespace pdfium {
 namespace fxjse {
 
@@ -15,6 +17,14 @@
 }  // namespace fxjse
 }  // namespace pdfium
 
+// static
+CFXJSE_HostObject* CFXJSE_HostObject::FromV8(v8::Local<v8::Value> arg) {
+  if (arg.IsEmpty() || !arg->IsObject())
+    return nullptr;
+
+  return FXJSE_RetrieveObjectBinding(arg.As<v8::Object>());
+}
+
 CFXJSE_HostObject::CFXJSE_HostObject() = default;
 
 CFXJSE_HostObject::~CFXJSE_HostObject() = default;
diff --git a/fxjs/xfa/fxjse.h b/fxjs/xfa/fxjse.h
index 81a88cc..24b0bec 100644
--- a/fxjs/xfa/fxjse.h
+++ b/fxjs/xfa/fxjse.h
@@ -28,6 +28,7 @@
 // C++ object which is retrieved from v8 object's slot.
 class CFXJSE_HostObject {
  public:
+  static CFXJSE_HostObject* FromV8(v8::Local<v8::Value> arg);
   virtual ~CFXJSE_HostObject();
 
   // Two subclasses.