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.