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.