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=(