| 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 "xfa/fxjse/value.h" | 7 #include "xfa/fxjse/value.h" |
| 8 | 8 |
| 9 #include <math.h> | 9 #include <math.h> |
| 10 | 10 |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 reinterpret_cast<CFXJSE_Value*>(hValue)->GetIsolate()); | 242 reinterpret_cast<CFXJSE_Value*>(hValue)->GetIsolate()); |
| 243 } | 243 } |
| 244 | 244 |
| 245 void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Name, | 245 void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Name, |
| 246 const CFX_ByteStringC& utf8Message) { | 246 const CFX_ByteStringC& utf8Message) { |
| 247 v8::Isolate* pIsolate = v8::Isolate::GetCurrent(); | 247 v8::Isolate* pIsolate = v8::Isolate::GetCurrent(); |
| 248 ASSERT(pIsolate); | 248 ASSERT(pIsolate); |
| 249 | 249 |
| 250 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); | 250 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); |
| 251 v8::Local<v8::String> hMessage = v8::String::NewFromUtf8( | 251 v8::Local<v8::String> hMessage = v8::String::NewFromUtf8( |
| 252 pIsolate, utf8Message.GetCStr(), v8::String::kNormalString, | 252 pIsolate, utf8Message.c_str(), v8::String::kNormalString, |
| 253 utf8Message.GetLength()); | 253 utf8Message.GetLength()); |
| 254 v8::Local<v8::Value> hError; | 254 v8::Local<v8::Value> hError; |
| 255 | 255 |
| 256 if (utf8Name == "RangeError") { | 256 if (utf8Name == "RangeError") { |
| 257 hError = v8::Exception::RangeError(hMessage); | 257 hError = v8::Exception::RangeError(hMessage); |
| 258 } else if (utf8Name == "ReferenceError") { | 258 } else if (utf8Name == "ReferenceError") { |
| 259 hError = v8::Exception::ReferenceError(hMessage); | 259 hError = v8::Exception::ReferenceError(hMessage); |
| 260 } else if (utf8Name == "SyntaxError") { | 260 } else if (utf8Name == "SyntaxError") { |
| 261 hError = v8::Exception::SyntaxError(hMessage); | 261 hError = v8::Exception::SyntaxError(hMessage); |
| 262 } else if (utf8Name == "TypeError") { | 262 } else if (utf8Name == "TypeError") { |
| 263 hError = v8::Exception::TypeError(hMessage); | 263 hError = v8::Exception::TypeError(hMessage); |
| 264 } else { | 264 } else { |
| 265 hError = v8::Exception::Error(hMessage); | 265 hError = v8::Exception::Error(hMessage); |
| 266 if (utf8Name != "Error" && !utf8Name.IsEmpty()) { | 266 if (utf8Name != "Error" && !utf8Name.IsEmpty()) { |
| 267 hError.As<v8::Object>()->Set( | 267 hError.As<v8::Object>()->Set( |
| 268 v8::String::NewFromUtf8(pIsolate, "name"), | 268 v8::String::NewFromUtf8(pIsolate, "name"), |
| 269 v8::String::NewFromUtf8(pIsolate, utf8Name.GetCStr(), | 269 v8::String::NewFromUtf8(pIsolate, utf8Name.c_str(), |
| 270 v8::String::kNormalString, | 270 v8::String::kNormalString, |
| 271 utf8Name.GetLength())); | 271 utf8Name.GetLength())); |
| 272 } | 272 } |
| 273 } | 273 } |
| 274 pIsolate->ThrowException(hError); | 274 pIsolate->ThrowException(hError); |
| 275 } | 275 } |
| 276 | 276 |
| 277 CFXJSE_Value* CFXJSE_Value::Create(v8::Isolate* pIsolate) { | 277 CFXJSE_Value* CFXJSE_Value::Create(v8::Isolate* pIsolate) { |
| 278 return new CFXJSE_Value(pIsolate); | 278 return new CFXJSE_Value(pIsolate); |
| 279 } | 279 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 CFXJSE_Value* lpPropValue) { | 371 CFXJSE_Value* lpPropValue) { |
| 372 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 372 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 373 v8::Local<v8::Value> hObject = | 373 v8::Local<v8::Value> hObject = |
| 374 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 374 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| 375 if (!hObject->IsObject()) | 375 if (!hObject->IsObject()) |
| 376 return FALSE; | 376 return FALSE; |
| 377 | 377 |
| 378 v8::Local<v8::Value> hPropValue = | 378 v8::Local<v8::Value> hPropValue = |
| 379 v8::Local<v8::Value>::New(m_pIsolate, lpPropValue->DirectGetValue()); | 379 v8::Local<v8::Value>::New(m_pIsolate, lpPropValue->DirectGetValue()); |
| 380 return (FX_BOOL)hObject.As<v8::Object>()->Set( | 380 return (FX_BOOL)hObject.As<v8::Object>()->Set( |
| 381 v8::String::NewFromUtf8(m_pIsolate, szPropName.GetCStr(), | 381 v8::String::NewFromUtf8(m_pIsolate, szPropName.c_str(), |
| 382 v8::String::kNormalString, | 382 v8::String::kNormalString, |
| 383 szPropName.GetLength()), | 383 szPropName.GetLength()), |
| 384 hPropValue); | 384 hPropValue); |
| 385 } | 385 } |
| 386 | 386 |
| 387 FX_BOOL CFXJSE_Value::GetObjectProperty(const CFX_ByteStringC& szPropName, | 387 FX_BOOL CFXJSE_Value::GetObjectProperty(const CFX_ByteStringC& szPropName, |
| 388 CFXJSE_Value* lpPropValue) { | 388 CFXJSE_Value* lpPropValue) { |
| 389 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 389 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 390 v8::Local<v8::Value> hObject = | 390 v8::Local<v8::Value> hObject = |
| 391 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 391 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| 392 if (!hObject->IsObject()) | 392 if (!hObject->IsObject()) |
| 393 return FALSE; | 393 return FALSE; |
| 394 | 394 |
| 395 v8::Local<v8::Value> hPropValue = | 395 v8::Local<v8::Value> hPropValue = |
| 396 hObject.As<v8::Object>()->Get(v8::String::NewFromUtf8( | 396 hObject.As<v8::Object>()->Get(v8::String::NewFromUtf8( |
| 397 m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, | 397 m_pIsolate, szPropName.c_str(), v8::String::kNormalString, |
| 398 szPropName.GetLength())); | 398 szPropName.GetLength())); |
| 399 lpPropValue->ForceSetValue(hPropValue); | 399 lpPropValue->ForceSetValue(hPropValue); |
| 400 return TRUE; | 400 return TRUE; |
| 401 } | 401 } |
| 402 | 402 |
| 403 FX_BOOL CFXJSE_Value::SetObjectProperty(uint32_t uPropIdx, | 403 FX_BOOL CFXJSE_Value::SetObjectProperty(uint32_t uPropIdx, |
| 404 CFXJSE_Value* lpPropValue) { | 404 CFXJSE_Value* lpPropValue) { |
| 405 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 405 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 406 v8::Local<v8::Value> hObject = | 406 v8::Local<v8::Value> hObject = |
| 407 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 407 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 427 } | 427 } |
| 428 | 428 |
| 429 FX_BOOL CFXJSE_Value::DeleteObjectProperty(const CFX_ByteStringC& szPropName) { | 429 FX_BOOL CFXJSE_Value::DeleteObjectProperty(const CFX_ByteStringC& szPropName) { |
| 430 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 430 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 431 v8::Local<v8::Value> hObject = | 431 v8::Local<v8::Value> hObject = |
| 432 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 432 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| 433 if (!hObject->IsObject()) | 433 if (!hObject->IsObject()) |
| 434 return FALSE; | 434 return FALSE; |
| 435 | 435 |
| 436 hObject.As<v8::Object>()->Delete(v8::String::NewFromUtf8( | 436 hObject.As<v8::Object>()->Delete(v8::String::NewFromUtf8( |
| 437 m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, | 437 m_pIsolate, szPropName.c_str(), v8::String::kNormalString, |
| 438 szPropName.GetLength())); | 438 szPropName.GetLength())); |
| 439 return TRUE; | 439 return TRUE; |
| 440 } | 440 } |
| 441 | 441 |
| 442 FX_BOOL CFXJSE_Value::HasObjectOwnProperty(const CFX_ByteStringC& szPropName, | 442 FX_BOOL CFXJSE_Value::HasObjectOwnProperty(const CFX_ByteStringC& szPropName, |
| 443 FX_BOOL bUseTypeGetter) { | 443 FX_BOOL bUseTypeGetter) { |
| 444 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 444 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 445 v8::Local<v8::Value> hObject = | 445 v8::Local<v8::Value> hObject = |
| 446 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 446 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| 447 if (!hObject->IsObject()) | 447 if (!hObject->IsObject()) |
| 448 return FALSE; | 448 return FALSE; |
| 449 | 449 |
| 450 v8::Local<v8::String> hKey = v8::String::NewFromUtf8( | 450 v8::Local<v8::String> hKey = v8::String::NewFromUtf8( |
| 451 m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, | 451 m_pIsolate, szPropName.c_str(), v8::String::kNormalString, |
| 452 szPropName.GetLength()); | 452 szPropName.GetLength()); |
| 453 return hObject.As<v8::Object>()->HasRealNamedProperty(hKey) || | 453 return hObject.As<v8::Object>()->HasRealNamedProperty(hKey) || |
| 454 (bUseTypeGetter && | 454 (bUseTypeGetter && |
| 455 hObject.As<v8::Object>() | 455 hObject.As<v8::Object>() |
| 456 ->HasOwnProperty(m_pIsolate->GetCurrentContext(), hKey) | 456 ->HasOwnProperty(m_pIsolate->GetCurrentContext(), hKey) |
| 457 .FromMaybe(false)); | 457 .FromMaybe(false)); |
| 458 } | 458 } |
| 459 | 459 |
| 460 FX_BOOL CFXJSE_Value::SetObjectOwnProperty(const CFX_ByteStringC& szPropName, | 460 FX_BOOL CFXJSE_Value::SetObjectOwnProperty(const CFX_ByteStringC& szPropName, |
| 461 CFXJSE_Value* lpPropValue) { | 461 CFXJSE_Value* lpPropValue) { |
| 462 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 462 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 463 v8::Local<v8::Value> hObject = | 463 v8::Local<v8::Value> hObject = |
| 464 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); | 464 v8::Local<v8::Value>::New(m_pIsolate, m_hValue); |
| 465 if (!hObject->IsObject()) | 465 if (!hObject->IsObject()) |
| 466 return FALSE; | 466 return FALSE; |
| 467 | 467 |
| 468 v8::Local<v8::Value> hValue = | 468 v8::Local<v8::Value> hValue = |
| 469 v8::Local<v8::Value>::New(m_pIsolate, lpPropValue->m_hValue); | 469 v8::Local<v8::Value>::New(m_pIsolate, lpPropValue->m_hValue); |
| 470 return hObject.As<v8::Object>() | 470 return hObject.As<v8::Object>() |
| 471 ->DefineOwnProperty( | 471 ->DefineOwnProperty( |
| 472 m_pIsolate->GetCurrentContext(), | 472 m_pIsolate->GetCurrentContext(), |
| 473 v8::String::NewFromUtf8(m_pIsolate, szPropName.GetCStr(), | 473 v8::String::NewFromUtf8(m_pIsolate, szPropName.c_str(), |
| 474 v8::String::kNormalString, | 474 v8::String::kNormalString, |
| 475 szPropName.GetLength()), | 475 szPropName.GetLength()), |
| 476 hValue) | 476 hValue) |
| 477 .FromMaybe(false); | 477 .FromMaybe(false); |
| 478 } | 478 } |
| 479 | 479 |
| 480 FX_BOOL CFXJSE_Value::SetFunctionBind(CFXJSE_Value* lpOldFunction, | 480 FX_BOOL CFXJSE_Value::SetFunctionBind(CFXJSE_Value* lpOldFunction, |
| 481 CFXJSE_Value* lpNewThis) { | 481 CFXJSE_Value* lpNewThis) { |
| 482 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 482 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
| 483 v8::Local<v8::Value> rgArgs[2]; | 483 v8::Local<v8::Value> rgArgs[2]; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 if (lpRetValue) | 573 if (lpRetValue) |
| 574 lpRetValue->ForceSetValue(hReturnValue); | 574 lpRetValue->ForceSetValue(hReturnValue); |
| 575 | 575 |
| 576 if (lpLocalArgs) { | 576 if (lpLocalArgs) { |
| 577 for (uint32_t i = 0; i < nArgCount; i++) | 577 for (uint32_t i = 0; i < nArgCount; i++) |
| 578 lpLocalArgs[i].~Local(); | 578 lpLocalArgs[i].~Local(); |
| 579 FX_Free(lpLocalArgs); | 579 FX_Free(lpLocalArgs); |
| 580 } | 580 } |
| 581 return bRetValue; | 581 return bRetValue; |
| 582 } | 582 } |
| OLD | NEW |