Change CFXJSE_Context::GetGlobalObject to return

This Cl changes CFXJSE_Context::GetGlobalObject to return a
std::unique_ptr<CFXJSE_Value> instead of accepting a CFXJSE_Value out parameter.

All usages created the CFXJSE_Value with the same runtime as the caller.

Review-Url: https://codereview.chromium.org/2056733003
diff --git a/xfa/fxfa/parser/xfa_script_imp.cpp b/xfa/fxfa/parser/xfa_script_imp.cpp
index 245ea8b..fe84005 100644
--- a/xfa/fxfa/parser/xfa_script_imp.cpp
+++ b/xfa/fxfa/parser/xfa_script_imp.cpp
@@ -502,10 +502,7 @@
 
   FX_BOOL bRes = FALSE;
   CFXJSE_Context* pVariableContext = static_cast<CFXJSE_Context*>(lpVariables);
-  std::unique_ptr<CFXJSE_Value> pObject(
-      new CFXJSE_Value(pVariableContext->GetRuntime()));
-  pVariableContext->GetGlobalObject(pObject.get());
-
+  std::unique_ptr<CFXJSE_Value> pObject = pVariableContext->GetGlobalObject();
   std::unique_ptr<CFXJSE_Value> hVariableValue(new CFXJSE_Value(m_pIsolate));
   if (!bGetter) {
     pObject->SetObjectOwnProperty(szPropName, pValue);
@@ -529,11 +526,8 @@
     CXFA_Object* pScriptNode;
     CFXJSE_Context* pVariableContext = nullptr;
     m_mapVariableToContext.GetNextAssoc(ps, pScriptNode, pVariableContext);
-    std::unique_ptr<CFXJSE_Value> pObject(
-        new CFXJSE_Value(pVariableContext->GetRuntime()));
-    pVariableContext->GetGlobalObject(pObject.get());
 
-    delete ToThisProxy(pObject.get(), nullptr);
+    delete ToThisProxy(pVariableContext->GetGlobalObject().get(), nullptr);
     delete pVariableContext;
   }
   m_mapVariableToContext.RemoveAll();
@@ -545,14 +539,11 @@
 
 void CXFA_ScriptContext::RemoveBuiltInObjs(CFXJSE_Context* pContext) const {
   static const CFX_ByteStringC OBJ_NAME[2] = {"Number", "Date"};
-  std::unique_ptr<CFXJSE_Value> pObject(
-      new CFXJSE_Value(pContext->GetRuntime()));
-  pContext->GetGlobalObject(pObject.get());
-
+  std::unique_ptr<CFXJSE_Value> pObject = pContext->GetGlobalObject();
   std::unique_ptr<CFXJSE_Value> hProp(new CFXJSE_Value(m_pIsolate));
   for (int i = 0; i < 2; ++i) {
     if (pObject->GetObjectProperty(OBJ_NAME[i], hProp.get()))
-      pObject.get()->DeleteObjectProperty(OBJ_NAME[i]);
+      pObject->DeleteObjectProperty(OBJ_NAME[i]);
   }
 }
 CFXJSE_Class* CXFA_ScriptContext::GetJseNormalClass() {
diff --git a/xfa/fxjse/context.cpp b/xfa/fxjse/context.cpp
index 8eacc77..e5d5f99 100644
--- a/xfa/fxjse/context.cpp
+++ b/xfa/fxjse/context.cpp
@@ -157,13 +157,16 @@
 
 CFXJSE_Context::~CFXJSE_Context() {}
 
-void CFXJSE_Context::GetGlobalObject(CFXJSE_Value* pValue) {
-  ASSERT(pValue);
+std::unique_ptr<CFXJSE_Value> CFXJSE_Context::GetGlobalObject() {
+  std::unique_ptr<CFXJSE_Value> pValue(new CFXJSE_Value(m_pIsolate));
+
   CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
   v8::Local<v8::Context> hContext =
       v8::Local<v8::Context>::New(m_pIsolate, m_hContext);
   v8::Local<v8::Object> hGlobalObject = hContext->Global();
   pValue->ForceSetValue(hGlobalObject);
+
+  return pValue;
 }
 
 void CFXJSE_Context::EnableCompatibleMode() {
diff --git a/xfa/fxjse/context.h b/xfa/fxjse/context.h
index 4219713..0bb1e4f 100644
--- a/xfa/fxjse/context.h
+++ b/xfa/fxjse/context.h
@@ -27,7 +27,7 @@
   ~CFXJSE_Context();
 
   V8_INLINE v8::Isolate* GetRuntime(void) { return m_pIsolate; }
-  void GetGlobalObject(CFXJSE_Value* pValue);
+  std::unique_ptr<CFXJSE_Value> GetGlobalObject();
   void EnableCompatibleMode();
   FX_BOOL ExecuteScript(const FX_CHAR* szScript,
                         CFXJSE_Value* lpRetValue,