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

Side by Side Diff: fxjs/fxjs_v8.cpp

Issue 2241483004: Move some v8 objects from CJS back into FXJS (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Chromium style rules Created 4 years, 4 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
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 "fxjs/include/fxjs_v8.h" 7 #include "fxjs/include/fxjs_v8.h"
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 pIsolate->GetData(g_embedderDataSlot)); 215 pIsolate->GetData(g_embedderDataSlot));
216 } 216 }
217 217
218 #ifndef PDF_ENABLE_XFA 218 #ifndef PDF_ENABLE_XFA
219 FXJS_PerIsolateData::FXJS_PerIsolateData() : m_pDynamicObjsMap(nullptr) {} 219 FXJS_PerIsolateData::FXJS_PerIsolateData() : m_pDynamicObjsMap(nullptr) {}
220 #else // PDF_ENABLE_XFA 220 #else // PDF_ENABLE_XFA
221 FXJS_PerIsolateData::FXJS_PerIsolateData() 221 FXJS_PerIsolateData::FXJS_PerIsolateData()
222 : m_pFXJSERuntimeData(nullptr), m_pDynamicObjsMap(nullptr) {} 222 : m_pFXJSERuntimeData(nullptr), m_pDynamicObjsMap(nullptr) {}
223 #endif // PDF_ENABLE_XFA 223 #endif // PDF_ENABLE_XFA
224 224
225 CFXJS_Engine::CFXJS_Engine() : m_isolate(nullptr), m_isolateManaged(false) {}
226 CFXJS_Engine::~CFXJS_Engine() {}
227
225 int FXJS_DefineObj(v8::Isolate* pIsolate, 228 int FXJS_DefineObj(v8::Isolate* pIsolate,
226 const wchar_t* sObjName, 229 const wchar_t* sObjName,
227 FXJSOBJTYPE eObjType, 230 FXJSOBJTYPE eObjType,
228 FXJS_CONSTRUCTOR pConstructor, 231 FXJS_CONSTRUCTOR pConstructor,
229 FXJS_DESTRUCTOR pDestructor) { 232 FXJS_DESTRUCTOR pDestructor) {
230 v8::Isolate::Scope isolate_scope(pIsolate); 233 v8::Isolate::Scope isolate_scope(pIsolate);
231 v8::HandleScope handle_scope(pIsolate); 234 v8::HandleScope handle_scope(pIsolate);
232 235
233 FXJS_PerIsolateData::SetUp(pIsolate); 236 FXJS_PerIsolateData::SetUp(pIsolate);
234 CFXJS_ObjDefinition* pObjDef = new CFXJS_ObjDefinition( 237 CFXJS_ObjDefinition* pObjDef = new CFXJS_ObjDefinition(
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 v8::Local<v8::FunctionTemplate> fun = 326 v8::Local<v8::FunctionTemplate> fun =
324 v8::FunctionTemplate::New(pIsolate, pConstGetter); 327 v8::FunctionTemplate::New(pIsolate, pConstGetter);
325 fun->RemovePrototype(); 328 fun->RemovePrototype();
326 GetGlobalObjectTemplate(pIsolate)->SetAccessorProperty( 329 GetGlobalObjectTemplate(pIsolate)->SetAccessorProperty(
327 v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), 330 v8::String::NewFromUtf8(pIsolate, bsConst.c_str(),
328 v8::NewStringType::kNormal) 331 v8::NewStringType::kNormal)
329 .ToLocalChecked(), 332 .ToLocalChecked(),
330 fun); 333 fun);
331 } 334 }
332 335
333 void FXJS_InitializeRuntime( 336 void FXJS_InitializeEngine(
334 v8::Isolate* pIsolate, 337 v8::Isolate* pIsolate,
335 IJS_Runtime* pIRuntime, 338 CFXJS_Engine* pEngine,
336 v8::Global<v8::Context>* pV8PersistentContext, 339 v8::Global<v8::Context>* pV8PersistentContext,
337 std::vector<v8::Global<v8::Object>*>* pStaticObjects) { 340 std::vector<v8::Global<v8::Object>*>* pStaticObjects) {
338 if (pIsolate == g_isolate) 341 if (pIsolate == g_isolate)
339 ++g_isolate_ref_count; 342 ++g_isolate_ref_count;
340 343
341 v8::Isolate::Scope isolate_scope(pIsolate); 344 v8::Isolate::Scope isolate_scope(pIsolate);
342 v8::HandleScope handle_scope(pIsolate); 345 v8::HandleScope handle_scope(pIsolate);
343 346
344 // This has to happen before we call GetGlobalObjectTemplate because that 347 // This has to happen before we call GetGlobalObjectTemplate because that
345 // method gets the PerIsolateData from pIsolate. 348 // method gets the PerIsolateData from pIsolate.
346 FXJS_PerIsolateData::SetUp(pIsolate); 349 FXJS_PerIsolateData::SetUp(pIsolate);
347 350
348 v8::Local<v8::Context> v8Context = 351 v8::Local<v8::Context> v8Context =
349 v8::Context::New(pIsolate, nullptr, GetGlobalObjectTemplate(pIsolate)); 352 v8::Context::New(pIsolate, nullptr, GetGlobalObjectTemplate(pIsolate));
350 v8::Context::Scope context_scope(v8Context); 353 v8::Context::Scope context_scope(v8Context);
351 354
352 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate); 355 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
353 if (!pData) 356 if (!pData)
354 return; 357 return;
355 pData->CreateDynamicObjsMap(pIsolate); 358 pData->CreateDynamicObjsMap(pIsolate);
356 v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pIRuntime); 359 v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pEngine);
357 360
358 int maxID = CFXJS_ObjDefinition::MaxID(pIsolate); 361 int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
359 pStaticObjects->resize(maxID + 1); 362 pStaticObjects->resize(maxID + 1);
360 for (int i = 0; i < maxID; ++i) { 363 for (int i = 0; i < maxID; ++i) {
361 CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i); 364 CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
362 if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) { 365 if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
363 v8Context->Global() 366 v8Context->Global()
364 ->GetPrototype() 367 ->GetPrototype()
365 ->ToObject(v8Context) 368 ->ToObject(v8Context)
366 .ToLocalChecked() 369 .ToLocalChecked()
367 ->SetAlignedPointerInInternalField(0, new CFXJS_PerObjectData(i)); 370 ->SetAlignedPointerInInternalField(0, new CFXJS_PerObjectData(i));
368 371
369 if (pObjDef->m_pConstructor) 372 if (pObjDef->m_pConstructor)
370 pObjDef->m_pConstructor(pIRuntime, v8Context->Global() 373 pObjDef->m_pConstructor(pEngine, v8Context->Global()
371 ->GetPrototype() 374 ->GetPrototype()
372 ->ToObject(v8Context) 375 ->ToObject(v8Context)
373 .ToLocalChecked()); 376 .ToLocalChecked());
374 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) { 377 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
375 CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode(); 378 CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode();
376 v8::Local<v8::String> m_ObjName = 379 v8::Local<v8::String> m_ObjName =
377 v8::String::NewFromUtf8(pIsolate, bs.c_str(), 380 v8::String::NewFromUtf8(pIsolate, bs.c_str(),
378 v8::NewStringType::kNormal, bs.GetLength()) 381 v8::NewStringType::kNormal, bs.GetLength())
379 .ToLocalChecked(); 382 .ToLocalChecked();
380 383
381 v8::Local<v8::Object> obj = 384 v8::Local<v8::Object> obj =
382 FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i, true); 385 FXJS_NewFxDynamicObj(pIsolate, pEngine, i, true);
383 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust(); 386 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust();
384 pStaticObjects->at(i) = new v8::Global<v8::Object>(pIsolate, obj); 387 pStaticObjects->at(i) = new v8::Global<v8::Object>(pIsolate, obj);
385 } 388 }
386 } 389 }
387 pV8PersistentContext->Reset(pIsolate, v8Context); 390 pV8PersistentContext->Reset(pIsolate, v8Context);
388 } 391 }
389 392
390 void FXJS_ReleaseRuntime(v8::Isolate* pIsolate, 393 void FXJS_ReleaseEngine(v8::Isolate* pIsolate,
391 v8::Global<v8::Context>* pV8PersistentContext, 394 v8::Global<v8::Context>* pV8PersistentContext,
392 std::vector<v8::Global<v8::Object>*>* pStaticObjects) { 395 std::vector<v8::Global<v8::Object>*>* pStaticObjects) {
393 v8::Isolate::Scope isolate_scope(pIsolate); 396 v8::Isolate::Scope isolate_scope(pIsolate);
394 v8::HandleScope handle_scope(pIsolate); 397 v8::HandleScope handle_scope(pIsolate);
395 v8::Local<v8::Context> context = 398 v8::Local<v8::Context> context =
396 v8::Local<v8::Context>::New(pIsolate, *pV8PersistentContext); 399 v8::Local<v8::Context>::New(pIsolate, *pV8PersistentContext);
397 v8::Context::Scope context_scope(context); 400 v8::Context::Scope context_scope(context);
398 401
399 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate); 402 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
400 if (!pData) 403 if (!pData)
401 return; 404 return;
402 405
(...skipping 21 matching lines...) Expand all
424 return; 427 return;
425 428
426 pData->ReleaseDynamicObjsMap(); 429 pData->ReleaseDynamicObjsMap();
427 for (int i = 0; i < maxID; ++i) 430 for (int i = 0; i < maxID; ++i)
428 delete CFXJS_ObjDefinition::ForID(pIsolate, i); 431 delete CFXJS_ObjDefinition::ForID(pIsolate, i);
429 432
430 pIsolate->SetData(g_embedderDataSlot, nullptr); 433 pIsolate->SetData(g_embedderDataSlot, nullptr);
431 delete pData; 434 delete pData;
432 } 435 }
433 436
434 IJS_Runtime* FXJS_GetRuntimeFromIsolate(v8::Isolate* pIsolate) { 437 CFXJS_Engine* FXJS_GetEngineFromIsolate(v8::Isolate* pIsolate) {
435 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 438 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
436 return static_cast<IJS_Runtime*>( 439 return static_cast<CFXJS_Engine*>(
437 context->GetAlignedPointerFromEmbedderData(kPerContextDataIndex)); 440 context->GetAlignedPointerFromEmbedderData(kPerContextDataIndex));
438 } 441 }
439 442
440 #ifdef PDF_ENABLE_XFA 443 #ifdef PDF_ENABLE_XFA
441 void FXJS_SetRuntimeForV8Context(v8::Local<v8::Context> v8Context, 444 void FXJS_SetEngineForV8Context(v8::Local<v8::Context> v8Context,
442 IJS_Runtime* pIRuntime) { 445 CFXJS_Engine* pEngine) {
443 v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pIRuntime); 446 v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, pEngine);
444 } 447 }
445 #endif // PDF_ENABLE_XFA 448 #endif // PDF_ENABLE_XFA
446 449
447 int FXJS_Execute(v8::Isolate* pIsolate, 450 int FXJS_Execute(v8::Isolate* pIsolate,
448 const CFX_WideString& script, 451 const CFX_WideString& script,
449 FXJSErr* pError) { 452 FXJSErr* pError) {
450 v8::Isolate::Scope isolate_scope(pIsolate); 453 v8::Isolate::Scope isolate_scope(pIsolate);
451 v8::TryCatch try_catch(pIsolate); 454 v8::TryCatch try_catch(pIsolate);
452 CFX_ByteString bsScript = script.UTF8Encode(); 455 CFX_ByteString bsScript = script.UTF8Encode();
453 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 456 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
(...skipping 12 matching lines...) Expand all
466 v8::Local<v8::Value> result; 469 v8::Local<v8::Value> result;
467 if (!compiled_script->Run(context).ToLocal(&result)) { 470 if (!compiled_script->Run(context).ToLocal(&result)) {
468 v8::String::Utf8Value error(try_catch.Exception()); 471 v8::String::Utf8Value error(try_catch.Exception());
469 // TODO(tsepez): return error via pError->message. 472 // TODO(tsepez): return error via pError->message.
470 return -1; 473 return -1;
471 } 474 }
472 return 0; 475 return 0;
473 } 476 }
474 477
475 v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate, 478 v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate,
476 IJS_Runtime* pIRuntime, 479 CFXJS_Engine* pEngine,
477 int nObjDefnID, 480 int nObjDefnID,
478 bool bStatic) { 481 bool bStatic) {
479 v8::Isolate::Scope isolate_scope(pIsolate); 482 v8::Isolate::Scope isolate_scope(pIsolate);
480 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 483 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
481 if (nObjDefnID == -1) { 484 if (nObjDefnID == -1) {
482 v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(pIsolate); 485 v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(pIsolate);
483 v8::Local<v8::Object> obj; 486 v8::Local<v8::Object> obj;
484 if (!objTempl->NewInstance(context).ToLocal(&obj)) 487 if (!objTempl->NewInstance(context).ToLocal(&obj))
485 return v8::Local<v8::Object>(); 488 return v8::Local<v8::Object>();
486 return obj; 489 return obj;
487 } 490 }
488 491
489 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate); 492 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
490 if (!pData) 493 if (!pData)
491 return v8::Local<v8::Object>(); 494 return v8::Local<v8::Object>();
492 495
493 if (nObjDefnID < 0 || nObjDefnID >= CFXJS_ObjDefinition::MaxID(pIsolate)) 496 if (nObjDefnID < 0 || nObjDefnID >= CFXJS_ObjDefinition::MaxID(pIsolate))
494 return v8::Local<v8::Object>(); 497 return v8::Local<v8::Object>();
495 498
496 CFXJS_ObjDefinition* pObjDef = 499 CFXJS_ObjDefinition* pObjDef =
497 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); 500 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID);
498 v8::Local<v8::Object> obj; 501 v8::Local<v8::Object> obj;
499 if (!pObjDef->GetInstanceTemplate()->NewInstance(context).ToLocal(&obj)) 502 if (!pObjDef->GetInstanceTemplate()->NewInstance(context).ToLocal(&obj))
500 return v8::Local<v8::Object>(); 503 return v8::Local<v8::Object>();
501 504
502 CFXJS_PerObjectData* pPerObjData = new CFXJS_PerObjectData(nObjDefnID); 505 CFXJS_PerObjectData* pPerObjData = new CFXJS_PerObjectData(nObjDefnID);
503 obj->SetAlignedPointerInInternalField(0, pPerObjData); 506 obj->SetAlignedPointerInInternalField(0, pPerObjData);
504 if (pObjDef->m_pConstructor) 507 if (pObjDef->m_pConstructor)
505 pObjDef->m_pConstructor(pIRuntime, obj); 508 pObjDef->m_pConstructor(pEngine, obj);
506 509
507 if (!bStatic && FXJS_PerIsolateData::Get(pIsolate)->m_pDynamicObjsMap) { 510 if (!bStatic && FXJS_PerIsolateData::Get(pIsolate)->m_pDynamicObjsMap) {
508 FXJS_PerIsolateData::Get(pIsolate)->m_pDynamicObjsMap->set(pPerObjData, 511 FXJS_PerIsolateData::Get(pIsolate)->m_pDynamicObjsMap->set(pPerObjData,
509 obj); 512 obj);
510 } 513 }
511 return obj; 514 return obj;
512 } 515 }
513 516
514 v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate) { 517 v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate) {
515 v8::Isolate::Scope isolate_scope(pIsolate); 518 v8::Isolate::Scope isolate_scope(pIsolate);
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 return CFX_WideString::FromUTF8(CFX_ByteStringC(*s, s.length())); 814 return CFX_WideString::FromUTF8(CFX_ByteStringC(*s, s.length()));
812 } 815 }
813 816
814 v8::Local<v8::Array> FXJS_ToArray(v8::Isolate* pIsolate, 817 v8::Local<v8::Array> FXJS_ToArray(v8::Isolate* pIsolate,
815 v8::Local<v8::Value> pValue) { 818 v8::Local<v8::Value> pValue) {
816 if (pValue.IsEmpty()) 819 if (pValue.IsEmpty())
817 return v8::Local<v8::Array>(); 820 return v8::Local<v8::Array>();
818 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); 821 v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
819 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); 822 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
820 } 823 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698