| // 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_ |