Home | History | Annotate | Download | only in fxjs
      1 // Copyright 2017 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef FXJS_CJS_V8_H_
      8 #define FXJS_CJS_V8_H_
      9 
     10 #include <v8-util.h>
     11 #include <v8.h>
     12 
     13 #include <map>
     14 #include <vector>
     15 
     16 #include "core/fxcrt/bytestring.h"
     17 #include "core/fxcrt/fx_string.h"
     18 #include "core/fxcrt/widestring.h"
     19 
     20 #ifdef PDF_ENABLE_XFA
     21 class CXFA_Object;
     22 #endif  // PDF_ENABLE_XFA
     23 
     24 class CJS_V8 {
     25  public:
     26   explicit CJS_V8(v8::Isolate* pIsolate);
     27   virtual ~CJS_V8();
     28 
     29   v8::Isolate* GetIsolate() const { return m_isolate; }
     30 
     31   v8::Local<v8::Context> NewLocalContext();
     32   v8::Local<v8::Context> GetPersistentContext();
     33 
     34   v8::Local<v8::Value> NewNull();
     35   v8::Local<v8::Value> NewUndefined();
     36   v8::Local<v8::Array> NewArray();
     37   v8::Local<v8::Number> NewNumber(int number);
     38   v8::Local<v8::Number> NewNumber(double number);
     39   v8::Local<v8::Number> NewNumber(float number);
     40   v8::Local<v8::Boolean> NewBoolean(bool b);
     41   v8::Local<v8::String> NewString(const ByteStringView& str);
     42   v8::Local<v8::String> NewString(const WideStringView& str);
     43   v8::Local<v8::Date> NewDate(double d);
     44 
     45   int ToInt32(v8::Local<v8::Value> pValue);
     46   bool ToBoolean(v8::Local<v8::Value> pValue);
     47   double ToDouble(v8::Local<v8::Value> pValue);
     48   WideString ToWideString(v8::Local<v8::Value> pValue);
     49   ByteString ToByteString(v8::Local<v8::Value> pValue);
     50   v8::Local<v8::Object> ToObject(v8::Local<v8::Value> pValue);
     51   v8::Local<v8::Array> ToArray(v8::Local<v8::Value> pValue);
     52 
     53 #ifdef PDF_ENABLE_XFA
     54   CXFA_Object* ToXFAObject(v8::Local<v8::Value> obj);
     55   v8::Local<v8::Value> NewXFAObject(CXFA_Object* obj,
     56                                     v8::Global<v8::FunctionTemplate>& tmpl);
     57 #endif  // PDF_ENABLE_XFA
     58 
     59   // Arrays.
     60   unsigned GetArrayLength(v8::Local<v8::Array> pArray);
     61   v8::Local<v8::Value> GetArrayElement(v8::Local<v8::Array> pArray,
     62                                        unsigned index);
     63   unsigned PutArrayElement(v8::Local<v8::Array> pArray,
     64                            unsigned index,
     65                            v8::Local<v8::Value> pValue);
     66 
     67   void SetConstArray(const WideString& name, v8::Local<v8::Array> array);
     68   v8::Local<v8::Array> GetConstArray(const WideString& name);
     69 
     70   // Objects.
     71   std::vector<WideString> GetObjectPropertyNames(v8::Local<v8::Object> pObj);
     72   v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj,
     73                                          const WideString& PropertyName);
     74   void PutObjectProperty(v8::Local<v8::Object> pObj,
     75                          const WideString& PropertyName,
     76                          v8::Local<v8::Value> pValue);
     77 
     78  protected:
     79   void SetIsolate(v8::Isolate* pIsolate) { m_isolate = pIsolate; }
     80   void ClearConstArray() { m_ConstArrays.clear(); }
     81 
     82   void ResetPersistentContext(v8::Local<v8::Context> context) {
     83     m_V8PersistentContext.Reset(m_isolate, context);
     84   }
     85   void ReleasePersistentContext() { m_V8PersistentContext.Reset(); }
     86 
     87  private:
     88   v8::Isolate* m_isolate;
     89   std::map<WideString, v8::Global<v8::Array>> m_ConstArrays;
     90   v8::Global<v8::Context> m_V8PersistentContext;
     91 };
     92 
     93 #endif  // FXJS_CJS_V8_H_
     94