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_IJS_RUNTIME_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_IJS_RUNTIME_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_memory.h" 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/optional.h" 16*3ac0a46fSAndroid Build Coastguard Worker 17*3ac0a46fSAndroid Build Coastguard Worker class CJS_Runtime; 18*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_FormFillEnvironment; 19*3ac0a46fSAndroid Build Coastguard Worker class IJS_EventContext; 20*3ac0a46fSAndroid Build Coastguard Worker 21*3ac0a46fSAndroid Build Coastguard Worker // Owns the FJXS objects needed to actually execute JS, if possible. This 22*3ac0a46fSAndroid Build Coastguard Worker // virtual interface is backed by either an actual JS runtime, or a stub, 23*3ac0a46fSAndroid Build Coastguard Worker // when JS is not present. 24*3ac0a46fSAndroid Build Coastguard Worker class IJS_Runtime { 25*3ac0a46fSAndroid Build Coastguard Worker public: 26*3ac0a46fSAndroid Build Coastguard Worker struct JS_Error { 27*3ac0a46fSAndroid Build Coastguard Worker int line; 28*3ac0a46fSAndroid Build Coastguard Worker int column; 29*3ac0a46fSAndroid Build Coastguard Worker WideString exception; 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker JS_Error(int line, int column, const WideString& exception); 32*3ac0a46fSAndroid Build Coastguard Worker }; 33*3ac0a46fSAndroid Build Coastguard Worker 34*3ac0a46fSAndroid Build Coastguard Worker class ScopedEventContext { 35*3ac0a46fSAndroid Build Coastguard Worker public: 36*3ac0a46fSAndroid Build Coastguard Worker FX_STACK_ALLOCATED(); 37*3ac0a46fSAndroid Build Coastguard Worker 38*3ac0a46fSAndroid Build Coastguard Worker explicit ScopedEventContext(IJS_Runtime* pRuntime); 39*3ac0a46fSAndroid Build Coastguard Worker ~ScopedEventContext(); 40*3ac0a46fSAndroid Build Coastguard Worker Get()41*3ac0a46fSAndroid Build Coastguard Worker IJS_EventContext* Get() const { return m_pContext; } 42*3ac0a46fSAndroid Build Coastguard Worker IJS_EventContext* operator->() const { return m_pContext; } 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker private: 45*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<IJS_Runtime> const m_pRuntime; 46*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<IJS_EventContext> m_pContext; 47*3ac0a46fSAndroid Build Coastguard Worker }; 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker static void Initialize(unsigned int slot, void* isolate, void* platform); 50*3ac0a46fSAndroid Build Coastguard Worker static void Destroy(); 51*3ac0a46fSAndroid Build Coastguard Worker static std::unique_ptr<IJS_Runtime> Create( 52*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_FormFillEnvironment* pFormFillEnv); 53*3ac0a46fSAndroid Build Coastguard Worker 54*3ac0a46fSAndroid Build Coastguard Worker virtual ~IJS_Runtime(); 55*3ac0a46fSAndroid Build Coastguard Worker 56*3ac0a46fSAndroid Build Coastguard Worker virtual CJS_Runtime* AsCJSRuntime() = 0; 57*3ac0a46fSAndroid Build Coastguard Worker virtual IJS_EventContext* NewEventContext() = 0; 58*3ac0a46fSAndroid Build Coastguard Worker virtual void ReleaseEventContext(IJS_EventContext* pContext) = 0; 59*3ac0a46fSAndroid Build Coastguard Worker virtual CPDFSDK_FormFillEnvironment* GetFormFillEnv() const = 0; 60*3ac0a46fSAndroid Build Coastguard Worker virtual absl::optional<JS_Error> ExecuteScript(const WideString& script) = 0; 61*3ac0a46fSAndroid Build Coastguard Worker 62*3ac0a46fSAndroid Build Coastguard Worker protected: 63*3ac0a46fSAndroid Build Coastguard Worker IJS_Runtime() = default; 64*3ac0a46fSAndroid Build Coastguard Worker }; 65*3ac0a46fSAndroid Build Coastguard Worker 66*3ac0a46fSAndroid Build Coastguard Worker #endif // FXJS_IJS_RUNTIME_H_ 67