1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_XFA_CFXJSE_CONTEXT_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_XFA_CFXJSE_CONTEXT_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 11*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/bytestring.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/persistent.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-forward.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-persistent-handle.h" 18*3ac0a46fSAndroid Build Coastguard Worker 19*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_Class; 20*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_HostObject; 21*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_Value; 22*3ac0a46fSAndroid Build Coastguard Worker class CXFA_ThisProxy; 23*3ac0a46fSAndroid Build Coastguard Worker struct FXJSE_CLASS_DESCRIPTOR; 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_Context { 26*3ac0a46fSAndroid Build Coastguard Worker public: 27*3ac0a46fSAndroid Build Coastguard Worker static std::unique_ptr<CFXJSE_Context> Create( 28*3ac0a46fSAndroid Build Coastguard Worker v8::Isolate* pIsolate, 29*3ac0a46fSAndroid Build Coastguard Worker const FXJSE_CLASS_DESCRIPTOR* pGlobalClass, 30*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_HostObject* pGlobalObject, 31*3ac0a46fSAndroid Build Coastguard Worker CXFA_ThisProxy* pProxy); 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker ~CFXJSE_Context(); 34*3ac0a46fSAndroid Build Coastguard Worker GetIsolate()35*3ac0a46fSAndroid Build Coastguard Worker v8::Isolate* GetIsolate() const { return m_pIsolate; } 36*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Context> GetContext(); 37*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Object> GetGlobalObject(); 38*3ac0a46fSAndroid Build Coastguard Worker 39*3ac0a46fSAndroid Build Coastguard Worker void AddClass(std::unique_ptr<CFXJSE_Class> pClass); 40*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Class* GetClassByName(ByteStringView szName) const; 41*3ac0a46fSAndroid Build Coastguard Worker void EnableCompatibleMode(); 42*3ac0a46fSAndroid Build Coastguard Worker 43*3ac0a46fSAndroid Build Coastguard Worker // Note: `pNewThisObject` may be empty. 44*3ac0a46fSAndroid Build Coastguard Worker bool ExecuteScript(ByteStringView bsScript, 45*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Value* pRetValue, 46*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Object> pNewThisObject); 47*3ac0a46fSAndroid Build Coastguard Worker 48*3ac0a46fSAndroid Build Coastguard Worker private: 49*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Context(v8::Isolate* pIsolate, CXFA_ThisProxy* pProxy); 50*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Context(const CFXJSE_Context&) = delete; 51*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Context& operator=(const CFXJSE_Context&) = delete; 52*3ac0a46fSAndroid Build Coastguard Worker 53*3ac0a46fSAndroid Build Coastguard Worker v8::Global<v8::Context> m_hContext; 54*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<v8::Isolate> m_pIsolate; 55*3ac0a46fSAndroid Build Coastguard Worker std::vector<std::unique_ptr<CFXJSE_Class>> m_rgClasses; 56*3ac0a46fSAndroid Build Coastguard Worker cppgc::Persistent<CXFA_ThisProxy> m_pProxy; 57*3ac0a46fSAndroid Build Coastguard Worker }; 58*3ac0a46fSAndroid Build Coastguard Worker 59*3ac0a46fSAndroid Build Coastguard Worker void FXJSE_UpdateObjectBinding(v8::Local<v8::Object> hObject, 60*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_HostObject* pNewBinding); 61*3ac0a46fSAndroid Build Coastguard Worker 62*3ac0a46fSAndroid Build Coastguard Worker void FXJSE_ClearObjectBinding(v8::Local<v8::Object> hJSObject); 63*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_HostObject* FXJSE_RetrieveObjectBinding(v8::Local<v8::Value> hValue); 64*3ac0a46fSAndroid Build Coastguard Worker 65*3ac0a46fSAndroid Build Coastguard Worker #endif // FXJS_XFA_CFXJSE_CONTEXT_H_ 66