| // Copyright 2014 The PDFium Authors | 
 | // 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_XFA_CFXJSE_VALUE_H_ | 
 | #define FXJS_XFA_CFXJSE_VALUE_H_ | 
 |  | 
 | #include <stdint.h> | 
 |  | 
 | #include <memory> | 
 | #include <vector> | 
 |  | 
 | #include "core/fxcrt/check.h" | 
 | #include "core/fxcrt/fx_string.h" | 
 | #include "core/fxcrt/unowned_ptr.h" | 
 | #include "v8/include/v8-forward.h" | 
 | #include "v8/include/v8-persistent-handle.h" | 
 |  | 
 | class CFXJSE_Class; | 
 | class CFXJSE_HostObject; | 
 |  | 
 | class CFXJSE_Value { | 
 |  public: | 
 |   CFXJSE_Value(); | 
 |   CFXJSE_Value(v8::Isolate* pIsolate, v8::Local<v8::Value> value); | 
 |   ~CFXJSE_Value(); | 
 |  | 
 |   bool IsEmpty() const; | 
 |   bool IsUndefined(v8::Isolate* pIsolate) const; | 
 |   bool IsNull(v8::Isolate* pIsolate) const; | 
 |   bool IsBoolean(v8::Isolate* pIsolate) const; | 
 |   bool IsString(v8::Isolate* pIsolate) const; | 
 |   bool IsNumber(v8::Isolate* pIsolate) const; | 
 |   bool IsInteger(v8::Isolate* pIsolate) const; | 
 |   bool IsObject(v8::Isolate* pIsolate) const; | 
 |   bool IsArray(v8::Isolate* pIsolate) const; | 
 |   bool IsFunction(v8::Isolate* pIsolate) const; | 
 |   bool ToBoolean(v8::Isolate* pIsolate) const; | 
 |   float ToFloat(v8::Isolate* pIsolate) const; | 
 |   double ToDouble(v8::Isolate* pIsolate) const; | 
 |   int32_t ToInteger(v8::Isolate* pIsolate) const; | 
 |   ByteString ToString(v8::Isolate* pIsolate) const; | 
 |   WideString ToWideString(v8::Isolate* pIsolate) const { | 
 |     return WideString::FromUTF8(ToString(pIsolate).AsStringView()); | 
 |   } | 
 |   CFXJSE_HostObject* ToHostObject(v8::Isolate* pIsolate) const; | 
 |  | 
 |   void SetUndefined(v8::Isolate* pIsolate); | 
 |   void SetNull(v8::Isolate* pIsolate); | 
 |   void SetBoolean(v8::Isolate* pIsolate, bool bBoolean); | 
 |   void SetInteger(v8::Isolate* pIsolate, int32_t nInteger); | 
 |   void SetDouble(v8::Isolate* pIsolate, double dDouble); | 
 |   void SetString(v8::Isolate* pIsolate, ByteStringView szString); | 
 |   void SetFloat(v8::Isolate* pIsolate, float fFloat); | 
 |  | 
 |   void SetHostObject(v8::Isolate* pIsolate, | 
 |                      CFXJSE_HostObject* pObject, | 
 |                      CFXJSE_Class* pClass); | 
 |  | 
 |   void SetArray(v8::Isolate* pIsolate, | 
 |                 const std::vector<std::unique_ptr<CFXJSE_Value>>& values); | 
 |  | 
 |   bool GetObjectProperty(v8::Isolate* pIsolate, | 
 |                          ByteStringView szPropName, | 
 |                          CFXJSE_Value* pPropValue); | 
 |   bool SetObjectProperty(v8::Isolate* pIsolate, | 
 |                          ByteStringView szPropName, | 
 |                          CFXJSE_Value* pPropValue); | 
 |   bool GetObjectPropertyByIdx(v8::Isolate* pIsolate, | 
 |                               uint32_t uPropIdx, | 
 |                               CFXJSE_Value* pPropValue); | 
 |   void DeleteObjectProperty(v8::Isolate* pIsolate, ByteStringView szPropName); | 
 |   bool SetObjectOwnProperty(v8::Isolate* pIsolate, | 
 |                             ByteStringView szPropName, | 
 |                             CFXJSE_Value* pPropValue); | 
 |  | 
 |   // Return empty local on error. | 
 |   static v8::Local<v8::Function> NewBoundFunction( | 
 |       v8::Isolate* pIsolate, | 
 |       v8::Local<v8::Function> hOldFunction, | 
 |       v8::Local<v8::Object> lpNewThis); | 
 |  | 
 |   v8::Local<v8::Value> GetValue(v8::Isolate* pIsolate) const; | 
 |   const v8::Global<v8::Value>& DirectGetValue() const { return m_hValue; } | 
 |   void ForceSetValue(v8::Isolate* pIsolate, v8::Local<v8::Value> hValue) { | 
 |     m_hValue.Reset(pIsolate, hValue); | 
 |   } | 
 |  | 
 |  private: | 
 |   CFXJSE_Value(const CFXJSE_Value&) = delete; | 
 |   CFXJSE_Value& operator=(const CFXJSE_Value&) = delete; | 
 |  | 
 |   v8::Global<v8::Value> m_hValue; | 
 | }; | 
 |  | 
 | #endif  // FXJS_XFA_CFXJSE_VALUE_H_ |