// Copyright 2017 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef FXJS_CJS_V8_H_ #define FXJS_CJS_V8_H_ #include <v8-util.h> #include <v8.h> #include <map> #include <vector> #include "core/fxcrt/bytestring.h" #include "core/fxcrt/fx_string.h" #include "core/fxcrt/widestring.h" #ifdef PDF_ENABLE_XFA class CXFA_Object; #endif // PDF_ENABLE_XFA class CJS_V8 { public: explicit CJS_V8(v8::Isolate* pIsolate); virtual ~CJS_V8(); v8::Isolate* GetIsolate() const { return m_isolate; } v8::Local<v8::Context> NewLocalContext(); v8::Local<v8::Context> GetPersistentContext(); v8::Local<v8::Value> NewNull(); v8::Local<v8::Value> NewUndefined(); v8::Local<v8::Array> NewArray(); v8::Local<v8::Number> NewNumber(int number); v8::Local<v8::Number> NewNumber(double number); v8::Local<v8::Number> NewNumber(float number); v8::Local<v8::Boolean> NewBoolean(bool b); v8::Local<v8::String> NewString(const ByteStringView& str); v8::Local<v8::String> NewString(const WideStringView& str); v8::Local<v8::Date> NewDate(double d); int ToInt32(v8::Local<v8::Value> pValue); bool ToBoolean(v8::Local<v8::Value> pValue); double ToDouble(v8::Local<v8::Value> pValue); WideString ToWideString(v8::Local<v8::Value> pValue); ByteString ToByteString(v8::Local<v8::Value> pValue); v8::Local<v8::Object> ToObject(v8::Local<v8::Value> pValue); v8::Local<v8::Array> ToArray(v8::Local<v8::Value> pValue); #ifdef PDF_ENABLE_XFA CXFA_Object* ToXFAObject(v8::Local<v8::Value> obj); v8::Local<v8::Value> NewXFAObject(CXFA_Object* obj, v8::Global<v8::FunctionTemplate>& tmpl); #endif // PDF_ENABLE_XFA // Arrays. unsigned GetArrayLength(v8::Local<v8::Array> pArray); v8::Local<v8::Value> GetArrayElement(v8::Local<v8::Array> pArray, unsigned index); unsigned PutArrayElement(v8::Local<v8::Array> pArray, unsigned index, v8::Local<v8::Value> pValue); void SetConstArray(const WideString& name, v8::Local<v8::Array> array); v8::Local<v8::Array> GetConstArray(const WideString& name); // Objects. std::vector<WideString> GetObjectPropertyNames(v8::Local<v8::Object> pObj); v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj, const WideString& PropertyName); void PutObjectProperty(v8::Local<v8::Object> pObj, const WideString& PropertyName, v8::Local<v8::Value> pValue); protected: void SetIsolate(v8::Isolate* pIsolate) { m_isolate = pIsolate; } void ClearConstArray() { m_ConstArrays.clear(); } void ResetPersistentContext(v8::Local<v8::Context> context) { m_V8PersistentContext.Reset(m_isolate, context); } void ReleasePersistentContext() { m_V8PersistentContext.Reset(); } private: v8::Isolate* m_isolate; std::map<WideString, v8::Global<v8::Array>> m_ConstArrays; v8::Global<v8::Context> m_V8PersistentContext; }; #endif // FXJS_CJS_V8_H_