| 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 "../../../core/include/fxcrt/fx_basic.h" | 7 #include "../../../core/include/fxcrt/fx_basic.h" |
| 8 #include "../../../core/include/fxcrt/fx_ext.h" | 8 #include "../../../core/include/fxcrt/fx_ext.h" |
| 9 #include "../../include/jsapi/fxjs_v8.h" | 9 #include "../../include/jsapi/fxjs_v8.h" |
| 10 #include "../../include/fsdk_define.h" | 10 #include "../../include/fsdk_define.h" |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 | 258 |
| 259 | 259 |
| 260 if(pObjDef->objType == JS_DYNAMIC) | 260 if(pObjDef->objType == JS_DYNAMIC) |
| 261 { | 261 { |
| 262 //Document is set as global object, need to construct it
first. | 262 //Document is set as global object, need to construct it
first. |
| 263 if(ws.Equal(L"Document")) | 263 if(ws.Equal(L"Document")) |
| 264 { | 264 { |
| 265 | 265 |
| 266 CJS_PrivateData* pPrivateData = new CJS_PrivateD
ata; | 266 CJS_PrivateData* pPrivateData = new CJS_PrivateD
ata; |
| 267 pPrivateData->ObjDefID = i; | 267 pPrivateData->ObjDefID = i; |
| 268 v8::Handle<v8::External> ptr = v8::External::New
(isolate, pPrivateData); | |
| 269 | 268 |
| 270 » » » » v8Context->Global()->GetPrototype()->ToObject()-
>SetInternalField(0, ptr); | 269 » » » » v8Context->Global()->GetPrototype()->ToObject()-
>SetAlignedPointerInInternalField(0, pPrivateData); |
| 271 | 270 |
| 272 if(pObjDef->m_pConstructor) | 271 if(pObjDef->m_pConstructor) |
| 273 pObjDef->m_pConstructor(context, v8Conte
xt->Global()->GetPrototype()->ToObject(), v8Context->Global()->GetPrototype()->T
oObject()); | 272 pObjDef->m_pConstructor(context, v8Conte
xt->Global()->GetPrototype()->ToObject(), v8Context->Global()->GetPrototype()->T
oObject()); |
| 274 } | 273 } |
| 275 } | 274 } |
| 276 else | 275 else |
| 277 { | 276 { |
| 278 v8::Handle<v8::Object> obj = JS_NewFxDynamicObj(pJSRunti
me, context, i); | 277 v8::Handle<v8::Object> obj = JS_NewFxDynamicObj(pJSRunti
me, context, i); |
| 279 v8Context->Global()->Set(objName, obj); | 278 v8Context->Global()->Set(objName, obj); |
| 280 pObjDef->m_StaticObj.Reset(isolate, obj); | 279 pObjDef->m_StaticObj.Reset(isolate, obj); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Handle<v8:
:Object>(); | 374 if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Handle<v8:
:Object>(); |
| 376 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID)
; | 375 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID)
; |
| 377 | 376 |
| 378 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 377 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 379 v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::N
ew(isolate, pObjDef->m_objTemplate); | 378 v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::N
ew(isolate, pObjDef->m_objTemplate); |
| 380 v8::Local<v8::Object> obj = objTemp->NewInstance(); | 379 v8::Local<v8::Object> obj = objTemp->NewInstance(); |
| 381 | 380 |
| 382 CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 381 CJS_PrivateData* pPrivateData = new CJS_PrivateData; |
| 383 pPrivateData->ObjDefID = nObjDefnID; | 382 pPrivateData->ObjDefID = nObjDefnID; |
| 384 | 383 |
| 385 » v8::Handle<v8::External> ptr = v8::External::New(isolate, pPrivateData); | 384 » obj->SetAlignedPointerInInternalField(0, pPrivateData); |
| 386 » obj->SetInternalField(0, ptr); | |
| 387 if(pObjDef->m_pConstructor) | 385 if(pObjDef->m_pConstructor) |
| 388 pObjDef->m_pConstructor(pJSContext, obj, context->Global()->GetP
rototype()->ToObject()); | 386 pObjDef->m_pConstructor(pJSContext, obj, context->Global()->GetP
rototype()->ToObject()); |
| 389 | 387 |
| 390 return obj; | 388 return obj; |
| 391 } | 389 } |
| 392 | 390 |
| 393 v8::Handle<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) | 391 v8::Handle<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) |
| 394 { | 392 { |
| 395 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 393 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; |
| 396 v8::Isolate::Scope isolate_scope(isolate); | 394 v8::Isolate::Scope isolate_scope(isolate); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 417 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(0); | 415 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(0); |
| 418 if(!pArray) return v8::Handle<v8::Object>(); | 416 if(!pArray) return v8::Handle<v8::Object>(); |
| 419 | 417 |
| 420 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 418 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 421 return context->Global()->GetPrototype()->ToObject(); | 419 return context->Global()->GetPrototype()->ToObject(); |
| 422 } | 420 } |
| 423 | 421 |
| 424 int JS_GetObjDefnID(v8::Handle<v8::Object> pObj) | 422 int JS_GetObjDefnID(v8::Handle<v8::Object> pObj) |
| 425 { | 423 { |
| 426 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return -1; | 424 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return -1; |
| 427 » v8::Handle<v8::External> field = v8::Handle<v8::External>::Cast(pObj->Ge
tInternalField(0)); | 425 » CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointe
rFromInternalField(0); |
| 428 » CJS_PrivateData* pPrivateData = (CJS_PrivateData*)field->Value(); | |
| 429 if(pPrivateData) | 426 if(pPrivateData) |
| 430 return pPrivateData->ObjDefID; | 427 return pPrivateData->ObjDefID; |
| 431 return -1; | 428 return -1; |
| 432 } | 429 } |
| 433 | 430 |
| 434 IJS_Runtime* JS_GetRuntime(v8::Handle<v8::Object> pObj) | 431 IJS_Runtime* JS_GetRuntime(v8::Handle<v8::Object> pObj) |
| 435 { | 432 { |
| 436 if(pObj.IsEmpty()) return NULL; | 433 if(pObj.IsEmpty()) return NULL; |
| 437 v8::Local<v8::Context> context = pObj->CreationContext(); | 434 v8::Local<v8::Context> context = pObj->CreationContext(); |
| 438 if(context.IsEmpty()) return NULL; | 435 if(context.IsEmpty()) return NULL; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 } | 498 } |
| 502 | 499 |
| 503 void* JS_GetPrivate(v8::Handle<v8::Object> pObj) | 500 void* JS_GetPrivate(v8::Handle<v8::Object> pObj) |
| 504 { | 501 { |
| 505 return JS_GetPrivate(NULL,pObj); | 502 return JS_GetPrivate(NULL,pObj); |
| 506 } | 503 } |
| 507 | 504 |
| 508 void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj, void* p
) | 505 void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj, void* p
) |
| 509 { | 506 { |
| 510 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; | 507 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; |
| 511 » v8::Handle<v8::External> ptr = v8::Handle<v8::External>::Cast(pObj->GetI
nternalField(0)); | 508 » CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPoint
erFromInternalField(0); |
| 512 » CJS_PrivateData* pPrivateData = (CJS_PrivateData*)ptr->Value(); | |
| 513 if(!pPrivateData) return; | 509 if(!pPrivateData) return; |
| 514 pPrivateData->pPrivate = p; | 510 pPrivateData->pPrivate = p; |
| 515 } | 511 } |
| 516 | 512 |
| 517 void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj) | 513 void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj) |
| 518 { | 514 { |
| 519 if(pObj.IsEmpty()) return NULL; | 515 if(pObj.IsEmpty()) return NULL; |
| 520 » v8::Local<v8::Value> value; | 516 » CJS_PrivateData* pPrivateData = NULL; |
| 521 if(pObj->InternalFieldCount()) | 517 if(pObj->InternalFieldCount()) |
| 522 » » value = pObj->GetInternalField(0); | 518 pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInte
rnalField(0); |
| 523 else | 519 else |
| 524 { | 520 { |
| 525 //It could be a global proxy object. | 521 //It could be a global proxy object. |
| 526 v8::Local<v8::Value> v = pObj->GetPrototype(); | 522 v8::Local<v8::Value> v = pObj->GetPrototype(); |
| 527 if(v->IsObject()) | 523 if(v->IsObject()) |
| 528 » » » value = v->ToObject()->GetInternalField(0); | 524 pPrivateData = (CJS_PrivateData*)v->ToObject()->GetAlign
edPointerFromInternalField(0); |
| 529 } | 525 } |
| 530 if(value.IsEmpty() || value->IsUndefined()) return NULL; | |
| 531 v8::Handle<v8::External> ptr = v8::Handle<v8::External>::Cast(value); | |
| 532 CJS_PrivateData* pPrivateData = (CJS_PrivateData*)ptr->Value(); | |
| 533 if(!pPrivateData) return NULL; | 526 if(!pPrivateData) return NULL; |
| 534 return pPrivateData->pPrivate; | 527 return pPrivateData->pPrivate; |
| 535 } | 528 } |
| 536 | 529 |
| 537 void JS_FreePrivate(v8::Handle<v8::Object> pObj) | 530 void JS_FreePrivate(v8::Handle<v8::Object> pObj) |
| 538 { | 531 { |
| 539 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; | 532 if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; |
| 540 » v8::Handle<v8::External> ptr = v8::Handle<v8::External>::Cast(pObj->GetI
nternalField(0)); | 533 » delete (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); |
| 541 » delete (CJS_PrivateData*)ptr->Value(); | 534 » pObj->SetAlignedPointerInInternalField(0, NULL); |
| 542 » v8::Local<v8::Context> context = pObj->CreationContext(); | |
| 543 | |
| 544 » pObj->SetInternalField(0, v8::External::New(context->GetIsolate(), NULL)
); | |
| 545 } | 535 } |
| 546 | 536 |
| 547 | 537 |
| 548 v8::Handle<v8::Value> JS_GetObjectValue(v8::Handle<v8::Object> pObj) | 538 v8::Handle<v8::Value> JS_GetObjectValue(v8::Handle<v8::Object> pObj) |
| 549 { | 539 { |
| 550 return pObj; | 540 return pObj; |
| 551 } | 541 } |
| 552 | 542 |
| 553 v8::Handle<v8::String> WSToJSString(IJS_Runtime* pJSRuntime, const wchar_t* Prop
ertyName, int Len = -1) | 543 v8::Handle<v8::String> WSToJSString(IJS_Runtime* pJSRuntime, const wchar_t* Prop
ertyName, int Len = -1) |
| 554 { | 544 { |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 { | 1030 { |
| 1041 return d != d; | 1031 return d != d; |
| 1042 } | 1032 } |
| 1043 | 1033 |
| 1044 double JS_LocalTime(double d) | 1034 double JS_LocalTime(double d) |
| 1045 { | 1035 { |
| 1046 return JS_GetDateTime() + _getDaylightSavingTA(d); | 1036 return JS_GetDateTime() + _getDaylightSavingTA(d); |
| 1047 } | 1037 } |
| 1048 | 1038 |
| 1049 //JavaScript time implement End. | 1039 //JavaScript time implement End. |
| OLD | NEW |