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

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

Issue 1424933012: Rename CFXJS_PrivateData to CFXJS_PerObjectData. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Static casts Created 5 years, 1 month 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 "../../include/jsapi/fxjs_v8.h" 7 #include "../../include/jsapi/fxjs_v8.h"
8 8
9 #include "../../../core/include/fxcrt/fx_basic.h" 9 #include "../../../core/include/fxcrt/fx_basic.h"
10 10
(...skipping 10 matching lines...) Expand all
21 // (without actually requiring a dependency on gin itself for the standalone 21 // (without actually requiring a dependency on gin itself for the standalone
22 // embedders of PDFIum). The value we want to use is: 22 // embedders of PDFIum). The value we want to use is:
23 // kPerContextDataStartIndex + kEmbedderPDFium, which is 3. 23 // kPerContextDataStartIndex + kEmbedderPDFium, which is 3.
24 static const unsigned int kPerContextDataIndex = 3u; 24 static const unsigned int kPerContextDataIndex = 3u;
25 static unsigned int g_embedderDataSlot = 1u; 25 static unsigned int g_embedderDataSlot = 1u;
26 static v8::Isolate* g_isolate = nullptr; 26 static v8::Isolate* g_isolate = nullptr;
27 static size_t g_isolate_ref_count = 0; 27 static size_t g_isolate_ref_count = 0;
28 static FXJS_ArrayBufferAllocator* g_arrayBufferAllocator = nullptr; 28 static FXJS_ArrayBufferAllocator* g_arrayBufferAllocator = nullptr;
29 static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr; 29 static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr;
30 30
31 class CFXJS_PrivateData { 31 class CFXJS_PerObjectData {
32 public: 32 public:
33 CFXJS_PrivateData(int nObjDefID) : ObjDefID(nObjDefID), pPrivate(NULL) {} 33 CFXJS_PerObjectData(int nObjDefID)
34 : m_ObjDefID(nObjDefID), m_pPrivate(nullptr) {}
34 35
35 int ObjDefID; 36 int m_ObjDefID;
36 void* pPrivate; 37 void* m_pPrivate;
37 }; 38 };
38 39
39 class CFXJS_ObjDefinition { 40 class CFXJS_ObjDefinition {
40 public: 41 public:
41 static int MaxID(v8::Isolate* pIsolate) { 42 static int MaxID(v8::Isolate* pIsolate) {
42 return static_cast<int>( 43 return static_cast<int>(
43 FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray.GetSize()); 44 FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray.GetSize());
44 } 45 }
45 static CFXJS_ObjDefinition* ForID(v8::Isolate* pIsolate, int id) { 46 static CFXJS_ObjDefinition* ForID(v8::Isolate* pIsolate, int id) {
46 // Note: GetAt() halts if out-of-range even in release builds. 47 // Note: GetAt() halts if out-of-range even in release builds.
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 v8::Local<v8::String> m_ObjName = 295 v8::Local<v8::String> m_ObjName =
295 v8::String::NewFromUtf8(pIsolate, bs.c_str(), 296 v8::String::NewFromUtf8(pIsolate, bs.c_str(),
296 v8::NewStringType::kNormal, 297 v8::NewStringType::kNormal,
297 bs.GetLength()).ToLocalChecked(); 298 bs.GetLength()).ToLocalChecked();
298 299
299 if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) { 300 if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
300 v8Context->Global() 301 v8Context->Global()
301 ->GetPrototype() 302 ->GetPrototype()
302 ->ToObject(v8Context) 303 ->ToObject(v8Context)
303 .ToLocalChecked() 304 .ToLocalChecked()
304 ->SetAlignedPointerInInternalField(0, new CFXJS_PrivateData(i)); 305 ->SetAlignedPointerInInternalField(0, new CFXJS_PerObjectData(i));
305 306
306 if (pObjDef->m_pConstructor) 307 if (pObjDef->m_pConstructor)
307 pObjDef->m_pConstructor(pIRuntime, v8Context->Global() 308 pObjDef->m_pConstructor(pIRuntime, v8Context->Global()
308 ->GetPrototype() 309 ->GetPrototype()
309 ->ToObject(v8Context) 310 ->ToObject(v8Context)
310 .ToLocalChecked()); 311 .ToLocalChecked());
311 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) { 312 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
312 v8::Local<v8::Object> obj = FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i); 313 v8::Local<v8::Object> obj = FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i);
313 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust(); 314 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust();
314 pObjDef->m_StaticObj.Reset(pIsolate, obj); 315 pObjDef->m_StaticObj.Reset(pIsolate, obj);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 409
409 if (nObjDefnID < 0 || nObjDefnID >= CFXJS_ObjDefinition::MaxID(pIsolate)) 410 if (nObjDefnID < 0 || nObjDefnID >= CFXJS_ObjDefinition::MaxID(pIsolate))
410 return v8::Local<v8::Object>(); 411 return v8::Local<v8::Object>();
411 412
412 CFXJS_ObjDefinition* pObjDef = 413 CFXJS_ObjDefinition* pObjDef =
413 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); 414 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
414 v8::Local<v8::Object> obj; 415 v8::Local<v8::Object> obj;
415 if (!pObjDef->GetInstanceTemplate()->NewInstance(context).ToLocal(&obj)) 416 if (!pObjDef->GetInstanceTemplate()->NewInstance(context).ToLocal(&obj))
416 return v8::Local<v8::Object>(); 417 return v8::Local<v8::Object>();
417 418
418 obj->SetAlignedPointerInInternalField(0, new CFXJS_PrivateData(nObjDefnID)); 419 obj->SetAlignedPointerInInternalField(0, new CFXJS_PerObjectData(nObjDefnID));
419 if (pObjDef->m_pConstructor) 420 if (pObjDef->m_pConstructor)
420 pObjDef->m_pConstructor(pIRuntime, obj); 421 pObjDef->m_pConstructor(pIRuntime, obj);
421 422
422 return obj; 423 return obj;
423 } 424 }
424 425
425 v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate) { 426 v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate) {
426 v8::Isolate::Scope isolate_scope(pIsolate); 427 v8::Isolate::Scope isolate_scope(pIsolate);
427 if (!FXJS_PerIsolateData::Get(pIsolate)) 428 if (!FXJS_PerIsolateData::Get(pIsolate))
428 return v8::Local<v8::Object>(); 429 return v8::Local<v8::Object>();
429 430
430 // Return the global object. 431 // Return the global object.
431 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 432 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
432 return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); 433 return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
433 } 434 }
434 435
435 int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj) { 436 int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj) {
436 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) 437 if (pObj.IsEmpty() || !pObj->InternalFieldCount())
437 return -1; 438 return -1;
438 CFXJS_PrivateData* pPrivateData = 439 CFXJS_PerObjectData* pPerObjectData = static_cast<CFXJS_PerObjectData*>(
439 (CFXJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); 440 pObj->GetAlignedPointerFromInternalField(0));
440 if (pPrivateData) 441 if (pPerObjectData)
441 return pPrivateData->ObjDefID; 442 return pPerObjectData->m_ObjDefID;
442 return -1; 443 return -1;
443 } 444 }
444 445
445 void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) { 446 void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) {
446 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t 447 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
447 // wide-strings isn't handled by v8, so use UTF8 as a common 448 // wide-strings isn't handled by v8, so use UTF8 as a common
448 // intermediate format. 449 // intermediate format.
449 CFX_ByteString utf8_message = message.UTF8Encode(); 450 CFX_ByteString utf8_message = message.UTF8Encode();
450 pIsolate->ThrowException( 451 pIsolate->ThrowException(
451 v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(), 452 v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(),
(...skipping 18 matching lines...) Expand all
470 if (pObj->IsUndefined()) 471 if (pObj->IsUndefined())
471 return kFXJSValueNameUndefined; 472 return kFXJSValueNameUndefined;
472 return NULL; 473 return NULL;
473 } 474 }
474 475
475 void FXJS_SetPrivate(v8::Isolate* pIsolate, 476 void FXJS_SetPrivate(v8::Isolate* pIsolate,
476 v8::Local<v8::Object> pObj, 477 v8::Local<v8::Object> pObj,
477 void* p) { 478 void* p) {
478 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) 479 if (pObj.IsEmpty() || !pObj->InternalFieldCount())
479 return; 480 return;
480 CFXJS_PrivateData* pPrivateData = 481 CFXJS_PerObjectData* pPerObjectData = static_cast<CFXJS_PerObjectData*>(
481 (CFXJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); 482 pObj->GetAlignedPointerFromInternalField(0));
482 if (!pPrivateData) 483 if (!pPerObjectData)
483 return; 484 return;
484 pPrivateData->pPrivate = p; 485 pPerObjectData->m_pPrivate = p;
485 } 486 }
486 487
487 void* FXJS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj) { 488 void* FXJS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj) {
488 if (pObj.IsEmpty()) 489 if (pObj.IsEmpty())
489 return nullptr; 490 return nullptr;
490 CFXJS_PrivateData* pPrivateData = nullptr; 491 CFXJS_PerObjectData* pPerObjectData = nullptr;
491 if (pObj->InternalFieldCount()) { 492 if (pObj->InternalFieldCount()) {
492 pPrivateData = 493 pPerObjectData = static_cast<CFXJS_PerObjectData*>(
493 (CFXJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); 494 pObj->GetAlignedPointerFromInternalField(0));
494 } else { 495 } else {
495 // It could be a global proxy object. 496 // It could be a global proxy object.
496 v8::Local<v8::Value> v = pObj->GetPrototype(); 497 v8::Local<v8::Value> v = pObj->GetPrototype();
497 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 498 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
498 if (v->IsObject()) { 499 if (v->IsObject()) {
499 pPrivateData = (CFXJS_PrivateData*)v->ToObject(context) 500 pPerObjectData = static_cast<CFXJS_PerObjectData*>(
500 .ToLocalChecked() 501 v->ToObject(context)
501 ->GetAlignedPointerFromInternalField(0); 502 .ToLocalChecked()
503 ->GetAlignedPointerFromInternalField(0));
502 } 504 }
503 } 505 }
504 return pPrivateData ? pPrivateData->pPrivate : nullptr; 506 return pPerObjectData ? pPerObjectData->m_pPrivate : nullptr;
505 } 507 }
506 508
507 void FXJS_FreePrivate(void* pPrivateData) { 509 void FXJS_FreePrivate(void* pPerObjectData) {
508 delete (CFXJS_PrivateData*)pPrivateData; 510 delete static_cast<CFXJS_PerObjectData*>(pPerObjectData);
509 } 511 }
510 512
511 void FXJS_FreePrivate(v8::Local<v8::Object> pObj) { 513 void FXJS_FreePrivate(v8::Local<v8::Object> pObj) {
512 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) 514 if (pObj.IsEmpty() || !pObj->InternalFieldCount())
513 return; 515 return;
514 FXJS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); 516 FXJS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0));
515 pObj->SetAlignedPointerInInternalField(0, NULL); 517 pObj->SetAlignedPointerInInternalField(0, NULL);
516 } 518 }
517 519
518 v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate, 520 v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate,
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 return v8::Local<v8::Array>(); 745 return v8::Local<v8::Array>();
744 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 746 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
745 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); 747 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
746 } 748 }
747 749
748 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { 750 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) {
749 pTo = pFrom; 751 pTo = pFrom;
750 } 752 }
751 753
752 754
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