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 |