| 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 | 81 |
| 82 int CJS_Value::ToInt(CJS_Runtime* pRuntime) const { | 82 int CJS_Value::ToInt(CJS_Runtime* pRuntime) const { |
| 83 return pRuntime->ToInt32(m_pValue); | 83 return pRuntime->ToInt32(m_pValue); |
| 84 } | 84 } |
| 85 | 85 |
| 86 bool CJS_Value::ToBool(CJS_Runtime* pRuntime) const { | 86 bool CJS_Value::ToBool(CJS_Runtime* pRuntime) const { |
| 87 return pRuntime->ToBoolean(m_pValue); | 87 return pRuntime->ToBoolean(m_pValue); |
| 88 } | 88 } |
| 89 | 89 |
| 90 double CJS_Value::ToDouble(CJS_Runtime* pRuntime) const { | 90 double CJS_Value::ToDouble(CJS_Runtime* pRuntime) const { |
| 91 return pRuntime->ToNumber(m_pValue); | 91 return pRuntime->ToDouble(m_pValue); |
| 92 } | 92 } |
| 93 | 93 |
| 94 float CJS_Value::ToFloat(CJS_Runtime* pRuntime) const { | 94 float CJS_Value::ToFloat(CJS_Runtime* pRuntime) const { |
| 95 return (float)ToDouble(pRuntime); | 95 return (float)ToDouble(pRuntime); |
| 96 } | 96 } |
| 97 | 97 |
| 98 CJS_Object* CJS_Value::ToCJSObject(CJS_Runtime* pRuntime) const { | 98 CJS_Object* CJS_Value::ToCJSObject(CJS_Runtime* pRuntime) const { |
| 99 v8::Local<v8::Object> pObj = pRuntime->ToObject(m_pValue); | 99 v8::Local<v8::Object> pObj = pRuntime->ToObject(m_pValue); |
| 100 return static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(pObj)); | 100 return static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(pObj)); |
| 101 } | 101 } |
| 102 | 102 |
| 103 v8::Local<v8::Object> CJS_Value::ToV8Object(CJS_Runtime* pRuntime) const { | 103 v8::Local<v8::Object> CJS_Value::ToV8Object(CJS_Runtime* pRuntime) const { |
| 104 return pRuntime->ToObject(m_pValue); | 104 return pRuntime->ToObject(m_pValue); |
| 105 } | 105 } |
| 106 | 106 |
| 107 CFX_WideString CJS_Value::ToCFXWideString(CJS_Runtime* pRuntime) const { | 107 CFX_WideString CJS_Value::ToCFXWideString(CJS_Runtime* pRuntime) const { |
| 108 return pRuntime->ToString(m_pValue); | 108 return pRuntime->ToWideString(m_pValue); |
| 109 } | 109 } |
| 110 | 110 |
| 111 CFX_ByteString CJS_Value::ToCFXByteString(CJS_Runtime* pRuntime) const { | 111 CFX_ByteString CJS_Value::ToCFXByteString(CJS_Runtime* pRuntime) const { |
| 112 return CFX_ByteString::FromUnicode(ToCFXWideString(pRuntime)); | 112 return CFX_ByteString::FromUnicode(ToCFXWideString(pRuntime)); |
| 113 } | 113 } |
| 114 | 114 |
| 115 v8::Local<v8::Value> CJS_Value::ToV8Value(CJS_Runtime* pRuntime) const { | 115 v8::Local<v8::Value> CJS_Value::ToV8Value(CJS_Runtime* pRuntime) const { |
| 116 return m_pValue; | 116 return m_pValue; |
| 117 } | 117 } |
| 118 | 118 |
| 119 v8::Local<v8::Array> CJS_Value::ToV8Array(CJS_Runtime* pRuntime) const { | 119 v8::Local<v8::Array> CJS_Value::ToV8Array(CJS_Runtime* pRuntime) const { |
| 120 if (IsArrayObject()) | 120 return pRuntime->ToArray(m_pValue); |
| 121 return v8::Local<v8::Array>::Cast(pRuntime->ToObject(m_pValue)); | |
| 122 return v8::Local<v8::Array>(); | |
| 123 } | 121 } |
| 124 | 122 |
| 125 void CJS_Value::SetNull(CJS_Runtime* pRuntime) { | 123 void CJS_Value::SetNull(CJS_Runtime* pRuntime) { |
| 126 m_pValue = pRuntime->NewNull(); | 124 m_pValue = pRuntime->NewNull(); |
| 127 } | 125 } |
| 128 | 126 |
| 129 void CJS_Value::MaybeCoerceToNumber(CJS_Runtime* pRuntime) { | 127 void CJS_Value::MaybeCoerceToNumber(CJS_Runtime* pRuntime) { |
| 130 bool bAllowNaN = false; | 128 bool bAllowNaN = false; |
| 131 if (GetType() == VT_string) { | 129 if (GetType() == VT_string) { |
| 132 CFX_ByteString bstr = ToCFXByteString(pRuntime); | 130 CFX_ByteString bstr = ToCFXByteString(pRuntime); |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 int mon, | 351 int mon, |
| 354 int day, | 352 int day, |
| 355 int hour, | 353 int hour, |
| 356 int min, | 354 int min, |
| 357 int sec) | 355 int sec) |
| 358 : m_pDate(pRuntime->NewDate(MakeDate(year, mon, day, hour, min, sec, 0))) {} | 356 : m_pDate(pRuntime->NewDate(MakeDate(year, mon, day, hour, min, sec, 0))) {} |
| 359 | 357 |
| 360 CJS_Date::~CJS_Date() {} | 358 CJS_Date::~CJS_Date() {} |
| 361 | 359 |
| 362 bool CJS_Date::IsValidDate(CJS_Runtime* pRuntime) const { | 360 bool CJS_Date::IsValidDate(CJS_Runtime* pRuntime) const { |
| 363 return !m_pDate.IsEmpty() && !JS_PortIsNan(pRuntime->ToNumber(m_pDate)); | 361 return !m_pDate.IsEmpty() && !JS_PortIsNan(pRuntime->ToDouble(m_pDate)); |
| 364 } | 362 } |
| 365 | 363 |
| 366 void CJS_Date::Attach(v8::Local<v8::Date> pDate) { | 364 void CJS_Date::Attach(v8::Local<v8::Date> pDate) { |
| 367 m_pDate = pDate; | 365 m_pDate = pDate; |
| 368 } | 366 } |
| 369 | 367 |
| 370 int CJS_Date::GetYear(CJS_Runtime* pRuntime) const { | 368 int CJS_Date::GetYear(CJS_Runtime* pRuntime) const { |
| 371 if (!IsValidDate(pRuntime)) | 369 if (!IsValidDate(pRuntime)) |
| 372 return 0; | 370 return 0; |
| 373 | 371 |
| 374 return JS_GetYearFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 372 return JS_GetYearFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 375 } | 373 } |
| 376 | 374 |
| 377 void CJS_Date::SetYear(CJS_Runtime* pRuntime, int iYear) { | 375 void CJS_Date::SetYear(CJS_Runtime* pRuntime, int iYear) { |
| 378 m_pDate = pRuntime->NewDate( | 376 m_pDate = pRuntime->NewDate( |
| 379 MakeDate(iYear, GetMonth(pRuntime), GetDay(pRuntime), GetHours(pRuntime), | 377 MakeDate(iYear, GetMonth(pRuntime), GetDay(pRuntime), GetHours(pRuntime), |
| 380 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); | 378 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 381 } | 379 } |
| 382 | 380 |
| 383 int CJS_Date::GetMonth(CJS_Runtime* pRuntime) const { | 381 int CJS_Date::GetMonth(CJS_Runtime* pRuntime) const { |
| 384 if (!IsValidDate(pRuntime)) | 382 if (!IsValidDate(pRuntime)) |
| 385 return 0; | 383 return 0; |
| 386 | 384 |
| 387 return JS_GetMonthFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 385 return JS_GetMonthFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 388 } | 386 } |
| 389 | 387 |
| 390 void CJS_Date::SetMonth(CJS_Runtime* pRuntime, int iMonth) { | 388 void CJS_Date::SetMonth(CJS_Runtime* pRuntime, int iMonth) { |
| 391 m_pDate = pRuntime->NewDate( | 389 m_pDate = pRuntime->NewDate( |
| 392 MakeDate(GetYear(pRuntime), iMonth, GetDay(pRuntime), GetHours(pRuntime), | 390 MakeDate(GetYear(pRuntime), iMonth, GetDay(pRuntime), GetHours(pRuntime), |
| 393 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); | 391 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 394 } | 392 } |
| 395 | 393 |
| 396 int CJS_Date::GetDay(CJS_Runtime* pRuntime) const { | 394 int CJS_Date::GetDay(CJS_Runtime* pRuntime) const { |
| 397 if (!IsValidDate(pRuntime)) | 395 if (!IsValidDate(pRuntime)) |
| 398 return 0; | 396 return 0; |
| 399 | 397 |
| 400 return JS_GetDayFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 398 return JS_GetDayFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 401 } | 399 } |
| 402 | 400 |
| 403 void CJS_Date::SetDay(CJS_Runtime* pRuntime, int iDay) { | 401 void CJS_Date::SetDay(CJS_Runtime* pRuntime, int iDay) { |
| 404 m_pDate = pRuntime->NewDate( | 402 m_pDate = pRuntime->NewDate( |
| 405 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), iDay, GetHours(pRuntime), | 403 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), iDay, GetHours(pRuntime), |
| 406 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); | 404 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 407 } | 405 } |
| 408 | 406 |
| 409 int CJS_Date::GetHours(CJS_Runtime* pRuntime) const { | 407 int CJS_Date::GetHours(CJS_Runtime* pRuntime) const { |
| 410 if (!IsValidDate(pRuntime)) | 408 if (!IsValidDate(pRuntime)) |
| 411 return 0; | 409 return 0; |
| 412 | 410 |
| 413 return JS_GetHourFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 411 return JS_GetHourFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 414 } | 412 } |
| 415 | 413 |
| 416 void CJS_Date::SetHours(CJS_Runtime* pRuntime, int iHours) { | 414 void CJS_Date::SetHours(CJS_Runtime* pRuntime, int iHours) { |
| 417 m_pDate = pRuntime->NewDate( | 415 m_pDate = pRuntime->NewDate( |
| 418 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), GetDay(pRuntime), iHours, | 416 MakeDate(GetYear(pRuntime), GetMonth(pRuntime), GetDay(pRuntime), iHours, |
| 419 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); | 417 GetMinutes(pRuntime), GetSeconds(pRuntime), 0)); |
| 420 } | 418 } |
| 421 | 419 |
| 422 int CJS_Date::GetMinutes(CJS_Runtime* pRuntime) const { | 420 int CJS_Date::GetMinutes(CJS_Runtime* pRuntime) const { |
| 423 if (!IsValidDate(pRuntime)) | 421 if (!IsValidDate(pRuntime)) |
| 424 return 0; | 422 return 0; |
| 425 | 423 |
| 426 return JS_GetMinFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 424 return JS_GetMinFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 427 } | 425 } |
| 428 | 426 |
| 429 void CJS_Date::SetMinutes(CJS_Runtime* pRuntime, int minutes) { | 427 void CJS_Date::SetMinutes(CJS_Runtime* pRuntime, int minutes) { |
| 430 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), | 428 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), |
| 431 GetDay(pRuntime), GetHours(pRuntime), | 429 GetDay(pRuntime), GetHours(pRuntime), |
| 432 minutes, GetSeconds(pRuntime), 0)); | 430 minutes, GetSeconds(pRuntime), 0)); |
| 433 } | 431 } |
| 434 | 432 |
| 435 int CJS_Date::GetSeconds(CJS_Runtime* pRuntime) const { | 433 int CJS_Date::GetSeconds(CJS_Runtime* pRuntime) const { |
| 436 if (!IsValidDate(pRuntime)) | 434 if (!IsValidDate(pRuntime)) |
| 437 return 0; | 435 return 0; |
| 438 | 436 |
| 439 return JS_GetSecFromTime(JS_LocalTime(pRuntime->ToNumber(m_pDate))); | 437 return JS_GetSecFromTime(JS_LocalTime(pRuntime->ToDouble(m_pDate))); |
| 440 } | 438 } |
| 441 | 439 |
| 442 void CJS_Date::SetSeconds(CJS_Runtime* pRuntime, int seconds) { | 440 void CJS_Date::SetSeconds(CJS_Runtime* pRuntime, int seconds) { |
| 443 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), | 441 m_pDate = pRuntime->NewDate(MakeDate(GetYear(pRuntime), GetMonth(pRuntime), |
| 444 GetDay(pRuntime), GetHours(pRuntime), | 442 GetDay(pRuntime), GetHours(pRuntime), |
| 445 GetMinutes(pRuntime), seconds, 0)); | 443 GetMinutes(pRuntime), seconds, 0)); |
| 446 } | 444 } |
| 447 | 445 |
| 448 double CJS_Date::ToDouble(CJS_Runtime* pRuntime) const { | 446 double CJS_Date::ToDouble(CJS_Runtime* pRuntime) const { |
| 449 return !m_pDate.IsEmpty() ? pRuntime->ToNumber(m_pDate) : 0.0; | 447 return !m_pDate.IsEmpty() ? pRuntime->ToDouble(m_pDate) : 0.0; |
| 450 } | 448 } |
| 451 | 449 |
| 452 CFX_WideString CJS_Date::ToString(CJS_Runtime* pRuntime) const { | 450 CFX_WideString CJS_Date::ToString(CJS_Runtime* pRuntime) const { |
| 453 return !m_pDate.IsEmpty() ? pRuntime->ToString(m_pDate) : CFX_WideString(); | 451 return !m_pDate.IsEmpty() ? pRuntime->ToWideString(m_pDate) |
| 452 : CFX_WideString(); |
| 454 } | 453 } |
| 455 | 454 |
| 456 v8::Local<v8::Date> CJS_Date::ToV8Date(CJS_Runtime* pRuntime) const { | 455 v8::Local<v8::Date> CJS_Date::ToV8Date(CJS_Runtime* pRuntime) const { |
| 457 return m_pDate; | 456 return m_pDate; |
| 458 } | 457 } |
| 459 | 458 |
| 460 double _getLocalTZA() { | 459 double _getLocalTZA() { |
| 461 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) | 460 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) |
| 462 return 0; | 461 return 0; |
| 463 time_t t = 0; | 462 time_t t = 0; |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 va_start(ap, nKeywords); | 760 va_start(ap, nKeywords); |
| 762 for (size_t i = 0; i < nKeywords; ++i) { | 761 for (size_t i = 0; i < nKeywords; ++i) { |
| 763 const wchar_t* property = va_arg(ap, const wchar_t*); | 762 const wchar_t* property = va_arg(ap, const wchar_t*); |
| 764 v8::Local<v8::Value> v8Value = pRuntime->GetObjectProperty(pObj, property); | 763 v8::Local<v8::Value> v8Value = pRuntime->GetObjectProperty(pObj, property); |
| 765 if (!v8Value->IsUndefined()) | 764 if (!v8Value->IsUndefined()) |
| 766 result[i] = CJS_Value(pRuntime, v8Value); | 765 result[i] = CJS_Value(pRuntime, v8Value); |
| 767 } | 766 } |
| 768 va_end(ap); | 767 va_end(ap); |
| 769 return result; | 768 return result; |
| 770 } | 769 } |
| OLD | NEW |