Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(544)

Side by Side Diff: fpdfsdk/src/jsapi/fxjs_v8.cpp

Issue 1139853003: Set pointers in internal fields directly instead of wrapping them (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: updates Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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.
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698