Add alternate CFXJSE_ScopeUtil_IsolateHandleContext constructor.
Allows making such a context directly from a CFXJSE_Engine. This
will become handy in subsequent CLs.
Split off from https://pdfium-review.googlesource.com/c/pdfium/+/75950
Change-Id: I899fee97e07c12f00ef4303780ec4e68d63aa7c2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75990
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index c30ed04..9689403 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -127,7 +127,7 @@
CFXJSE_Engine::~CFXJSE_Engine() {
// This is what ensures that the v8 object bound to a CJX_Object
// no longer retains that binding since it will outlive that object.
- CFXJSE_ScopeUtil_IsolateHandleContext scope(m_JsContext.get());
+ CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
for (const auto& pair : m_mapObjectToObject) {
const v8::Global<v8::Object>& binding = pair.second;
FXJSE_ClearObjectBinding(v8::Local<v8::Object>::New(GetIsolate(), binding));
@@ -138,7 +138,7 @@
WideStringView wsScript,
CFXJSE_Value* hRetValue,
CXFA_Object* pThisObject) {
- CFXJSE_ScopeUtil_IsolateHandleContext scope(m_JsContext.get());
+ CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
AutoRestorer<CXFA_Script::Type> typeRestorer(&m_eScriptType);
m_eScriptType = eScriptType;
diff --git a/fxjs/xfa/cfxjse_engine.h b/fxjs/xfa/cfxjse_engine.h
index 57b5f35..fbb5bb8 100644
--- a/fxjs/xfa/cfxjse_engine.h
+++ b/fxjs/xfa/cfxjse_engine.h
@@ -95,6 +95,7 @@
CXFA_Object* GetThisObject() const { return m_pThisObject; }
CFXJSE_Class* GetJseNormalClass() const { return m_pJsClass.Get(); }
+ CFXJSE_Context* GetJseContext() const { return m_JsContext.get(); }
void SetNodesOfRunScript(std::vector<cppgc::Persistent<CXFA_Node>>* pArray);
void AddNodesOfRunScript(CXFA_Node* pNode);
diff --git a/fxjs/xfa/cfxjse_isolatetracker.cpp b/fxjs/xfa/cfxjse_isolatetracker.cpp
index 7f94ae1..e9e92d4 100644
--- a/fxjs/xfa/cfxjse_isolatetracker.cpp
+++ b/fxjs/xfa/cfxjse_isolatetracker.cpp
@@ -7,6 +7,7 @@
#include "fxjs/xfa/cfxjse_isolatetracker.h"
#include "fxjs/xfa/cfxjse_context.h"
+#include "fxjs/xfa/cfxjse_engine.h"
#include "fxjs/xfa/cfxjse_runtimedata.h"
CFXJSE_ScopeUtil_IsolateHandle::CFXJSE_ScopeUtil_IsolateHandle(
@@ -19,6 +20,10 @@
CFXJSE_Context* pContext)
: m_parent(pContext->GetIsolate()), m_cscope(pContext->GetContext()) {}
+CFXJSE_ScopeUtil_IsolateHandleContext::CFXJSE_ScopeUtil_IsolateHandleContext(
+ CFXJSE_Engine* pEngine)
+ : CFXJSE_ScopeUtil_IsolateHandleContext(pEngine->GetJseContext()) {}
+
CFXJSE_ScopeUtil_IsolateHandleContext::
~CFXJSE_ScopeUtil_IsolateHandleContext() = default;
diff --git a/fxjs/xfa/cfxjse_isolatetracker.h b/fxjs/xfa/cfxjse_isolatetracker.h
index c6e1edf..32623b7 100644
--- a/fxjs/xfa/cfxjse_isolatetracker.h
+++ b/fxjs/xfa/cfxjse_isolatetracker.h
@@ -10,6 +10,7 @@
#include "v8/include/v8.h"
class CFXJSE_Context;
+class CFXJSE_Engine;
class CFXJSE_ScopeUtil_IsolateHandle {
public:
@@ -31,6 +32,7 @@
class CFXJSE_ScopeUtil_IsolateHandleContext {
public:
explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Context* pContext);
+ explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Engine* pEngine);
CFXJSE_ScopeUtil_IsolateHandleContext(
const CFXJSE_ScopeUtil_IsolateHandleContext&) = delete;
CFXJSE_ScopeUtil_IsolateHandleContext& operator=(