blob: 035cef064d0837b314f396faf06f3806d6d56c85 [file] [log] [blame]
// Copyright 2014 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 FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
#include "../../../core/include/fxcrt/fx_basic.h"
#include "../jsapi/fxjs_v8.h"
class CJS_Array;
class CJS_Date;
class CJS_Document;
class CJS_Object;
class CJS_Value
{
public:
CJS_Value(v8::Isolate* isolate);
CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
CJS_Value(v8::Isolate* isolate, const int &iValue);
CJS_Value(v8::Isolate* isolate, const double &dValue);
CJS_Value(v8::Isolate* isolate, const float &fValue);
CJS_Value(v8::Isolate* isolate, const bool &bValue);
CJS_Value(v8::Isolate* isolate, JSFXObject);
CJS_Value(v8::Isolate* isolate, CJS_Object*);
CJS_Value(v8::Isolate* isolate, CJS_Document*);
CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr);
CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr);
CJS_Value(v8::Isolate* isolate, CJS_Array& array);
~CJS_Value();
void SetNull();
void Attach(v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
void Attach(CJS_Value *pValue);
void Detach();
int ToInt() const;
bool ToBool() const;
double ToDouble() const;
float ToFloat() const;
CJS_Object* ToCJSObject() const;
CFX_WideString ToCFXWideString() const;
CFX_ByteString ToCFXByteString() const;
v8::Local<v8::Object> ToV8Object() const;
v8::Local<v8::Array> ToV8Array() const;
v8::Local<v8::Value> ToV8Value() const;
void operator = (int iValue);
void operator = (bool bValue);
void operator = (double);
void operator = (float);
void operator = (CJS_Object*);
void operator = (CJS_Document*);
void operator = (v8::Local<v8::Object>);
void operator = (CJS_Array &);
void operator = (CJS_Date &);
void operator = (const FX_WCHAR* pWstr);
void operator = (const FX_CHAR* pStr);
void operator = (CJS_Value value);
bool IsArrayObject() const;
bool IsDateObject() const;
FXJSVALUETYPE GetType() const;
bool ConvertToArray(CJS_Array &) const;
bool ConvertToDate(CJS_Date &) const;
v8::Isolate* GetIsolate() {return m_isolate;}
protected:
v8::Local<v8::Value> m_pValue;
FXJSVALUETYPE m_eType;
v8::Isolate* m_isolate;
};
class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value>
{
public:
void push_back(const CJS_Value& newElement) {
CFX_ArrayTemplate<CJS_Value>::Add(newElement);
}
int size() const {
return CFX_ArrayTemplate<CJS_Value>::GetSize();
}
};
class CJS_PropValue: public CJS_Value
{
public:
CJS_PropValue(const CJS_Value&);
CJS_PropValue(v8::Isolate* isolate);
~CJS_PropValue();
public:
bool IsSetting();
bool IsGetting();
void operator<<(int);
void operator>>(int&) const;
void operator<<(bool);
void operator>>(bool&) const;
void operator<<(double);
void operator>>(double&) const;
void operator<<(CJS_Object* pObj);
void operator>>(CJS_Object*& ppObj) const;
void operator<<(CJS_Document* pJsDoc);
void operator>>(CJS_Document*& ppJsDoc) const;
void operator<<(CFX_ByteString);
void operator>>(CFX_ByteString&) const;
void operator<<(CFX_WideString);
void operator>>(CFX_WideString&) const;
void operator<<(const FX_WCHAR* c_string);
void operator<<(JSFXObject);
void operator>>(JSFXObject&) const;
void operator>>(CJS_Array& array) const;
void operator<<(CJS_Array& array);
void operator<<(CJS_Date& date);
void operator>>(CJS_Date& date) const;
operator v8::Local<v8::Value>() const;
void StartSetting();
void StartGetting();
private:
bool m_bIsSetting;
};
class CJS_Array
{
public:
CJS_Array(v8::Isolate* isolate);
virtual ~CJS_Array();
void Attach(v8::Local<v8::Array> pArray);
void GetElement(unsigned index,CJS_Value &value);
void SetElement(unsigned index,CJS_Value value);
int GetLength();
bool IsAttached();
operator v8::Local<v8::Array>();
v8::Isolate* GetIsolate() {return m_isolate;}
private:
v8::Local<v8::Array> m_pArray;
v8::Isolate* m_isolate;
};
class CJS_Date
{
friend class CJS_Value;
public:
CJS_Date(v8::Isolate* isolate);
CJS_Date(v8::Isolate* isolate,double dMsec_time);
CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec);
virtual ~CJS_Date();
void Attach(v8::Local<v8::Value> pDate);
int GetYear();
void SetYear(int iYear);
int GetMonth();
void SetMonth(int iMonth);
int GetDay();
void SetDay(int iDay);
int GetHours();
void SetHours(int iHours);
int GetMinutes();
void SetMinutes(int minutes);
int GetSeconds();
void SetSeconds(int seconds);
operator v8::Local<v8::Value>();
operator double() const;
CFX_WideString ToString() const;
static double MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms);
bool IsValidDate();
protected:
v8::Local<v8::Value> m_pDate;
v8::Isolate* m_isolate;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_