| 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 |
| 11 #include <algorithm> | 11 #include <algorithm> |
| 12 #include <cmath> | 12 #include <cmath> |
| 13 #include <limits> | 13 #include <limits> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "fpdfsdk/javascript/Document.h" | 16 #include "fpdfsdk/javascript/Document.h" |
| 17 #include "fpdfsdk/javascript/JS_Define.h" | 17 #include "fpdfsdk/javascript/JS_Define.h" |
| 18 #include "fpdfsdk/javascript/JS_Object.h" | 18 #include "fpdfsdk/javascript/JS_Object.h" |
| 19 | 19 |
| 20 static const uint32_t g_nan[2] = {0, 0x7FF80000}; | 20 namespace { |
| 21 static double GetNan() { | 21 |
| 22 const uint32_t g_nan[2] = {0, 0x7FF80000}; |
| 23 |
| 24 double GetNan() { |
| 22 return *(double*)g_nan; | 25 return *(double*)g_nan; |
| 23 } | 26 } |
| 24 | 27 |
| 28 double |
| 29 MakeDate(int year, int mon, int day, int hour, int min, int sec, int ms) { |
| 30 return JS_MakeDate(JS_MakeDay(year, mon, day), |
| 31 JS_MakeTime(hour, min, sec, ms)); |
| 32 } |
| 33 |
| 34 } // namespace |
| 35 |
| 25 CJS_Value::CJS_Value(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} | 36 CJS_Value::CJS_Value(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} |
| 26 | 37 |
| 27 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) |
| 28 : m_pValue(pValue), m_pJSRuntime(pRuntime) {} | 39 : m_pValue(pValue), m_pJSRuntime(pRuntime) {} |
| 29 | 40 |
| 30 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue) | 41 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue) |
| 31 : m_pJSRuntime(pRuntime) { | 42 : m_pJSRuntime(pRuntime) { |
| 32 operator=(iValue); | 43 operator=(iValue); |
| 33 } | 44 } |
| 34 | 45 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 } | 185 } |
| 175 | 186 |
| 176 void CJS_Value::SetNull() { | 187 void CJS_Value::SetNull() { |
| 177 m_pValue = FXJS_NewNull(m_pJSRuntime->GetIsolate()); | 188 m_pValue = FXJS_NewNull(m_pJSRuntime->GetIsolate()); |
| 178 } | 189 } |
| 179 | 190 |
| 180 void CJS_Value::operator=(const FX_CHAR* pStr) { | 191 void CJS_Value::operator=(const FX_CHAR* pStr) { |
| 181 operator=(CFX_WideString::FromLocal(pStr).c_str()); | 192 operator=(CFX_WideString::FromLocal(pStr).c_str()); |
| 182 } | 193 } |
| 183 | 194 |
| 184 void CJS_Value::operator=(CJS_Array& array) { | 195 void CJS_Value::operator=(const CJS_Array& array) { |
| 185 m_pValue = static_cast<v8::Local<v8::Array>>(array); | 196 ASSERT(m_pJSRuntime == array.GetJSRuntime()); |
| 197 m_pValue = array.ToV8Array(); |
| 186 } | 198 } |
| 187 | 199 |
| 188 void CJS_Value::operator=(CJS_Date& date) { | 200 void CJS_Value::operator=(const CJS_Date& date) { |
| 189 m_pValue = FXJS_NewDate(m_pJSRuntime->GetIsolate(), (double)date); | 201 ASSERT(m_pJSRuntime == date.GetJSRuntime()); |
| 202 m_pValue = FXJS_NewDate(m_pJSRuntime->GetIsolate(), date.ToDouble()); |
| 190 } | 203 } |
| 191 | 204 |
| 192 void CJS_Value::operator=(CJS_Value value) { | 205 void CJS_Value::operator=(const CJS_Value& value) { |
| 206 ASSERT(m_pJSRuntime == value.m_pJSRuntime); |
| 193 m_pValue = value.ToV8Value(); | 207 m_pValue = value.ToV8Value(); |
| 194 m_pJSRuntime = value.m_pJSRuntime; | |
| 195 } | 208 } |
| 196 | 209 |
| 197 // static | 210 // static |
| 198 CJS_Value::Type CJS_Value::GetValueType(v8::Local<v8::Value> value) { | 211 CJS_Value::Type CJS_Value::GetValueType(v8::Local<v8::Value> value) { |
| 199 if (value.IsEmpty()) | 212 if (value.IsEmpty()) |
| 200 return VT_unknown; | 213 return VT_unknown; |
| 201 if (value->IsString()) | 214 if (value->IsString()) |
| 202 return VT_string; | 215 return VT_string; |
| 203 if (value->IsNumber()) | 216 if (value->IsNumber()) |
| 204 return VT_number; | 217 return VT_number; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 void CJS_PropValue::operator<<(v8::Local<v8::Object> pObj) { | 320 void CJS_PropValue::operator<<(v8::Local<v8::Object> pObj) { |
| 308 ASSERT(!m_bIsSetting); | 321 ASSERT(!m_bIsSetting); |
| 309 CJS_Value::operator=(pObj); | 322 CJS_Value::operator=(pObj); |
| 310 } | 323 } |
| 311 | 324 |
| 312 void CJS_PropValue::operator>>(v8::Local<v8::Object>& ppObj) const { | 325 void CJS_PropValue::operator>>(v8::Local<v8::Object>& ppObj) const { |
| 313 ASSERT(m_bIsSetting); | 326 ASSERT(m_bIsSetting); |
| 314 ppObj = CJS_Value::ToV8Object(); | 327 ppObj = CJS_Value::ToV8Object(); |
| 315 } | 328 } |
| 316 | 329 |
| 317 void CJS_PropValue::StartSetting() { | |
| 318 m_bIsSetting = 1; | |
| 319 } | |
| 320 | |
| 321 void CJS_PropValue::StartGetting() { | |
| 322 m_bIsSetting = 0; | |
| 323 } | |
| 324 void CJS_PropValue::operator<<(CFX_ByteString str) { | 330 void CJS_PropValue::operator<<(CFX_ByteString str) { |
| 325 ASSERT(!m_bIsSetting); | 331 ASSERT(!m_bIsSetting); |
| 326 CJS_Value::operator=(str.c_str()); | 332 CJS_Value::operator=(str.c_str()); |
| 327 } | 333 } |
| 328 | 334 |
| 329 void CJS_PropValue::operator>>(CFX_ByteString& str) const { | 335 void CJS_PropValue::operator>>(CFX_ByteString& str) const { |
| 330 ASSERT(m_bIsSetting); | 336 ASSERT(m_bIsSetting); |
| 331 str = CJS_Value::ToCFXByteString(); | 337 str = CJS_Value::ToCFXByteString(); |
| 332 } | 338 } |
| 333 | 339 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 359 void CJS_PropValue::operator>>(CJS_Date& date) const { | 365 void CJS_PropValue::operator>>(CJS_Date& date) const { |
| 360 ASSERT(m_bIsSetting); | 366 ASSERT(m_bIsSetting); |
| 361 ConvertToDate(date); | 367 ConvertToDate(date); |
| 362 } | 368 } |
| 363 | 369 |
| 364 void CJS_PropValue::operator<<(CJS_Date& date) { | 370 void CJS_PropValue::operator<<(CJS_Date& date) { |
| 365 ASSERT(!m_bIsSetting); | 371 ASSERT(!m_bIsSetting); |
| 366 CJS_Value::operator=(date); | 372 CJS_Value::operator=(date); |
| 367 } | 373 } |
| 368 | 374 |
| 369 CJS_PropValue::operator v8::Local<v8::Value>() const { | |
| 370 return m_pValue; | |
| 371 } | |
| 372 | |
| 373 CJS_Array::CJS_Array(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} | 375 CJS_Array::CJS_Array(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} |
| 374 | 376 |
| 375 CJS_Array::~CJS_Array() {} | 377 CJS_Array::~CJS_Array() {} |
| 376 | 378 |
| 377 CJS_Array::CJS_Array(const CJS_Array& other) = default; | 379 CJS_Array::CJS_Array(const CJS_Array& other) = default; |
| 378 | 380 |
| 379 void CJS_Array::Attach(v8::Local<v8::Array> pArray) { | 381 void CJS_Array::Attach(v8::Local<v8::Array> pArray) { |
| 380 m_pArray = pArray; | 382 m_pArray = pArray; |
| 381 } | 383 } |
| 382 | 384 |
| 383 FX_BOOL CJS_Array::IsAttached() { | 385 void CJS_Array::GetElement(unsigned index, CJS_Value& value) const { |
| 384 return FALSE; | |
| 385 } | |
| 386 | |
| 387 void CJS_Array::GetElement(unsigned index, CJS_Value& value) { | |
| 388 if (m_pArray.IsEmpty()) | 386 if (m_pArray.IsEmpty()) |
| 389 return; | 387 return; |
| 390 v8::Local<v8::Value> p = | 388 v8::Local<v8::Value> p = |
| 391 FXJS_GetArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index); | 389 FXJS_GetArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index); |
| 392 value.Attach(p); | 390 value.Attach(p); |
| 393 } | 391 } |
| 394 | 392 |
| 395 void CJS_Array::SetElement(unsigned index, CJS_Value value) { | 393 void CJS_Array::SetElement(unsigned index, CJS_Value value) { |
| 396 if (m_pArray.IsEmpty()) | 394 if (m_pArray.IsEmpty()) |
| 397 m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); | 395 m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); |
| 398 | 396 |
| 399 FXJS_PutArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index, | 397 FXJS_PutArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index, |
| 400 value.ToV8Value()); | 398 value.ToV8Value()); |
| 401 } | 399 } |
| 402 | 400 |
| 403 int CJS_Array::GetLength() { | 401 int CJS_Array::GetLength() const { |
| 404 if (m_pArray.IsEmpty()) | 402 if (m_pArray.IsEmpty()) |
| 405 return 0; | 403 return 0; |
| 406 return FXJS_GetArrayLength(m_pArray); | 404 return FXJS_GetArrayLength(m_pArray); |
| 407 } | 405 } |
| 408 | 406 |
| 409 CJS_Array::operator v8::Local<v8::Array>() { | 407 v8::Local<v8::Array> CJS_Array::ToV8Array() const { |
| 410 if (m_pArray.IsEmpty()) | 408 if (m_pArray.IsEmpty()) |
| 411 m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); | 409 m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); |
| 412 | 410 |
| 413 return m_pArray; | 411 return m_pArray; |
| 414 } | 412 } |
| 415 | 413 |
| 416 CJS_Date::CJS_Date(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} | 414 CJS_Date::CJS_Date(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} |
| 417 | 415 |
| 418 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, double dMsecTime) | 416 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, double dMsecTime) |
| 419 : m_pJSRuntime(pRuntime) { | 417 : m_pJSRuntime(pRuntime) { |
| 420 m_pDate = FXJS_NewDate(pRuntime->GetIsolate(), dMsecTime); | 418 m_pDate = FXJS_NewDate(pRuntime->GetIsolate(), dMsecTime); |
| 421 } | 419 } |
| 422 | 420 |
| 423 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, | 421 CJS_Date::CJS_Date(CJS_Runtime* pRuntime, |
| 424 int year, | 422 int year, |
| 425 int mon, | 423 int mon, |
| 426 int day, | 424 int day, |
| 427 int hour, | 425 int hour, |
| 428 int min, | 426 int min, |
| 429 int sec) | 427 int sec) |
| 430 : m_pJSRuntime(pRuntime) { | 428 : m_pJSRuntime(pRuntime) { |
| 431 m_pDate = FXJS_NewDate(pRuntime->GetIsolate(), | 429 m_pDate = FXJS_NewDate(pRuntime->GetIsolate(), |
| 432 MakeDate(year, mon, day, hour, min, sec, 0)); | 430 MakeDate(year, mon, day, hour, min, sec, 0)); |
| 433 } | 431 } |
| 434 | 432 |
| 435 double CJS_Date::MakeDate(int year, | |
| 436 int mon, | |
| 437 int day, | |
| 438 int hour, | |
| 439 int min, | |
| 440 int sec, | |
| 441 int ms) { | |
| 442 return JS_MakeDate(JS_MakeDay(year, mon, day), | |
| 443 JS_MakeTime(hour, min, sec, ms)); | |
| 444 } | |
| 445 | |
| 446 CJS_Date::~CJS_Date() {} | 433 CJS_Date::~CJS_Date() {} |
| 447 | 434 |
| 448 FX_BOOL CJS_Date::IsValidDate() { | 435 bool CJS_Date::IsValidDate() const { |
| 449 if (m_pDate.IsEmpty()) | 436 return !m_pDate.IsEmpty() && |
| 450 return FALSE; | 437 !JS_PortIsNan(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)); |
| 451 return !JS_PortIsNan(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate)); | |
| 452 } | 438 } |
| 453 | 439 |
| 454 void CJS_Date::Attach(v8::Local<v8::Value> pDate) { | 440 void CJS_Date::Attach(v8::Local<v8::Value> pDate) { |
| 455 m_pDate = pDate; | 441 m_pDate = pDate; |
| 456 } | 442 } |
| 457 | 443 |
| 458 int CJS_Date::GetYear() { | 444 int CJS_Date::GetYear() const { |
| 459 if (IsValidDate()) | 445 if (!IsValidDate()) |
| 460 return JS_GetYearFromTime( | 446 return 0; |
| 461 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 462 | 447 |
| 463 return 0; | 448 return JS_GetYearFromTime( |
| 449 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 464 } | 450 } |
| 465 | 451 |
| 466 void CJS_Date::SetYear(int iYear) { | 452 void CJS_Date::SetYear(int iYear) { |
| 467 double date = MakeDate(iYear, GetMonth(), GetDay(), GetHours(), GetMinutes(), | 453 double date = MakeDate(iYear, GetMonth(), GetDay(), GetHours(), GetMinutes(), |
| 468 GetSeconds(), 0); | 454 GetSeconds(), 0); |
| 469 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 455 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 470 } | 456 } |
| 471 | 457 |
| 472 int CJS_Date::GetMonth() { | 458 int CJS_Date::GetMonth() const { |
| 473 if (IsValidDate()) | 459 if (!IsValidDate()) |
| 474 return JS_GetMonthFromTime( | 460 return 0; |
| 475 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 476 | 461 |
| 477 return 0; | 462 return JS_GetMonthFromTime( |
| 463 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 478 } | 464 } |
| 479 | 465 |
| 480 void CJS_Date::SetMonth(int iMonth) { | 466 void CJS_Date::SetMonth(int iMonth) { |
| 481 double date = MakeDate(GetYear(), iMonth, GetDay(), GetHours(), GetMinutes(), | 467 double date = MakeDate(GetYear(), iMonth, GetDay(), GetHours(), GetMinutes(), |
| 482 GetSeconds(), 0); | 468 GetSeconds(), 0); |
| 483 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 469 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 484 } | 470 } |
| 485 | 471 |
| 486 int CJS_Date::GetDay() { | 472 int CJS_Date::GetDay() const { |
| 487 if (IsValidDate()) | 473 if (!IsValidDate()) |
| 488 return JS_GetDayFromTime( | 474 return 0; |
| 489 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 490 | 475 |
| 491 return 0; | 476 return JS_GetDayFromTime( |
| 477 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 492 } | 478 } |
| 493 | 479 |
| 494 void CJS_Date::SetDay(int iDay) { | 480 void CJS_Date::SetDay(int iDay) { |
| 495 double date = MakeDate(GetYear(), GetMonth(), iDay, GetHours(), GetMinutes(), | 481 double date = MakeDate(GetYear(), GetMonth(), iDay, GetHours(), GetMinutes(), |
| 496 GetSeconds(), 0); | 482 GetSeconds(), 0); |
| 497 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 483 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 498 } | 484 } |
| 499 | 485 |
| 500 int CJS_Date::GetHours() { | 486 int CJS_Date::GetHours() const { |
| 501 if (IsValidDate()) | 487 if (!IsValidDate()) |
| 502 return JS_GetHourFromTime( | 488 return 0; |
| 503 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 504 | 489 |
| 505 return 0; | 490 return JS_GetHourFromTime( |
| 491 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 506 } | 492 } |
| 507 | 493 |
| 508 void CJS_Date::SetHours(int iHours) { | 494 void CJS_Date::SetHours(int iHours) { |
| 509 double date = MakeDate(GetYear(), GetMonth(), GetDay(), iHours, GetMinutes(), | 495 double date = MakeDate(GetYear(), GetMonth(), GetDay(), iHours, GetMinutes(), |
| 510 GetSeconds(), 0); | 496 GetSeconds(), 0); |
| 511 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 497 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 512 } | 498 } |
| 513 | 499 |
| 514 int CJS_Date::GetMinutes() { | 500 int CJS_Date::GetMinutes() const { |
| 515 if (IsValidDate()) | 501 if (!IsValidDate()) |
| 516 return JS_GetMinFromTime( | 502 return 0; |
| 517 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 518 | 503 |
| 519 return 0; | 504 return JS_GetMinFromTime( |
| 505 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 520 } | 506 } |
| 521 | 507 |
| 522 void CJS_Date::SetMinutes(int minutes) { | 508 void CJS_Date::SetMinutes(int minutes) { |
| 523 double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), minutes, | 509 double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), minutes, |
| 524 GetSeconds(), 0); | 510 GetSeconds(), 0); |
| 525 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 511 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 526 } | 512 } |
| 527 | 513 |
| 528 int CJS_Date::GetSeconds() { | 514 int CJS_Date::GetSeconds() const { |
| 529 if (IsValidDate()) | 515 if (!IsValidDate()) |
| 530 return JS_GetSecFromTime( | 516 return 0; |
| 531 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); | |
| 532 | 517 |
| 533 return 0; | 518 return JS_GetSecFromTime( |
| 519 JS_LocalTime(FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate))); |
| 534 } | 520 } |
| 535 | 521 |
| 536 void CJS_Date::SetSeconds(int seconds) { | 522 void CJS_Date::SetSeconds(int seconds) { |
| 537 double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), | 523 double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), |
| 538 GetMinutes(), seconds, 0); | 524 GetMinutes(), seconds, 0); |
| 539 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); | 525 FXJS_ValueCopy(m_pDate, FXJS_NewDate(m_pJSRuntime->GetIsolate(), date)); |
| 540 } | 526 } |
| 541 | 527 |
| 542 CJS_Date::operator v8::Local<v8::Value>() { | 528 double CJS_Date::ToDouble() const { |
| 543 return m_pDate; | |
| 544 } | |
| 545 | |
| 546 CJS_Date::operator double() const { | |
| 547 if (m_pDate.IsEmpty()) | 529 if (m_pDate.IsEmpty()) |
| 548 return 0.0; | 530 return 0.0; |
| 531 |
| 549 return FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate); | 532 return FXJS_ToNumber(m_pJSRuntime->GetIsolate(), m_pDate); |
| 550 } | 533 } |
| 551 | 534 |
| 552 CFX_WideString CJS_Date::ToString() const { | 535 CFX_WideString CJS_Date::ToString() const { |
| 553 if (m_pDate.IsEmpty()) | 536 if (m_pDate.IsEmpty()) |
| 554 return L""; | 537 return L""; |
| 538 |
| 555 return FXJS_ToString(m_pJSRuntime->GetIsolate(), m_pDate); | 539 return FXJS_ToString(m_pJSRuntime->GetIsolate(), m_pDate); |
| 556 } | 540 } |
| 557 | 541 |
| 558 double _getLocalTZA() { | 542 double _getLocalTZA() { |
| 559 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) | 543 if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) |
| 560 return 0; | 544 return 0; |
| 561 time_t t = 0; | 545 time_t t = 0; |
| 562 time(&t); | 546 time(&t); |
| 563 localtime(&t); | 547 localtime(&t); |
| 564 #if _MSC_VER >= 1900 | 548 #if _MSC_VER >= 1900 |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 for (size_t i = 0; i < nKeywords; ++i) { | 843 for (size_t i = 0; i < nKeywords; ++i) { |
| 860 const wchar_t* property = va_arg(ap, const wchar_t*); | 844 const wchar_t* property = va_arg(ap, const wchar_t*); |
| 861 v8::Local<v8::Value> v8Value = | 845 v8::Local<v8::Value> v8Value = |
| 862 FXJS_GetObjectElement(pRuntime->GetIsolate(), pObj, property); | 846 FXJS_GetObjectElement(pRuntime->GetIsolate(), pObj, property); |
| 863 if (!v8Value->IsUndefined()) | 847 if (!v8Value->IsUndefined()) |
| 864 result[i] = CJS_Value(pRuntime, v8Value); | 848 result[i] = CJS_Value(pRuntime, v8Value); |
| 865 } | 849 } |
| 866 va_end(ap); | 850 va_end(ap); |
| 867 return result; | 851 return result; |
| 868 } | 852 } |
| OLD | NEW |