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

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

Issue 1338073002: Refactor fxjs_v8 and add embeddertests for it. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Working, expose new API to condition the isolate Created 5 years, 3 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 "../../../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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 const wchar_t* objName; 68 const wchar_t* objName;
69 FXJSOBJTYPE objType; 69 FXJSOBJTYPE objType;
70 LP_CONSTRUCTOR m_pConstructor; 70 LP_CONSTRUCTOR m_pConstructor;
71 LP_DESTRUCTOR m_pDestructor; 71 LP_DESTRUCTOR m_pDestructor;
72 FX_BOOL m_bSetAsGlobalObject; 72 FX_BOOL m_bSetAsGlobalObject;
73 73
74 v8::Global<v8::ObjectTemplate> m_objTemplate; 74 v8::Global<v8::ObjectTemplate> m_objTemplate;
75 v8::Global<v8::Object> m_StaticObj; 75 v8::Global<v8::Object> m_StaticObj;
76 }; 76 };
77 77
78 void* JS_ArrayBufferAllocator::Allocate(size_t length) {
79 return calloc(1, length);
80 }
81
82 void* JS_ArrayBufferAllocator::AllocateUninitialized(size_t length) {
83 return malloc(length);
84 }
85
86 void JS_ArrayBufferAllocator::Free(void* data, size_t length) {
87 free(data);
88 }
89
90 void JS_PrepareIsolate(v8::Isolate* pIsolate) {
91 if (!pIsolate->GetData(g_embedderDataSlot))
92 pIsolate->SetData(g_embedderDataSlot, new CFX_PtrArray());
93 }
94
95 void JS_ResetIsolate(v8::Isolate* pIsolate) {
96 delete (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot);
97 pIsolate->SetData(g_embedderDataSlot, nullptr);
98 }
99
78 int JS_DefineObj(v8::Isolate* pIsolate, 100 int JS_DefineObj(v8::Isolate* pIsolate,
79 const wchar_t* sObjName, 101 const wchar_t* sObjName,
80 FXJSOBJTYPE eObjType, 102 FXJSOBJTYPE eObjType,
81 LP_CONSTRUCTOR pConstructor, 103 LP_CONSTRUCTOR pConstructor,
82 LP_DESTRUCTOR pDestructor) { 104 LP_DESTRUCTOR pDestructor) {
83 v8::Isolate::Scope isolate_scope(pIsolate); 105 v8::Isolate::Scope isolate_scope(pIsolate);
84 v8::HandleScope handle_scope(pIsolate); 106 v8::HandleScope handle_scope(pIsolate);
107
108 JS_PrepareIsolate(pIsolate);
85 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); 109 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot);
86 if (!pArray) {
87 pArray = new CFX_PtrArray();
88 pIsolate->SetData(g_embedderDataSlot, pArray);
89 }
90 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType, 110 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType,
91 pConstructor, pDestructor); 111 pConstructor, pDestructor);
92 pArray->Add(pObjDef); 112 pArray->Add(pObjDef);
93 return pArray->GetSize() - 1; 113 return pArray->GetSize() - 1;
94 } 114 }
95 115
96 void JS_DefineObjMethod(v8::Isolate* pIsolate, 116 void JS_DefineObjMethod(v8::Isolate* pIsolate,
97 int nObjDefnID, 117 int nObjDefnID,
98 const wchar_t* sMethodName, 118 const wchar_t* sMethodName,
99 v8::FunctionCallback pMethodCall) { 119 v8::FunctionCallback pMethodCall) {
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 if (!pObjDef->m_StaticObj.IsEmpty()) { 341 if (!pObjDef->m_StaticObj.IsEmpty()) {
322 v8::Local<v8::Object> pObj = 342 v8::Local<v8::Object> pObj =
323 v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj); 343 v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj);
324 if (pObjDef->m_pDestructor) 344 if (pObjDef->m_pDestructor)
325 pObjDef->m_pDestructor(pObj); 345 pObjDef->m_pDestructor(pObj);
326 JS_FreePrivate(pObj); 346 JS_FreePrivate(pObj);
327 } 347 }
328 delete pObjDef; 348 delete pObjDef;
329 } 349 }
330 delete pArray; 350 delete pArray;
331 pIsolate->SetData(g_embedderDataSlot, NULL); 351 pIsolate->SetData(g_embedderDataSlot, NULL);
Lei Zhang 2015/09/15 01:59:55 I guess this is where we would call JS_ResetIsolat
Tom Sepez 2015/09/15 15:56:42 Removed JS_ResetIsolate, added comment about this
332 } 352 }
333 353
334 void JS_Initial(unsigned int embedderDataSlot) { 354 void JS_Initial(unsigned int embedderDataSlot) {
335 g_embedderDataSlot = embedderDataSlot; 355 g_embedderDataSlot = embedderDataSlot;
336 } 356 }
337 357
338 void JS_Release() { 358 void JS_Release() {
339 } 359 }
340 360
341 int JS_Execute(v8::Isolate* pIsolate, 361 int JS_Execute(v8::Isolate* pIsolate,
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 1106
1087 bool JS_PortIsNan(double d) { 1107 bool JS_PortIsNan(double d) {
1088 return d != d; 1108 return d != d;
1089 } 1109 }
1090 1110
1091 double JS_LocalTime(double d) { 1111 double JS_LocalTime(double d) {
1092 return JS_GetDateTime() + _getDaylightSavingTA(d); 1112 return JS_GetDateTime() + _getDaylightSavingTA(d);
1093 } 1113 }
1094 1114
1095 // JavaScript time implement End. 1115 // JavaScript time implement End.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698