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

Side by Side Diff: fpdfsdk/src/javascript/JS_Runtime.cpp

Issue 1348433002: Merge to XFA: Refactor fxjs_v8 and add embeddertests for it. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: 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
« no previous file with comments | « fpdfsdk/include/jsapi/fxjs_v8.h ('k') | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('j') | 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/javascript/JavaScript.h" 7 #include "../../include/javascript/JavaScript.h"
8 #include "../../include/javascript/IJavaScript.h" 8 #include "../../include/javascript/IJavaScript.h"
9 #include "../../include/javascript/JS_EventHandler.h" 9 #include "../../include/javascript/JS_EventHandler.h"
10 #include "../../include/javascript/JS_Runtime.h" 10 #include "../../include/javascript/JS_Runtime.h"
(...skipping 14 matching lines...) Expand all
25 #include "../../include/javascript/util.h" 25 #include "../../include/javascript/util.h"
26 #include "../../include/javascript/JS_GlobalData.h" 26 #include "../../include/javascript/JS_GlobalData.h"
27 #include "../../include/javascript/global.h" 27 #include "../../include/javascript/global.h"
28 #include "../../include/javascript/console.h" 28 #include "../../include/javascript/console.h"
29 #include "../../include/fpdfxfa/fpdfxfa_app.h" 29 #include "../../include/fpdfxfa/fpdfxfa_app.h"
30 #include "../../../xfa/src/fxjse/src/value.h" 30 #include "../../../xfa/src/fxjse/src/value.h"
31 31
32 CJS_RuntimeFactory::~CJS_RuntimeFactory() {} 32 CJS_RuntimeFactory::~CJS_RuntimeFactory() {}
33 33
34 IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) { 34 IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) {
35 if (!m_bInit) { 35 m_bInit = true;
36 unsigned int embedderDataSlot = 0;
37 if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
38 embedderDataSlot =
39 pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
40 }
41 JS_Initial(embedderDataSlot);
42 m_bInit = TRUE;
43 }
44 return new CJS_Runtime(pApp); 36 return new CJS_Runtime(pApp);
45 } 37 }
46 void CJS_RuntimeFactory::AddRef() { 38 void CJS_RuntimeFactory::AddRef() {
47 // to do.Should be implemented as atom manipulation.
48 m_nRef++; 39 m_nRef++;
49 } 40 }
50 void CJS_RuntimeFactory::Release() { 41 void CJS_RuntimeFactory::Release() {
51 if (m_bInit) { 42 if (m_bInit) {
52 // to do.Should be implemented as atom manipulation.
53 if (--m_nRef == 0) { 43 if (--m_nRef == 0) {
54 JS_Release(); 44 JS_Release();
55 m_bInit = FALSE; 45 m_bInit = FALSE;
56 } 46 }
57 } 47 }
58 } 48 }
59 49
60 void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) { 50 void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) {
61 delete (CJS_Runtime*)pRuntime; 51 delete (CJS_Runtime*)pRuntime;
62 } 52 }
63 53
64 void* CJS_ArrayBufferAllocator::Allocate(size_t length) {
65 return calloc(1, length);
66 }
67
68 void* CJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) {
69 return malloc(length);
70 }
71
72 void CJS_ArrayBufferAllocator::Free(void* data, size_t length) {
73 free(data);
74 }
75
76 /* ------------------------------ CJS_Runtime ------------------------------ */ 54 /* ------------------------------ CJS_Runtime ------------------------------ */
77 v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate(v8::Isolate* pIsolate); 55 v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate(v8::Isolate* pIsolate);
78 56
79 CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) 57 CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp)
80 : m_pApp(pApp), 58 : m_pApp(pApp),
81 m_pDocument(NULL), 59 m_pDocument(NULL),
82 m_bBlocking(FALSE), 60 m_bBlocking(FALSE),
83 m_pFieldEventPath(NULL), 61 m_pFieldEventPath(NULL),
84 m_isolate(NULL), 62 m_isolate(NULL),
85 m_isolateManaged(false) { 63 m_isolateManaged(false) {
86 if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { 64 if (CPDFXFA_App::GetInstance()->GetJSERuntime()) {
87 // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate. 65 // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate.
88 m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime(); 66 m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime();
89 } else if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) { 67 } else if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
90 m_isolate = reinterpret_cast<v8::Isolate*>( 68 m_isolate = reinterpret_cast<v8::Isolate*>(
91 m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate); 69 m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate);
92 } 70 }
93 if (!m_isolate) { 71 if (!m_isolate) {
94 m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator()); 72 m_pArrayBufferAllocator.reset(new JS_ArrayBufferAllocator());
95 73
96 v8::Isolate::CreateParams params; 74 v8::Isolate::CreateParams params;
97 params.array_buffer_allocator = m_pArrayBufferAllocator.get(); 75 params.array_buffer_allocator = m_pArrayBufferAllocator.get();
98 m_isolate = v8::Isolate::New(params); 76 m_isolate = v8::Isolate::New(params);
99 m_isolateManaged = true; 77 m_isolateManaged = true;
100 } 78 }
101 79
102 v8::Isolate* isolate = m_isolate; 80 v8::Isolate* isolate = m_isolate;
103 v8::Isolate::Scope isolate_scope(isolate); 81 v8::Isolate::Scope isolate_scope(isolate);
104 v8::Locker locker(isolate); 82 v8::Locker locker(isolate);
105 v8::HandleScope handle_scope(isolate); 83 v8::HandleScope handle_scope(isolate);
106 if (CPDFXFA_App::GetInstance()->InitRuntime(FALSE)) { 84 if (CPDFXFA_App::GetInstance()->InitRuntime(FALSE)) {
107 CJS_Context* pContext = (CJS_Context*)NewContext(); 85 CJS_Context* pContext = (CJS_Context*)NewContext();
108 JS_InitialRuntime(GetIsolate(), this, pContext, m_context); 86 JS_InitializeRuntime(GetIsolate(), this, pContext, m_context);
109 ReleaseContext(pContext); 87 ReleaseContext(pContext);
110 return; 88 return;
111 } 89 }
112 90
91 unsigned int embedderDataSlot = 0;
92 if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2)
93 embedderDataSlot = pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
94 JS_Initialize(embedderDataSlot);
113 DefineJSObjects(); 95 DefineJSObjects();
114 96
115 CJS_Context* pContext = (CJS_Context*)NewContext(); 97 CJS_Context* pContext = (CJS_Context*)NewContext();
116 JS_InitialRuntime(GetIsolate(), this, pContext, m_context); 98 JS_InitializeRuntime(GetIsolate(), this, pContext, m_context);
117 ReleaseContext(pContext); 99 ReleaseContext(pContext);
118 } 100 }
119 101
120 CJS_Runtime::~CJS_Runtime() { 102 CJS_Runtime::~CJS_Runtime() {
121 int size = m_ContextArray.GetSize(); 103 int size = m_ContextArray.GetSize();
122 for (int i = 0; i < size; i++) 104 for (int i = 0; i < size; i++)
123 delete m_ContextArray.GetAt(i); 105 delete m_ContextArray.GetAt(i);
124 106
125 m_ContextArray.RemoveAll(); 107 m_ContextArray.RemoveAll();
126 108
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 // v8::Local<v8::Context>::New(GetIsolate(), m_context); 337 // v8::Local<v8::Context>::New(GetIsolate(), m_context);
356 v8::Local<v8::Value> propvalue = v8::Local<v8::Value>::New( 338 v8::Local<v8::Value> propvalue = v8::Local<v8::Value>::New(
357 GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue()); 339 GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue());
358 context->Global()->Set( 340 context->Global()->Set(
359 v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, 341 v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString,
360 utf8Name.GetLength()), 342 utf8Name.GetLength()),
361 propvalue); 343 propvalue);
362 344
363 return TRUE; 345 return TRUE;
364 } 346 }
OLDNEW
« no previous file with comments | « fpdfsdk/include/jsapi/fxjs_v8.h ('k') | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698