| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "fpdfsdk/javascript/JS_Value.h" | 7 #include "fpdfsdk/javascript/JS_Value.h" |
| 8 | 8 |
| 9 #include <time.h> | 9 #include <time.h> |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 } | 32 } |
| 33 | 33 |
| 34 } // namespace | 34 } // namespace |
| 35 | 35 |
| 36 CJS_Value::CJS_Value(CJS_Runtime* pRuntime) {} | 36 CJS_Value::CJS_Value(CJS_Runtime* pRuntime) {} |
| 37 | 37 |
| 38 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Value> pValue) | 38 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Value> pValue) |
| 39 : m_pValue(pValue) {} | 39 : m_pValue(pValue) {} |
| 40 | 40 |
| 41 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue) | 41 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue) |
| 42 : m_pValue(FXJS_NewNumber(pRuntime->GetIsolate(), iValue)) {} | 42 : m_pValue(pRuntime->NewNumber(iValue)) {} |
| 43 | 43 |
| 44 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const bool& bValue) | 44 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const bool& bValue) |
| 45 : m_pValue(FXJS_NewBoolean(pRuntime->GetIsolate(), bValue)) {} | 45 : m_pValue(pRuntime->NewBoolean(bValue)) {} |
| 46 | 46 |
| 47 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const float& fValue) | 47 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const float& fValue) |
| 48 : m_pValue(FXJS_NewNumber(pRuntime->GetIsolate(), fValue)) {} | 48 : m_pValue(pRuntime->NewNumber(fValue)) {} |
| 49 | 49 |
| 50 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const double& dValue) | 50 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const double& dValue) |
| 51 : m_pValue(FXJS_NewNumber(pRuntime->GetIsolate(), dValue)) {} | 51 : m_pValue(pRuntime->NewNumber(dValue)) {} |
| 52 | 52 |
| 53 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Object* pObj) { | 53 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Object* pObj) { |
| 54 if (pObj) | 54 if (pObj) |
| 55 m_pValue = pObj->ToV8Object(); | 55 m_pValue = pObj->ToV8Object(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr) | 58 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr) |
| 59 : m_pValue(FXJS_NewString(pRuntime->GetIsolate(), (wchar_t*)pWstr)) {} | 59 : m_pValue(pRuntime->NewString(pWstr)) {} |
| 60 | 60 |
| 61 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr) | 61 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr) |
| 62 : m_pValue(FXJS_NewString(pRuntime->GetIsolate(), | 62 : m_pValue(pRuntime->NewString(CFX_WideString::FromLocal(pStr).c_str())) {} |
| 63 CFX_WideString::FromLocal(pStr).c_str())) {} | |
| 64 | 63 |
| 65 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array) | 64 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array) |
| 66 : m_pValue(array.ToV8Array(pRuntime->GetIsolate())) {} | 65 : m_pValue(array.ToV8Array(pRuntime)) {} |
| 67 | 66 |
| 68 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Date& date) | 67 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Date& date) |
| 69 : m_pValue(date.ToV8Date(pRuntime->GetIsolate())) {} | 68 : m_pValue(date.ToV8Date(pRuntime)) {} |
| 70 | 69 |
| 71 CJS_Value::~CJS_Value() {} | 70 CJS_Value::~CJS_Value() {} |
| 72 | 71 |
| 73 CJS_Value::CJS_Value(const CJS_Value& other) = default; | 72 CJS_Value::CJS_Value(const CJS_Value& other) = default; |
| 74 | 73 |
| 75 void CJS_Value::Attach(v8::Local<v8::Value> pValue) { | 74 void CJS_Value::Attach(v8::Local<v8::Value> pValue) { |
| 76 m_pValue = pValue; | 75 m_pValue = pValue; |
| 77 } | 76 } |
| 78 | 77 |
| 79 void CJS_Value::Detach() { | 78 void CJS_Value::Detach() { |
| 80 m_pValue = v8::Local<v8::Value>(); | 79 m_pValue = v8::Local<v8::Value>(); |
| 81 } | 80 } |
| 82 | 81 |
| 83 int CJS_Value::ToInt(v8::Isolate* pIsolate) const { | 82 int CJS_Value::ToInt(CJS_Runtime* pRuntime) const { |
| 84 return FXJS_ToInt32(pIsolate, m_pValue); | 83 return pRuntime->ToInt32(m_pValue); |
| 85 } | 84 } |
| 86 | 85 |
| 87 bool CJS_Value::ToBool(v8::Isolate* pIsolate) const { | 86 bool CJS_Value::ToBool(CJS_Runtime* pRuntime) const { |
| 88 return FXJS_ToBoolean(pIsolate, m_pValue); | 87 return pRuntime->ToBoolean(m_pValue); |
| 89 } | 88 } |
| 90 | 89 |
| 91 double CJS_Value::ToDouble(v8::Isolate* pIsolate) const { | 90 double CJS_Value::ToDouble(CJS_Runtime* pRuntime) const { |
| 92 return FXJS_ToNumber(pIsolate, m_pValue); | 91 return pRuntime->ToNumber(m_pValue); |
| 93 } | 92 } |
| 94 | 93 |
| 95 float CJS_Value::ToFloat(v8::Isolate* pIsolate) const { | 94 float CJS_Value::ToFloat(CJS_Runtime* pRuntime) const { |
| 96 return (float)ToDouble(pIsolate); | 95 return (float)ToDouble(pRuntime); |
| 97 } | 96 } |
| 98 | 97 |
| 99 CJS_Object* CJS_Value::ToCJSObject(v8::Isolate* pIsolate) const { | 98 CJS_Object* CJS_Value::ToCJSObject(CJS_Runtime* pRuntime) const { |
| 100 v8::Local<v8::Object> pObj = FXJS_ToObject(pIsolate, m_pValue); | 99 v8::Local<v8::Object> pObj = pRuntime->ToObject(m_pValue); |
| 101 return (CJS_Object*)FXJS_GetPrivate(pIsolate, pObj); | 100 return static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(pObj)); |
| 102 } | 101 } |
| 103 | 102 |
| 104 v8::Local<v8::Object> CJS_Value::ToV8Object(v8::Isolate* pIsolate) const { | 103 v8::Local<v8::Object> CJS_Value::ToV8Object(CJS_Runtime* pRuntime) const { |
| 105 return FXJS_ToObject(pIsolate, m_pValue); | 104 return pRuntime->ToObject(m_pValue); |
| 106 } | 105 } |
| 107 | 106 |
| 108 CFX_WideString CJS_Value::ToCFXWideString(v8::Isolate* pIsolate) const { | 107 CFX_WideString CJS_Value::ToCFXWideString(CJS_Runtime* pRuntime) const { |
| 109 return FXJS_ToString(pIsolate, m_pValue); | 108 return pRuntime->ToString(m_pValue); |
| 110 } | 109 } |
| 111 | 110 |
| 112 CFX_ByteString CJS_Value::ToCFXByteString(v8::Isolate* pIsolate) const { | 111 CFX_ByteString CJS_Value::ToCFXByteString(CJS_Runtime* pRuntime) const { |
| 113 return CFX_ByteString::FromUnicode(ToCFXWideString(pIsolate)); | 112 return CFX_ByteString::FromUnicode(ToCFXWideString(pRuntime)); |
| 114 } | 113 } |
| 115 | 114 |
| 116 v8::Local<v8::Value> CJS_Value::ToV8Value(v8::Isolate* pIsolate) const { | 115 v8::Local<v8::Value> CJS_Value::ToV8Value(CJS_Runtime* pRuntime) const { |
| 117 return m_pValue; | 116 return m_pValue; |
| 118 } | 117 } |
| 119 | 118 |
| 120 v8::Local<v8::Array> CJS_Value::ToV8Array(v8::Isolate* pIsolate) const { | 119 v8::Local<v8::Array> CJS_Value::ToV8Array(CJS_Runtime* pRuntime) const { |
| 121 if (IsArrayObject()) | 120 if (IsArrayObject()) |
| 122 return v8::Local<v8::Array>::Cast(FXJS_ToObject(pIsolate, m_pValue)); | 121 return v8::Local<v8::Array>::Cast(pRuntime->ToObject(m_pValue)); |
| 123 return v8::Local<v8::Array>(); | 122 return v8::Local<v8::Array>(); |
| 124 } | 123 } |
| 125 | 124 |
| 126 void CJS_Value::SetNull(CJS_Runtime* pRuntime) { | 125 void CJS_Value::SetNull(CJS_Runtime* pRuntime) { |
| 127 m_pValue = FXJS_NewNull(pRuntime->GetIsolate()); | 126 m_pValue = pRuntime->NewNull(); |
| 128 } | 127 } |
| 129 | 128 |
| 130 void CJS_Value::MaybeCoerceToNumber(v8::Isolate* pIsolate) { | 129 void CJS_Value::MaybeCoerceToNumber(CJS_Runtime* pRuntime) { |
| 131 bool bAllowNaN = false; | 130 bool bAllowNaN = false; |
| 132 if (GetType() == VT_string) { | 131 if (GetType() == VT_string) { |
| 133 CFX_ByteString bstr = ToCFXByteString(pIsolate); | 132 CFX_ByteString bstr = ToCFXByteString(pRuntime); |
| 134 if (bstr.GetLength() == 0) | 133 if (bstr.GetLength() == 0) |
| 135 return; | 134 return; |
| 136 if (bstr == "NaN") | 135 if (bstr == "NaN") |
| 137 bAllowNaN = true; | 136 bAllowNaN = true; |
| 138 } | 137 } |
| 138 v8::Isolate* pIsolate = pRuntime->GetIsolate(); |
| 139 v8::TryCatch try_catch(pIsolate); | 139 v8::TryCatch try_catch(pIsolate); |
| 140 v8::MaybeLocal<v8::Number> maybeNum = | 140 v8::MaybeLocal<v8::Number> maybeNum = |
| 141 m_pValue->ToNumber(pIsolate->GetCurrentContext()); | 141 m_pValue->ToNumber(pIsolate->GetCurrentContext()); |
| 142 if (maybeNum.IsEmpty()) | 142 if (maybeNum.IsEmpty()) |
| 143 return; | 143 return; |
| 144 v8::Local<v8::Number> num = maybeNum.ToLocalChecked(); | 144 v8::Local<v8::Number> num = maybeNum.ToLocalChecked(); |
| 145 if (std::isnan(num->Value()) && !bAllowNaN) | 145 if (std::isnan(num->Value()) && !bAllowNaN) |
| 146 return; | 146 return; |
| 147 m_pValue = num; | 147 m_pValue = num; |
| 148 } | 148 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 169 } | 169 } |
| 170 | 170 |
| 171 bool CJS_Value::IsArrayObject() const { | 171 bool CJS_Value::IsArrayObject() const { |
| 172 return !m_pValue.IsEmpty() && m_pValue->IsArray(); | 172 return !m_pValue.IsEmpty() && m_pValue->IsArray(); |
| 173 } | 173 } |
| 174 | 174 |
| 175 bool CJS_Value::IsDateObject() const { | 175 bool CJS_Value::IsDateObject() const { |
| 176 return !m_pValue.IsEmpty() && m_pValue->IsDate(); | 176 return !m_pValue.IsEmpty() && m_pValue->IsDate(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 bool CJS_Value::ConvertToArray(v8::Isolate* pIsolate, CJS_Array& array) const { | 179 bool CJS_Value::ConvertToArray(CJS_Runtime* pRuntime, CJS_Array& array) const { |
| 180 if (!IsArrayObject()) | 180 if (!IsArrayObject()) |
| 181 return false; | 181 return false; |
| 182 array.Attach(FXJS_ToArray(pIsolate, m_pValue)); | 182 array.Attach(pRuntime->ToArray(m_pValue)); |
| 183 return true; | 183 return true; |
| 184 } | 184 } |
| 185 | 185 |
| 186 bool CJS_Value::ConvertToDate(v8::Isolate* pIsolate, CJS_Date& date) const { | 186 bool CJS_Value::ConvertToDate(CJS_Runtime* pRuntime, CJS_Date& date) const { |
| 187 if (!IsDateObject()) | 187 if (!IsDateObject()) |
| 188 return false; | 188 return false; |
| 189 v8::Local<v8::Value> mutable_value = m_pValue; | 189 v8::Local<v8::Value> mutable_value = m_pValue; |
| 190 date.Attach(mutable_value.As<v8::Date>()); | 190 date.Attach(mutable_value.As<v8::Date>()); |
| 191 return true; | 191 return true; |
| 192 } | 192 } |
| 193 | 193 |
| 194 CJS_PropValue::CJS_PropValue(CJS_Runtime* pRuntime) | 194 CJS_PropValue::CJS_PropValue(CJS_Runtime* pRuntime) |
| 195 : m_bIsSetting(0), m_Value(pRuntime), m_pJSRuntime(pRuntime) {} | 195 : m_bIsSetting(0), m_Value(pRuntime), m_pJSRuntime(pRuntime) {} |
| 196 | 196 |
| 197 CJS_PropValue::CJS_PropValue(CJS_Runtime* pRuntime, const CJS_Value& value) | 197 CJS_PropValue::CJS_PropValue(CJS_Runtime* pRuntime, const CJS_Value& value) |
| 198 : m_bIsSetting(0), m_Value(value), m_pJSRuntime(pRuntime) {} | 198 : m_bIsSetting(0), m_Value(value), m_pJSRuntime(pRuntime) {} |
| 199 | 199 |
| 200 CJS_PropValue::~CJS_PropValue() {} | 200 CJS_PropValue::~CJS_PropValue() {} |
| 201 | 201 |
| 202 void CJS_PropValue::operator<<(int iValue) { | 202 void CJS_PropValue::operator<<(int iValue) { |
| 203 ASSERT(!m_bIsSetting); | 203 ASSERT(!m_bIsSetting); |
| 204 m_Value = CJS_Value(m_pJSRuntime, iValue); | 204 m_Value = CJS_Value(m_pJSRuntime, iValue); |
| 205 } | 205 } |
| 206 | 206 |
| 207 void CJS_PropValue::operator>>(int& iValue) const { | 207 void CJS_PropValue::operator>>(int& iValue) const { |
| 208 ASSERT(m_bIsSetting); | 208 ASSERT(m_bIsSetting); |
| 209 iValue = m_Value.ToInt(m_pJSRuntime->GetIsolate()); | 209 iValue = m_Value.ToInt(m_pJSRuntime); |
| 210 } | 210 } |
| 211 | 211 |
| 212 void CJS_PropValue::operator<<(bool bValue) { | 212 void CJS_PropValue::operator<<(bool bValue) { |
| 213 ASSERT(!m_bIsSetting); | 213 ASSERT(!m_bIsSetting); |
| 214 m_Value = CJS_Value(m_pJSRuntime, bValue); | 214 m_Value = CJS_Value(m_pJSRuntime, bValue); |
| 215 } | 215 } |
| 216 | 216 |
| 217 void CJS_PropValue::operator>>(bool& bValue) const { | 217 void CJS_PropValue::operator>>(bool& bValue) const { |
| 218 ASSERT(m_bIsSetting); | 218 ASSERT(m_bIsSetting); |
| 219 bValue = m_Value.ToBool(m_pJSRuntime->GetIsolate()); | 219 bValue = m_Value.ToBool(m_pJSRuntime); |
| 220 } | 220 } |
| 221 | 221 |
| 222 void CJS_PropValue::operator<<(double dValue) { | 222 void CJS_PropValue::operator<<(double dValue) { |
| 223 ASSERT(!m_bIsSetting); | 223 ASSERT(!m_bIsSetting); |
| 224 m_Value = CJS_Value(m_pJSRuntime, dValue); | 224 m_Value = CJS_Value(m_pJSRuntime, dValue); |
| 225 } | 225 } |
| 226 | 226 |
| 227 void CJS_PropValue::operator>>(double& dValue) const { | 227 void CJS_PropValue::operator>>(double& dValue) const { |
| 228 ASSERT(m_bIsSetting); | 228 ASSERT(m_bIsSetting); |
| 229 dValue = m_Value.ToDouble(m_pJSRuntime->GetIsolate()); | 229 dValue = m_Value.ToDouble(m_pJSRuntime); |
| 230 } | 230 } |
| 231 | 231 |
| 232 void CJS_PropValue::operator<<(CJS_Object* pObj) { | 232 void CJS_PropValue::operator<<(CJS_Object* pObj) { |
| 233 ASSERT(!m_bIsSetting); | 233 ASSERT(!m_bIsSetting); |
| 234 m_Value = CJS_Value(m_pJSRuntime, pObj); | 234 m_Value = CJS_Value(m_pJSRuntime, pObj); |
| 235 } | 235 } |
| 236 | 236 |
| 237 void CJS_PropValue::operator>>(CJS_Object*& ppObj) const { | 237 void CJS_PropValue::operator>>(CJS_Object*& ppObj) const { |
| 238 ASSERT(m_bIsSetting); | 238 ASSERT(m_bIsSetting); |
| 239 ppObj = m_Value.ToCJSObject(m_pJSRuntime->GetIsolate()); | 239 ppObj = m_Value.ToCJSObject(m_pJSRuntime); |
| 240 } | 240 } |
| 241 | 241 |
| 242 void CJS_PropValue::operator<<(CJS_Document* pJsDoc) { | 242 void CJS_PropValue::operator<<(CJS_Document* pJsDoc) { |
| 243 ASSERT(!m_bIsSetting); | 243 ASSERT(!m_bIsSetting); |
| 244 m_Value = CJS_Value(m_pJSRuntime, pJsDoc); | 244 m_Value = CJS_Value(m_pJSRuntime, pJsDoc); |
| 245 } | 245 } |
| 246 | 246 |
| 247 void CJS_PropValue::operator>>(CJS_Document*& ppJsDoc) const { | 247 void CJS_PropValue::operator>>(CJS_Document*& ppJsDoc) const { |
| 248 ASSERT(m_bIsSetting); | 248 ASSERT(m_bIsSetting); |
| 249 ppJsDoc = static_cast<CJS_Document*>( | 249 ppJsDoc = static_cast<CJS_Document*>(m_Value.ToCJSObject(m_pJSRuntime)); |
| 250 m_Value.ToCJSObject(m_pJSRuntime->GetIsolate())); | |
| 251 } | 250 } |
| 252 | 251 |
| 253 void CJS_PropValue::operator<<(v8::Local<v8::Object> pObj) { | 252 void CJS_PropValue::operator<<(v8::Local<v8::Object> pObj) { |
| 254 ASSERT(!m_bIsSetting); | 253 ASSERT(!m_bIsSetting); |
| 255 m_Value = CJS_Value(m_pJSRuntime, pObj); | 254 m_Value = CJS_Value(m_pJSRuntime, pObj); |
| 256 } | 255 } |
| 257 | 256 |
| 258 void CJS_PropValue::operator>>(v8::Local<v8::Object>& ppObj) const { | 257 void CJS_PropValue::operator>>(v8::Local<v8::Object>& ppObj) const { |
| 259 ASSERT(m_bIsSetting); | 258 ASSERT(m_bIsSetting); |
| 260 ppObj = m_Value.ToV8Object(m_pJSRuntime->GetIsolate()); | 259 ppObj = m_Value.ToV8Object(m_pJSRuntime); |
| 261 } | 260 } |
| 262 | 261 |
| 263 void CJS_PropValue::operator<<(CFX_ByteString str) { | 262 void CJS_PropValue::operator<<(CFX_ByteString str) { |
| 264 ASSERT(!m_bIsSetting); | 263 ASSERT(!m_bIsSetting); |
| 265 m_Value = CJS_Value(m_pJSRuntime, str.c_str()); | 264 m_Value = CJS_Value(m_pJSRuntime, str.c_str()); |
| 266 } | 265 } |
| 267 | 266 |
| 268 void CJS_PropValue::operator>>(CFX_ByteString& str) const { | 267 void CJS_PropValue::operator>>(CFX_ByteString& str) const { |
| 269 ASSERT(m_bIsSetting); | 268 ASSERT(m_bIsSetting); |
| 270 str = m_Value.ToCFXByteString(m_pJSRuntime->GetIsolate()); | 269 str = m_Value.ToCFXByteString(m_pJSRuntime); |
| 271 } | 270 } |
| 272 | 271 |
| 273 void CJS_PropValue::operator<<(const FX_WCHAR* str) { | 272 void CJS_PropValue::operator<<(const FX_WCHAR* str) { |
| 274 ASSERT(!m_bIsSetting); | 273 ASSERT(!m_bIsSetting); |
| 275 m_Value = CJS_Value(m_pJSRuntime, str); | 274 m_Value = CJS_Value(m_pJSRuntime, str); |
| 276 } | 275 } |
| 277 | 276 |
| 278 void CJS_PropValue::operator>>(CFX_WideString& wide_string) const { | 277 void CJS_PropValue::operator>>(CFX_WideString& wide_string) const { |
| 279 ASSERT(m_bIsSetting); | 278 ASSERT(m_bIsSetting); |
| 280 wide_string = m_Value.ToCFXWideString(m_pJSRuntime->GetIsolate()); | 279 wide_string = m_Value.ToCFXWideString(m_pJSRuntime); |
| 281 } | 280 } |
| 282 | 281 |
| 283 void CJS_PropValue::operator<<(CFX_WideString wide_string) { | 282 void CJS_PropValue::operator<<(CFX_WideString wide_string) { |
| 284 ASSERT(!m_bIsSetting); | 283 ASSERT(!m_bIsSetting); |
| 285 m_Value = CJS_Value(m_pJSRuntime, wide_string.c_str()); | 284 m_Value = CJS_Value(m_pJSRuntime, wide_string.c_str()); |
| 286 } | 285 } |
| 287 | 286 |
| 288 void CJS_PropValue::operator>>(CJS_Array& array) const { | 287 void CJS_PropValue::operator>>(CJS_Array& array) const { |
| 289 ASSERT(m_bIsSetting); | 288 ASSERT(m_bIsSetting); |
| 290 m_Value.ConvertToArray(m_pJSRuntime->GetIsolate(), array); | 289 m_Value.ConvertToArray(m_pJSRuntime, array); |
| 291 } | 290 } |
| 292 | 291 |
| 293 void CJS_PropValue::operator<<(CJS_Array& array) { | 292 void CJS_PropValue::operator<<(CJS_Array& array) { |
| 294 ASSERT(!m_bIsSetting); | 293 ASSERT(!m_bIsSetting); |
| 295 m_Value = | 294 m_Value = CJS_Value(m_pJSRuntime, array.ToV8Array(m_pJSRuntime)); |
| 296 CJS_Value(m_pJSRuntime, array.ToV8Array(m_pJSRuntime->GetIsolate())); | |
| 297 } | 295 } |
| 298 | 296 |
| 299 void CJS_PropValue::operator>>(CJS_Date& date) const { | 297 void CJS_PropValue::operator>>(CJS_Date& date) const { |
| 300 ASSERT(m_bIsSetting); | 298 ASSERT(m_bIsSetting); |
| 301 m_Value.ConvertToDate(m_pJSRuntime->GetIsolate(), date); | 299 m_Value.ConvertToDate(m_pJSRuntime, date); |
| 302 } | 300 } |
| 303 | 301 |
| 304 void CJS_PropValue::operator<<(CJS_Date& date) { | 302 void CJS_PropValue::operator<<(CJS_Date& date) { |
| 305 ASSERT(!m_bIsSetting); | 303 ASSERT(!m_bIsSetting); |
| 306 m_Value = CJS_Value(m_pJSRuntime, date); | 304 m_Value = CJS_Value(m_pJSRuntime, date); |
| 307 } | 305 } |
| 308 | 306 |
| 309 CJS_Array::CJS_Array() {} | 307 CJS_Array::CJS_Array() {} |
| 310 | 308 |
| 311 CJS_Array::CJS_Array(const CJS_Array& other) = default; | 309 CJS_Array::CJS_Array(const CJS_Array& other) = default; |
| 312 | 310 |
| 313 CJS_Array::~CJS_Array() {} | 311 CJS_Array::~CJS_Array() {} |
| 314 | 312 |
| 315 void CJS_Array::Attach(v8::Local<v8::Array> pArray) { | 313 void CJS_Array::Attach(v8::Local<v8::Array> pArray) { |
| 316 m_pArray = pArray; | 314 m_pArray = pArray; |
| 317 } | 315 } |
| 318 | 316 |
| 319 void CJS_Array::GetElement(v8::Isolate* pIsolate, | 317 void CJS_Array::GetElement(CJS_Runtime* pRuntime, |
| 320 unsigned index, | 318 unsigned index, |
| 321 CJS_Value& value) const { | 319 CJS_Value& value) const { |
| 322 if (!m_pArray.IsEmpty()) | 320 if (!m_pArray.IsEmpty()) |
| 323 value.Attach(FXJS_GetArrayElement(pIsolate, m_pArray, index)); | 321 value.Attach(pRuntime->GetArrayElement(m_pArray, index)); |
| 324 } | 322 } |
| 325 | 323 |
| 326 void CJS_Array::SetElement(v8::Isolate* pIsolate, | 324 void CJS_Array::SetElement(CJS_Runtime* pRuntime, |
| 327 unsigned index, | 325 unsigned index, |
| 328 const CJS_Value& value) { | 326 const CJS_Value& value) { |
| 329 if (m_pArray.IsEmpty()) | 327 if (m_pArray.IsEmpty()) |
| 330 m_pArray = FXJS_NewArray(pIsolate); | 328 m_pArray = pRuntime->NewArray(); |
| 331 | 329 |
| 332 FXJS_PutArrayElement(pIsolate, m_pArray, index, value.ToV8Value(pIsolate)); | 330 pRuntime->PutArrayElement(m_pArray, index, value.ToV8Value(pRuntime)); |
| 333 } | 331 } |
| 334 | 332 |
| 335 int CJS_Array::GetLength() const { | 333 int CJS_Array::GetLength(CJS_Runtime* pRuntime) const { |
| 336 if (m_pArray.IsEmpty()) | 334 if (m_pArray.IsEmpty()) |
| 337 return 0; | 335 return 0; |
| 338 return FXJS_GetArrayLength(m_pArray); | 336 return pRuntime->GetArrayLength(m_pArray); |
| 339 } | 337 } |
| 340 | 338 |
| 341 v8::Local<v8::Array> CJS_Array::ToV8Array(v8::Isolate* pIsolate) const { | 339 v8::Local<v8::Array> CJS_Array::ToV8Array(CJS_Runtime* pRuntime) const { |
| 342 if (m_pArray.IsEmpty()) | 340 if (m_pArray.IsEmpty()) |
| 343 m_pArray = FXJS_NewArray(pIsolate); | 341 m_pArray = pRuntime->NewArray(); |
| 344 | 342 |
| 345 return m_pArray; | 343 return m_pArray; |
| 346 } | 344 } |
| 347 | 345 |
| 348 CJS_Date::CJS_Date() {} | 346 CJS_Date::CJS_Date() {} |
| 349 | 347 |
| 350 CJS_Date::CJS_Date(v8::Isolate* pIsolate, double dMsecTime) | 348 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, double dMsecTime) |
| 351 : m_pDate(FXJS_NewDate(pIsolate, dMsecTime)) {} | 349 : m_pDate(pRuntime->NewDate(dMsecTime)) {} |
| 352 | 350 |
| 353 CJS_Date::CJS_Date(v8::Isolate* pIsolate, | 351 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, |
| 354 int year, | 352 int year, |
| 355 int mon, | 353 int mon, |
| 356 int day, | 354 int day, |
| 357 int hour, | 355 int hour, |
| 358 int min, | 356 int min, |
| 359 int sec) | 357 int sec) |
| 360 : m_pDate(FXJS_NewDate(pIsolate, | 358 : m_pDate(pRuntime->NewDate(MakeDate(year, mon, day, hour, min, sec, 0))) {} |
| 361 MakeDate(year, mon, day, hour, min, sec, 0))) {} | |
| 362 | 359 |
| 363 CJS_Date::~CJS_Date() {} | 360 CJS_Date::~CJS_Date() {} |
| 364 | 361 |
| 365 bool CJS_Date::IsValidDate(v8::Isolate* pIsolate) const { | 362 bool CJS_Date::IsValidDate(CJS_Runtime* pRuntime) const { |
| 366 return !m_pDate.IsEmpty() && !JS_PortIsNan(FXJS_ToNumber(pIsolate, m_pDate)); | 363 return !m_pDate.IsEmpty() && !JS_PortIsNan(pRuntime->ToNumber(m_pDate)); |
| 367 } | 364 } |
| 368 | 365 |
| 369 void CJS_Date::Attach(v8::Local<v8::Date> pDate) { | 366 void CJS_Date::Attach(v8::Local<v8::Date> pDate) { |
| 370 m_pDate = pDate; | 367 m_pDate = pDate; |
| 371 } | 368 } |
| 372 | 369 |
| 373 int CJS_Date::GetYear(v8::Isolate* pIsolate) const { | 370 int CJS_Date::GetYear(CJS_Runtime* pRuntime) const { |
| 374 if (!IsValidDate(pIsolate)) | 371 if (!IsValidDate(pRuntime)) |
| 375 return 0; | 372 return 0; |
| 376 | 373 |
| 377 return JS_GetYearFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 374 return JS_GetYearFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 378 } | 375 } |
| 379 | 376 |
| 380 void CJS_Date::SetYear(v8::Isolate* pIsolate, int iYear) { | 377 void CJS_Date::SetYear(CJS_Runtime* pRuntime, int iYear) { |
| 381 m_pDate = FXJS_NewDate( | 378 m_pDate = pRuntime->NewDate( |
| 382 pIsolate, | 379 MakeDate(iYear, GetMonth(pRuntime), GetDay(pRuntime), GetHours(pRuntime), |
| 383 MakeDate(iYear, GetMonth(pIsolate), GetDay(pIsolate), GetHours(pIsolate), | 380 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 384 GetMinutes(pIsolate), GetSeconds(pIsolate), 0)); | |
| 385 } | 381 } |
| 386 | 382 |
| 387 int CJS_Date::GetMonth(v8::Isolate* pIsolate) const { | 383 int CJS_Date::GetMonth(CJS_Runtime* pRuntime) const { |
| 388 if (!IsValidDate(pIsolate)) | 384 if (!IsValidDate(pRuntime)) |
| 389 return 0; | 385 return 0; |
| 390 | 386 |
| 391 return JS_GetMonthFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 387 return JS_GetMonthFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 392 } | 388 } |
| 393 | 389 |
| 394 void CJS_Date::SetMonth(v8::Isolate* pIsolate, int iMonth) { | 390 void CJS_Date::SetMonth(CJS_Runtime* pRuntime, int iMonth) { |
| 395 m_pDate = FXJS_NewDate( | 391 m_pDate = pRuntime->NewDate( |
| 396 pIsolate, | 392 MakeDate(GetYear(pRuntime), iMonth, GetDay(pRuntime), GetHours(pRuntime), |
| 397 MakeDate(GetYear(pIsolate), iMonth, GetDay(pIsolate), GetHours(pIsolate), | 393 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 398 GetMinutes(pIsolate), GetSeconds(pIsolate), 0)); | |
| 399 } | 394 } |
| 400 | 395 |
| 401 int CJS_Date::GetDay(v8::Isolate* pIsolate) const { | 396 int CJS_Date::GetDay(CJS_Runtime* pRuntime) const { |
| 402 if (!IsValidDate(pIsolate)) | 397 if (!IsValidDate(pRuntime)) |
| 403 return 0; | 398 return 0; |
| 404 | 399 |
| 405 return JS_GetDayFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 400 return JS_GetDayFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 406 } | 401 } |
| 407 | 402 |
| 408 void CJS_Date::SetDay(v8::Isolate* pIsolate, int iDay) { | 403 void CJS_Date::SetDay(CJS_Runtime* pRuntime, int iDay) { |
| 409 m_pDate = FXJS_NewDate( | 404 m_pDate = pRuntime->NewDate( |
| 410 pIsolate, | 405 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), iDay, GetHours(pRuntime), |
| 411 MakeDate(GetYear(pIsolate), GetMonth(pIsolate), iDay, GetHours(pIsolate), | 406 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 412 GetMinutes(pIsolate), GetSeconds(pIsolate), 0)); | |
| 413 } | 407 } |
| 414 | 408 |
| 415 int CJS_Date::GetHours(v8::Isolate* pIsolate) const { | 409 int CJS_Date::GetHours(CJS_Runtime* pRuntime) const { |
| 416 if (!IsValidDate(pIsolate)) | 410 if (!IsValidDate(pRuntime)) |
| 417 return 0; | 411 return 0; |
| 418 | 412 |
| 419 return JS_GetHourFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 413 return JS_GetHourFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 420 } | 414 } |
| 421 | 415 |
| 422 void CJS_Date::SetHours(v8::Isolate* pIsolate, int iHours) { | 416 void CJS_Date::SetHours(CJS_Runtime* pRuntime, int iHours) { |
| 423 m_pDate = FXJS_NewDate( | 417 m_pDate = pRuntime->NewDate( |
| 424 pIsolate, | 418 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), GetDay(pRuntime), iHours, |
| 425 MakeDate(GetYear(pIsolate), GetMonth(pIsolate), GetDay(pIsolate), iHours, | 419 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 426 GetMinutes(pIsolate), GetSeconds(pIsolate), 0)); | |
| 427 } | 420 } |
| 428 | 421 |
| 429 int CJS_Date::GetMinutes(v8::Isolate* pIsolate) const { | 422 int CJS_Date::GetMinutes(CJS_Runtime* pRuntime) const { |
| 430 if (!IsValidDate(pIsolate)) | 423 if (!IsValidDate(pRuntime)) |
| 431 return 0; | 424 return 0; |
| 432 | 425 |
| 433 return JS_GetMinFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 426 return JS_GetMinFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 434 } | 427 } |
| 435 | 428 |
| 436 void CJS_Date::SetMinutes(v8::Isolate* pIsolate, int minutes) { | 429 void CJS_Date::SetMinutes(CJS_Runtime* pRuntime, int minutes) { |
| 437 m_pDate = | 430 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), |
| 438 FXJS_NewDate(pIsolate, MakeDate(GetYear(pIsolate), GetMonth(pIsolate), | 431 GetDay(pRuntime), GetHours(pRuntime), |
| 439 GetDay(pIsolate), GetHours(pIsolate), | 432 minutes, GetSeconds(pRuntime), 0)); |
| 440 minutes, GetSeconds(pIsolate), 0)); | |
| 441 } | 433 } |
| 442 | 434 |
| 443 int CJS_Date::GetSeconds(v8::Isolate* pIsolate) const { | 435 int CJS_Date::GetSeconds(CJS_Runtime* pRuntime) const { |
| 444 if (!IsValidDate(pIsolate)) | 436 if (!IsValidDate(pRuntime)) |
| 445 return 0; | 437 return 0; |
| 446 | 438 |
| 447 return JS_GetSecFromTime(JS_LocalTime(FXJS_ToNumber(pIsolate, m_pDate))); | 439 return JS_GetSecFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); |
| 448 } | 440 } |
| 449 | 441 |
| 450 void CJS_Date::SetSeconds(v8::Isolate* pIsolate, int seconds) { | 442 void CJS_Date::SetSeconds(CJS_Runtime* pRuntime, int seconds) { |
| 451 m_pDate = | 443 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), |
| 452 FXJS_NewDate(pIsolate, MakeDate(GetYear(pIsolate), GetMonth(pIsolate), | 444 GetDay(pRuntime), GetHours(pRuntime), |
| 453 GetDay(pIsolate), GetHours(pIsolate), | 445 GetMinutes(pRuntime), seconds, 0)); |
| 454 GetMinutes(pIsolate), seconds, 0)); | |
| 455 } | 446 } |
| 456 | 447 |
| 457 double CJS_Date::ToDouble(v8::Isolate* pIsolate) const { | 448 double CJS_Date::ToDouble(CJS_Runtime* pRuntime) const { |
| 458 return !m_pDate.IsEmpty() ? FXJS_ToNumber(pIsolate, m_pDate) : 0.0; | 449 return !m_pDate.IsEmpty() ? pRuntime->ToNumber(m_pDate) : 0.0; |
| 459 } | 450 } |
| 460 | 451 |
| 461 CFX_WideString CJS_Date::ToString(v8::Isolate* pIsolate) const { | 452 CFX_WideString CJS_Date::ToString(CJS_Runtime* pRuntime) const { |
| 462 return !m_pDate.IsEmpty() ? FXJS_ToString(pIsolate, m_pDate) | 453 return !m_pDate.IsEmpty() ? pRuntime->ToString(m_pDate) : CFX_WideString(); |
| 463 : CFX_WideString(); | |
| 464 } | 454 } |
| 465 | 455 |
| 466 v8::Local<v8::Date> CJS_Date::ToV8Date(v8::Isolate* pIsolate) const { | 456 v8::Local<v8::Date> CJS_Date::ToV8Date(CJS_Runtime* pRuntime) const { |
| 467 return m_pDate; | 457 return m_pDate; |
| 468 } | 458 } |
| 469 | 459 |
| 470 double _getLocalTZA() { | 460 double _getLocalTZA() { |
| 471 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) | 461 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) |
| 472 return 0; | 462 return 0; |
| 473 time_t t = 0; | 463 time_t t = 0; |
| 474 time(&t); | 464 time(&t); |
| 475 localtime(&t); | 465 localtime(&t); |
| 476 #if _MSC_VER >= 1900 | 466 #if _MSC_VER >= 1900 |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 .ToLocalChecked(); | 671 .ToLocalChecked(); |
| 682 if (v->IsObject()) { | 672 if (v->IsObject()) { |
| 683 v8::Local<v8::Object> o = v->ToObject(context).ToLocalChecked(); | 673 v8::Local<v8::Object> o = v->ToObject(context).ToLocalChecked(); |
| 684 v = o->Get(context, v8::String::NewFromUtf8(pIsolate, "parse", | 674 v = o->Get(context, v8::String::NewFromUtf8(pIsolate, "parse", |
| 685 v8::NewStringType::kNormal) | 675 v8::NewStringType::kNormal) |
| 686 .ToLocalChecked()) | 676 .ToLocalChecked()) |
| 687 .ToLocalChecked(); | 677 .ToLocalChecked(); |
| 688 if (v->IsFunction()) { | 678 if (v->IsFunction()) { |
| 689 v8::Local<v8::Function> funC = v8::Local<v8::Function>::Cast(v); | 679 v8::Local<v8::Function> funC = v8::Local<v8::Function>::Cast(v); |
| 690 const int argc = 1; | 680 const int argc = 1; |
| 691 v8::Local<v8::String> timeStr = FXJS_WSToJSString(pIsolate, str); | 681 v8::Local<v8::String> timeStr = |
| 682 CJS_Runtime::CurrentRuntimeFromIsolate(pIsolate)->WSToJSString(str); |
| 692 v8::Local<v8::Value> argv[argc] = {timeStr}; | 683 v8::Local<v8::Value> argv[argc] = {timeStr}; |
| 693 v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked(); | 684 v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked(); |
| 694 if (v->IsNumber()) { | 685 if (v->IsNumber()) { |
| 695 double date = v->ToNumber(context).ToLocalChecked()->Value(); | 686 double date = v->ToNumber(context).ToLocalChecked()->Value(); |
| 696 if (!_isfinite(date)) | 687 if (!_isfinite(date)) |
| 697 return date; | 688 return date; |
| 698 return JS_LocalTime(date); | 689 return JS_LocalTime(date); |
| 699 } | 690 } |
| 700 } | 691 } |
| 701 } | 692 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 | 747 |
| 757 std::vector<CJS_Value> result(nKeywords, CJS_Value(pRuntime)); | 748 std::vector<CJS_Value> result(nKeywords, CJS_Value(pRuntime)); |
| 758 size_t size = std::min(originals.size(), nKeywords); | 749 size_t size = std::min(originals.size(), nKeywords); |
| 759 for (size_t i = 0; i < size; ++i) | 750 for (size_t i = 0; i < size; ++i) |
| 760 result[i] = originals[i]; | 751 result[i] = originals[i]; |
| 761 | 752 |
| 762 if (originals.size() != 1 || originals[0].GetType() != CJS_Value::VT_object || | 753 if (originals.size() != 1 || originals[0].GetType() != CJS_Value::VT_object || |
| 763 originals[0].IsArrayObject()) { | 754 originals[0].IsArrayObject()) { |
| 764 return result; | 755 return result; |
| 765 } | 756 } |
| 766 v8::Local<v8::Object> pObj = originals[0].ToV8Object(pRuntime->GetIsolate()); | 757 v8::Local<v8::Object> pObj = originals[0].ToV8Object(pRuntime); |
| 767 result[0] = CJS_Value(pRuntime); // Make unknown. | 758 result[0] = CJS_Value(pRuntime); // Make unknown. |
| 768 | 759 |
| 769 va_list ap; | 760 va_list ap; |
| 770 va_start(ap, nKeywords); | 761 va_start(ap, nKeywords); |
| 771 for (size_t i = 0; i < nKeywords; ++i) { | 762 for (size_t i = 0; i < nKeywords; ++i) { |
| 772 const wchar_t* property = va_arg(ap, const wchar_t*); | 763 const wchar_t* property = va_arg(ap, const wchar_t*); |
| 773 v8::Local<v8::Value> v8Value = | 764 v8::Local<v8::Value> v8Value = pRuntime->GetObjectProperty(pObj, property); |
| 774 FXJS_GetObjectProperty(pRuntime->GetIsolate(), pObj, property); | |
| 775 if (!v8Value->IsUndefined()) | 765 if (!v8Value->IsUndefined()) |
| 776 result[i] = CJS_Value(pRuntime, v8Value); | 766 result[i] = CJS_Value(pRuntime, v8Value); |
| 777 } | 767 } |
| 778 va_end(ap); | 768 va_end(ap); |
| 779 return result; | 769 return result; |
| 780 } | 770 } |
| OLD | NEW |