OLD | NEW |
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 Loading... |
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 int JS_DefineObj(IJS_Runtime* pJSRuntime, | 78 int JS_DefineObj(v8::Isolate* pIsolate, |
79 const wchar_t* sObjName, | 79 const wchar_t* sObjName, |
80 FXJSOBJTYPE eObjType, | 80 FXJSOBJTYPE eObjType, |
81 LP_CONSTRUCTOR pConstructor, | 81 LP_CONSTRUCTOR pConstructor, |
82 LP_DESTRUCTOR pDestructor) { | 82 LP_DESTRUCTOR pDestructor) { |
83 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 83 v8::Isolate::Scope isolate_scope(pIsolate); |
84 v8::Isolate::Scope isolate_scope(isolate); | 84 v8::HandleScope handle_scope(pIsolate); |
85 v8::HandleScope handle_scope(isolate); | 85 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
86 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | |
87 if (!pArray) { | 86 if (!pArray) { |
88 pArray = new CFX_PtrArray(); | 87 pArray = new CFX_PtrArray(); |
89 isolate->SetData(g_embedderDataSlot, pArray); | 88 pIsolate->SetData(g_embedderDataSlot, pArray); |
90 } | 89 } |
91 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(isolate, sObjName, eObjType, | 90 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType, |
92 pConstructor, pDestructor); | 91 pConstructor, pDestructor); |
93 pArray->Add(pObjDef); | 92 pArray->Add(pObjDef); |
94 return pArray->GetSize() - 1; | 93 return pArray->GetSize() - 1; |
95 } | 94 } |
96 | 95 |
97 int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, | 96 int JS_DefineObjMethod(v8::Isolate* pIsolate, |
98 int nObjDefnID, | 97 int nObjDefnID, |
99 const wchar_t* sMethodName, | 98 const wchar_t* sMethodName, |
100 v8::FunctionCallback pMethodCall) { | 99 v8::FunctionCallback pMethodCall) { |
101 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 100 v8::Isolate::Scope isolate_scope(pIsolate); |
102 v8::Isolate::Scope isolate_scope(isolate); | 101 v8::HandleScope handle_scope(pIsolate); |
103 v8::HandleScope handle_scope(isolate); | |
104 | 102 |
105 CFX_WideString ws = CFX_WideString(sMethodName); | 103 CFX_WideString ws = CFX_WideString(sMethodName); |
106 CFX_ByteString bsMethodName = ws.UTF8Encode(); | 104 CFX_ByteString bsMethodName = ws.UTF8Encode(); |
107 | 105 |
108 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 106 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
109 if (!pArray) | 107 if (!pArray) |
110 return 0; | 108 return 0; |
111 | 109 |
112 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 110 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
113 return 0; | 111 return 0; |
114 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 112 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
115 v8::Local<v8::ObjectTemplate> objTemp = | 113 v8::Local<v8::ObjectTemplate> objTemp = |
116 v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 114 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
117 objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), | 115 objTemp->Set( |
118 v8::NewStringType::kNormal) | 116 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
119 .ToLocalChecked(), | 117 v8::NewStringType::kNormal).ToLocalChecked(), |
120 v8::FunctionTemplate::New(isolate, pMethodCall), v8::ReadOnly); | 118 v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly); |
121 pObjDef->m_objTemplate.Reset(isolate, objTemp); | 119 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
122 return 0; | 120 return 0; |
123 } | 121 } |
124 | 122 |
125 int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, | 123 int JS_DefineObjProperty(v8::Isolate* pIsolate, |
126 int nObjDefnID, | 124 int nObjDefnID, |
127 const wchar_t* sPropName, | 125 const wchar_t* sPropName, |
128 v8::AccessorGetterCallback pPropGet, | 126 v8::AccessorGetterCallback pPropGet, |
129 v8::AccessorSetterCallback pPropPut) { | 127 v8::AccessorSetterCallback pPropPut) { |
130 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 128 v8::Isolate::Scope isolate_scope(pIsolate); |
131 v8::Isolate::Scope isolate_scope(isolate); | 129 v8::HandleScope handle_scope(pIsolate); |
132 v8::HandleScope handle_scope(isolate); | |
133 | 130 |
134 CFX_WideString ws = CFX_WideString(sPropName); | 131 CFX_WideString ws = CFX_WideString(sPropName); |
135 CFX_ByteString bsPropertyName = ws.UTF8Encode(); | 132 CFX_ByteString bsPropertyName = ws.UTF8Encode(); |
136 | 133 |
137 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 134 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
138 if (!pArray) | 135 if (!pArray) |
139 return 0; | 136 return 0; |
140 | 137 |
141 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 138 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
142 return 0; | 139 return 0; |
143 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 140 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
144 v8::Local<v8::ObjectTemplate> objTemp = | 141 v8::Local<v8::ObjectTemplate> objTemp = |
145 v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 142 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
146 objTemp->SetAccessor(v8::String::NewFromUtf8(isolate, bsPropertyName.c_str(), | 143 objTemp->SetAccessor( |
147 v8::NewStringType::kNormal) | 144 v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(), |
148 .ToLocalChecked(), | 145 v8::NewStringType::kNormal).ToLocalChecked(), |
149 pPropGet, pPropPut); | 146 pPropGet, pPropPut); |
150 pObjDef->m_objTemplate.Reset(isolate, objTemp); | 147 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
151 return 0; | 148 return 0; |
152 } | 149 } |
153 | 150 |
154 int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, | 151 int JS_DefineObjAllProperties(v8::Isolate* pIsolate, |
155 int nObjDefnID, | 152 int nObjDefnID, |
156 v8::NamedPropertyQueryCallback pPropQurey, | 153 v8::NamedPropertyQueryCallback pPropQurey, |
157 v8::NamedPropertyGetterCallback pPropGet, | 154 v8::NamedPropertyGetterCallback pPropGet, |
158 v8::NamedPropertySetterCallback pPropPut, | 155 v8::NamedPropertySetterCallback pPropPut, |
159 v8::NamedPropertyDeleterCallback pPropDel) { | 156 v8::NamedPropertyDeleterCallback pPropDel) { |
160 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 157 v8::Isolate::Scope isolate_scope(pIsolate); |
161 v8::Isolate::Scope isolate_scope(isolate); | 158 v8::HandleScope handle_scope(pIsolate); |
162 v8::HandleScope handle_scope(isolate); | |
163 | 159 |
164 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 160 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
165 if (!pArray) | 161 if (!pArray) |
166 return 0; | 162 return 0; |
167 | 163 |
168 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 164 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
169 return 0; | 165 return 0; |
170 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 166 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
171 v8::Local<v8::ObjectTemplate> objTemp = | 167 v8::Local<v8::ObjectTemplate> objTemp = |
172 v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 168 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
173 objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); | 169 objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); |
174 pObjDef->m_objTemplate.Reset(isolate, objTemp); | 170 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
175 return 0; | 171 return 0; |
176 } | 172 } |
177 | 173 |
178 int JS_DefineObjConst(IJS_Runtime* pJSRuntime, | 174 int JS_DefineObjConst(v8::Isolate* pIsolate, |
179 int nObjDefnID, | 175 int nObjDefnID, |
180 const wchar_t* sConstName, | 176 const wchar_t* sConstName, |
181 v8::Local<v8::Value> pDefault) { | 177 v8::Local<v8::Value> pDefault) { |
182 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 178 v8::Isolate::Scope isolate_scope(pIsolate); |
183 v8::Isolate::Scope isolate_scope(isolate); | 179 v8::HandleScope handle_scope(pIsolate); |
184 v8::HandleScope handle_scope(isolate); | |
185 | 180 |
186 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 181 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
187 if (!pArray) | 182 if (!pArray) |
188 return 0; | 183 return 0; |
189 | 184 |
190 CFX_WideString ws = CFX_WideString(sConstName); | 185 CFX_WideString ws = CFX_WideString(sConstName); |
191 CFX_ByteString bsConstName = ws.UTF8Encode(); | 186 CFX_ByteString bsConstName = ws.UTF8Encode(); |
192 | 187 |
193 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 188 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
194 return 0; | 189 return 0; |
195 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 190 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
196 v8::Local<v8::ObjectTemplate> objTemp = | 191 v8::Local<v8::ObjectTemplate> objTemp = |
197 v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 192 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
198 objTemp->Set(isolate, bsConstName.c_str(), pDefault); | 193 objTemp->Set(pIsolate, bsConstName.c_str(), pDefault); |
199 pObjDef->m_objTemplate.Reset(isolate, objTemp); | 194 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
200 return 0; | 195 return 0; |
201 } | 196 } |
202 | 197 |
203 static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate( | 198 static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate( |
204 IJS_Runtime* pJSRuntime) { | 199 v8::Isolate* pIsolate) { |
205 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 200 v8::Isolate::Scope isolate_scope(pIsolate); |
206 v8::Isolate::Scope isolate_scope(isolate); | 201 v8::HandleScope handle_scope(pIsolate); |
207 v8::HandleScope handle_scope(isolate); | |
208 | 202 |
209 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 203 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
210 ASSERT(pArray != NULL); | 204 ASSERT(pArray != NULL); |
211 for (int i = 0; i < pArray->GetSize(); i++) { | 205 for (int i = 0; i < pArray->GetSize(); i++) { |
212 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 206 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); |
213 if (pObjDef->m_bSetAsGlobalObject) | 207 if (pObjDef->m_bSetAsGlobalObject) |
214 return pObjDef->m_objTemplate; | 208 return pObjDef->m_objTemplate; |
215 } | 209 } |
216 static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate; | 210 static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate; |
217 return gloabalObjectTemplate; | 211 return gloabalObjectTemplate; |
218 } | 212 } |
219 | 213 |
220 int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, | 214 int JS_DefineGlobalMethod(v8::Isolate* pIsolate, |
221 const wchar_t* sMethodName, | 215 const wchar_t* sMethodName, |
222 v8::FunctionCallback pMethodCall) { | 216 v8::FunctionCallback pMethodCall) { |
223 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 217 v8::Isolate::Scope isolate_scope(pIsolate); |
224 v8::Isolate::Scope isolate_scope(isolate); | 218 v8::HandleScope handle_scope(pIsolate); |
225 v8::HandleScope handle_scope(isolate); | |
226 | 219 |
227 CFX_WideString ws = CFX_WideString(sMethodName); | 220 CFX_WideString ws = CFX_WideString(sMethodName); |
228 CFX_ByteString bsMethodName = ws.UTF8Encode(); | 221 CFX_ByteString bsMethodName = ws.UTF8Encode(); |
229 | 222 |
230 v8::Local<v8::FunctionTemplate> funTempl = | 223 v8::Local<v8::FunctionTemplate> funTempl = |
231 v8::FunctionTemplate::New(isolate, pMethodCall); | 224 v8::FunctionTemplate::New(pIsolate, pMethodCall); |
232 v8::Local<v8::ObjectTemplate> objTemp; | 225 v8::Local<v8::ObjectTemplate> objTemp; |
233 | 226 |
234 v8::Global<v8::ObjectTemplate>& globalObjTemp = | 227 v8::Global<v8::ObjectTemplate>& globalObjTemp = |
235 _getGlobalObjectTemplate(pJSRuntime); | 228 _getGlobalObjectTemplate(pIsolate); |
236 if (globalObjTemp.IsEmpty()) | 229 if (globalObjTemp.IsEmpty()) |
237 objTemp = v8::ObjectTemplate::New(isolate); | 230 objTemp = v8::ObjectTemplate::New(pIsolate); |
238 else | 231 else |
239 objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp); | 232 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); |
240 objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), | 233 objTemp->Set( |
241 v8::NewStringType::kNormal) | 234 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
242 .ToLocalChecked(), | 235 v8::NewStringType::kNormal).ToLocalChecked(), |
243 funTempl, v8::ReadOnly); | 236 funTempl, v8::ReadOnly); |
244 | 237 |
245 globalObjTemp.Reset(isolate, objTemp); | 238 globalObjTemp.Reset(pIsolate, objTemp); |
246 | 239 |
247 return 0; | 240 return 0; |
248 } | 241 } |
249 | 242 |
250 int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, | 243 int JS_DefineGlobalConst(v8::Isolate* pIsolate, |
251 const wchar_t* sConstName, | 244 const wchar_t* sConstName, |
252 v8::Local<v8::Value> pDefault) { | 245 v8::Local<v8::Value> pDefault) { |
253 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 246 v8::Isolate::Scope isolate_scope(pIsolate); |
254 v8::Isolate::Scope isolate_scope(isolate); | 247 v8::HandleScope handle_scope(pIsolate); |
255 v8::HandleScope handle_scope(isolate); | |
256 | 248 |
257 CFX_WideString ws = CFX_WideString(sConstName); | 249 CFX_WideString ws = CFX_WideString(sConstName); |
258 CFX_ByteString bsConst = ws.UTF8Encode(); | 250 CFX_ByteString bsConst = ws.UTF8Encode(); |
259 | 251 |
260 v8::Local<v8::ObjectTemplate> objTemp; | 252 v8::Local<v8::ObjectTemplate> objTemp; |
261 | 253 |
262 v8::Global<v8::ObjectTemplate>& globalObjTemp = | 254 v8::Global<v8::ObjectTemplate>& globalObjTemp = |
263 _getGlobalObjectTemplate(pJSRuntime); | 255 _getGlobalObjectTemplate(pIsolate); |
264 if (globalObjTemp.IsEmpty()) | 256 if (globalObjTemp.IsEmpty()) |
265 objTemp = v8::ObjectTemplate::New(isolate); | 257 objTemp = v8::ObjectTemplate::New(pIsolate); |
266 else | 258 else |
267 objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp); | 259 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); |
268 objTemp->Set(v8::String::NewFromUtf8(isolate, bsConst.c_str(), | 260 objTemp->Set( |
269 v8::NewStringType::kNormal) | 261 v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), |
270 .ToLocalChecked(), | 262 v8::NewStringType::kNormal).ToLocalChecked(), |
271 pDefault, v8::ReadOnly); | 263 pDefault, v8::ReadOnly); |
272 | 264 |
273 globalObjTemp.Reset(isolate, objTemp); | 265 globalObjTemp.Reset(pIsolate, objTemp); |
274 | 266 |
275 return 0; | 267 return 0; |
276 } | 268 } |
277 | 269 |
278 void JS_InitialRuntime(IJS_Runtime* pJSRuntime, | 270 void JS_InitialRuntime(v8::Isolate* pIsolate, |
279 IFXJS_Runtime* pFXRuntime, | 271 IFXJS_Runtime* pFXRuntime, |
280 IFXJS_Context* context, | 272 IFXJS_Context* context, |
281 v8::Global<v8::Context>& v8PersistentContext) { | 273 v8::Global<v8::Context>& v8PersistentContext) { |
282 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 274 v8::Isolate::Scope isolate_scope(pIsolate); |
283 v8::Isolate::Scope isolate_scope(isolate); | 275 v8::Locker locker(pIsolate); |
284 v8::Locker locker(isolate); | 276 v8::HandleScope handle_scope(pIsolate); |
285 v8::HandleScope handle_scope(isolate); | |
286 | 277 |
287 v8::Global<v8::ObjectTemplate>& globalObjTemp = | 278 v8::Global<v8::ObjectTemplate>& globalObjTemp = |
288 _getGlobalObjectTemplate(pJSRuntime); | 279 _getGlobalObjectTemplate(pIsolate); |
289 v8::Local<v8::Context> v8Context = v8::Context::New( | 280 v8::Local<v8::Context> v8Context = v8::Context::New( |
290 isolate, NULL, | 281 pIsolate, NULL, |
291 v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp)); | 282 v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp)); |
292 v8::Context::Scope context_scope(v8Context); | 283 v8::Context::Scope context_scope(v8Context); |
293 | 284 |
294 // v8::Local<External> ptr = External::New(isolate, pFXRuntime); | 285 // v8::Local<External> ptr = External::New(isolate, pFXRuntime); |
295 // v8Context->SetEmbedderData(1, ptr); | 286 // v8Context->SetEmbedderData(1, ptr); |
296 // TODO(tsepez): Don't use more than one embedder data slot. | 287 // TODO(tsepez): Don't use more than one embedder data slot. |
297 isolate->SetData(2, pFXRuntime); | 288 pIsolate->SetData(2, pFXRuntime); |
298 | 289 |
299 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 290 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
300 if (!pArray) | 291 if (!pArray) |
301 return; | 292 return; |
302 | 293 |
303 for (int i = 0; i < pArray->GetSize(); i++) { | 294 for (int i = 0; i < pArray->GetSize(); i++) { |
304 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 295 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); |
305 CFX_WideString ws = CFX_WideString(pObjDef->objName); | 296 CFX_WideString ws = CFX_WideString(pObjDef->objName); |
306 CFX_ByteString bs = ws.UTF8Encode(); | 297 CFX_ByteString bs = ws.UTF8Encode(); |
307 v8::Local<v8::String> objName = | 298 v8::Local<v8::String> objName = |
308 v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal, | 299 v8::String::NewFromUtf8(pIsolate, bs.c_str(), |
309 bs.GetLength()) | 300 v8::NewStringType::kNormal, |
310 .ToLocalChecked(); | 301 bs.GetLength()).ToLocalChecked(); |
311 | 302 |
312 if (pObjDef->objType == JS_DYNAMIC) { | 303 if (pObjDef->objType == JS_DYNAMIC) { |
313 // Document is set as global object, need to construct it first. | 304 // Document is set as global object, need to construct it first. |
314 CFX_WideString wsString(L"Document"); | 305 CFX_WideString wsString(L"Document"); |
315 if (ws.Equal(wsString)) { | 306 if (ws.Equal(wsString)) { |
316 CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 307 CJS_PrivateData* pPrivateData = new CJS_PrivateData; |
317 pPrivateData->ObjDefID = i; | 308 pPrivateData->ObjDefID = i; |
318 | 309 |
319 v8Context->Global() | 310 v8Context->Global() |
320 ->GetPrototype() | 311 ->GetPrototype() |
321 ->ToObject(v8Context) | 312 ->ToObject(v8Context) |
322 .ToLocalChecked() | 313 .ToLocalChecked() |
323 ->SetAlignedPointerInInternalField(0, pPrivateData); | 314 ->SetAlignedPointerInInternalField(0, pPrivateData); |
324 | 315 |
325 if (pObjDef->m_pConstructor) | 316 if (pObjDef->m_pConstructor) |
326 pObjDef->m_pConstructor(context, v8Context->Global() | 317 pObjDef->m_pConstructor(context, v8Context->Global() |
327 ->GetPrototype() | 318 ->GetPrototype() |
328 ->ToObject(v8Context) | 319 ->ToObject(v8Context) |
329 .ToLocalChecked(), | 320 .ToLocalChecked(), |
330 v8Context->Global() | 321 v8Context->Global() |
331 ->GetPrototype() | 322 ->GetPrototype() |
332 ->ToObject(v8Context) | 323 ->ToObject(v8Context) |
333 .ToLocalChecked()); | 324 .ToLocalChecked()); |
334 } | 325 } |
335 } else { | 326 } else { |
336 v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pJSRuntime, context, i); | 327 v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pIsolate, context, i); |
337 v8Context->Global()->Set(v8Context, objName, obj).FromJust(); | 328 v8Context->Global()->Set(v8Context, objName, obj).FromJust(); |
338 pObjDef->m_StaticObj.Reset(isolate, obj); | 329 pObjDef->m_StaticObj.Reset(pIsolate, obj); |
339 } | 330 } |
340 } | 331 } |
341 v8PersistentContext.Reset(isolate, v8Context); | 332 v8PersistentContext.Reset(pIsolate, v8Context); |
342 } | 333 } |
343 | 334 |
344 void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, | 335 void JS_ReleaseRuntime(v8::Isolate* pIsolate, |
345 v8::Global<v8::Context>& v8PersistentContext) { | 336 v8::Global<v8::Context>& v8PersistentContext) { |
346 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 337 v8::Isolate::Scope isolate_scope(pIsolate); |
347 v8::Isolate::Scope isolate_scope(isolate); | 338 v8::Locker locker(pIsolate); |
348 v8::Locker locker(isolate); | 339 v8::HandleScope handle_scope(pIsolate); |
349 v8::HandleScope handle_scope(isolate); | 340 v8::Local<v8::Context> context = |
| 341 v8::Local<v8::Context>::New(pIsolate, v8PersistentContext); |
| 342 v8::Context::Scope context_scope(context); |
350 | 343 |
351 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 344 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
352 if (!pArray) | 345 if (!pArray) |
353 return; | 346 return; |
354 | 347 |
355 for (int i = 0; i < pArray->GetSize(); i++) { | 348 for (int i = 0; i < pArray->GetSize(); i++) { |
356 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 349 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); |
357 if (!pObjDef->m_StaticObj.IsEmpty()) { | 350 if (!pObjDef->m_StaticObj.IsEmpty()) { |
358 v8::Local<v8::Object> pObj = | 351 v8::Local<v8::Object> pObj = |
359 v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj); | 352 v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj); |
360 if (pObjDef->m_pDestructor) | 353 if (pObjDef->m_pDestructor) |
361 pObjDef->m_pDestructor(pObj); | 354 pObjDef->m_pDestructor(pObj); |
362 JS_FreePrivate(pObj); | 355 JS_FreePrivate(pObj); |
363 } | 356 } |
364 delete pObjDef; | 357 delete pObjDef; |
365 } | 358 } |
366 delete pArray; | 359 delete pArray; |
367 isolate->SetData(1, NULL); | 360 |
368 isolate->SetData(g_embedderDataSlot, NULL); | 361 pIsolate->SetData(1, NULL); |
| 362 pIsolate->SetData(g_embedderDataSlot, NULL); |
369 // TODO(tsepez): Don't use more than one embedder data slot. | 363 // TODO(tsepez): Don't use more than one embedder data slot. |
370 isolate->SetData(2, NULL); | 364 pIsolate->SetData(2, NULL); |
371 } | 365 } |
372 | 366 |
373 void JS_Initial(unsigned int embedderDataSlot) { | 367 void JS_Initial(unsigned int embedderDataSlot) { |
374 g_embedderDataSlot = embedderDataSlot; | 368 g_embedderDataSlot = embedderDataSlot; |
375 } | 369 } |
376 | 370 |
377 void JS_Release() { | 371 void JS_Release() { |
378 } | 372 } |
379 | 373 |
380 int JS_Execute(IJS_Runtime* pJSRuntime, | 374 int JS_Execute(v8::Isolate* pIsolate, |
381 IFXJS_Context* pJSContext, | 375 IFXJS_Context* pJSContext, |
382 const wchar_t* script, | 376 const wchar_t* script, |
383 long length, | 377 long length, |
384 FXJSErr* perror) { | 378 FXJSErr* perror) { |
385 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 379 v8::Isolate::Scope isolate_scope(pIsolate); |
386 v8::Isolate::Scope isolate_scope(isolate); | 380 v8::TryCatch try_catch(pIsolate); |
387 v8::TryCatch try_catch(isolate); | |
388 | 381 |
389 CFX_WideString wsScript(script); | 382 CFX_WideString wsScript(script); |
390 CFX_ByteString bsScript = wsScript.UTF8Encode(); | 383 CFX_ByteString bsScript = wsScript.UTF8Encode(); |
391 | 384 |
392 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 385 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
393 v8::Local<v8::Script> compiled_script; | 386 v8::Local<v8::Script> compiled_script; |
394 if (!v8::Script::Compile(context, | 387 if (!v8::Script::Compile( |
395 v8::String::NewFromUtf8(isolate, bsScript.c_str(), | 388 context, v8::String::NewFromUtf8( |
396 v8::NewStringType::kNormal, | 389 pIsolate, bsScript.c_str(), v8::NewStringType::kNormal, |
397 bsScript.GetLength()) | 390 bsScript.GetLength()).ToLocalChecked()) |
398 .ToLocalChecked()) | |
399 .ToLocal(&compiled_script)) { | 391 .ToLocal(&compiled_script)) { |
400 v8::String::Utf8Value error(try_catch.Exception()); | 392 v8::String::Utf8Value error(try_catch.Exception()); |
401 return -1; | 393 return -1; |
402 } | 394 } |
403 | 395 |
404 v8::Local<v8::Value> result; | 396 v8::Local<v8::Value> result; |
405 if (!compiled_script->Run(context).ToLocal(&result)) { | 397 if (!compiled_script->Run(context).ToLocal(&result)) { |
406 v8::String::Utf8Value error(try_catch.Exception()); | 398 v8::String::Utf8Value error(try_catch.Exception()); |
407 return -1; | 399 return -1; |
408 } | 400 } |
409 return 0; | 401 return 0; |
410 } | 402 } |
411 | 403 |
412 v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, | 404 v8::Local<v8::Object> JS_NewFxDynamicObj(v8::Isolate* pIsolate, |
413 IFXJS_Context* pJSContext, | 405 IFXJS_Context* pJSContext, |
414 int nObjDefnID) { | 406 int nObjDefnID) { |
415 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 407 v8::Isolate::Scope isolate_scope(pIsolate); |
416 v8::Isolate::Scope isolate_scope(isolate); | 408 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
417 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | |
418 if (-1 == nObjDefnID) { | 409 if (-1 == nObjDefnID) { |
419 v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(isolate); | 410 v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(pIsolate); |
420 v8::Local<v8::Object> obj; | 411 v8::Local<v8::Object> obj; |
421 if (objTempl->NewInstance(context).ToLocal(&obj)) | 412 if (objTempl->NewInstance(context).ToLocal(&obj)) |
422 return obj; | 413 return obj; |
423 return v8::Local<v8::Object>(); | 414 return v8::Local<v8::Object>(); |
424 } | 415 } |
425 | 416 |
426 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 417 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
427 if (!pArray) | 418 if (!pArray) |
428 return v8::Local<v8::Object>(); | 419 return v8::Local<v8::Object>(); |
429 | 420 |
430 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 421 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
431 return v8::Local<v8::Object>(); | 422 return v8::Local<v8::Object>(); |
432 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 423 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
433 | 424 |
434 v8::Local<v8::ObjectTemplate> objTemp = | 425 v8::Local<v8::ObjectTemplate> objTemp = |
435 v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 426 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
436 v8::Local<v8::Object> obj; | 427 v8::Local<v8::Object> obj; |
437 if (!objTemp->NewInstance(context).ToLocal(&obj)) | 428 if (!objTemp->NewInstance(context).ToLocal(&obj)) |
438 return v8::Local<v8::Object>(); | 429 return v8::Local<v8::Object>(); |
439 CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 430 CJS_PrivateData* pPrivateData = new CJS_PrivateData; |
440 pPrivateData->ObjDefID = nObjDefnID; | 431 pPrivateData->ObjDefID = nObjDefnID; |
441 | 432 |
442 obj->SetAlignedPointerInInternalField(0, pPrivateData); | 433 obj->SetAlignedPointerInInternalField(0, pPrivateData); |
443 if (pObjDef->m_pConstructor) | 434 if (pObjDef->m_pConstructor) |
444 pObjDef->m_pConstructor( | 435 pObjDef->m_pConstructor( |
445 pJSContext, obj, | 436 pJSContext, obj, |
446 context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); | 437 context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); |
447 | 438 |
448 return obj; | 439 return obj; |
449 } | 440 } |
450 | 441 |
451 v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) { | 442 v8::Local<v8::Object> JS_GetStaticObj(v8::Isolate* pIsolate, int nObjDefnID) { |
452 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 443 v8::Isolate::Scope isolate_scope(pIsolate); |
453 v8::Isolate::Scope isolate_scope(isolate); | 444 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
454 | |
455 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | |
456 if (!pArray) | 445 if (!pArray) |
457 return v8::Local<v8::Object>(); | 446 return v8::Local<v8::Object>(); |
458 | 447 |
459 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 448 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) |
460 return v8::Local<v8::Object>(); | 449 return v8::Local<v8::Object>(); |
461 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 450 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
462 v8::Local<v8::Object> obj = | 451 v8::Local<v8::Object> obj = |
463 v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj); | 452 v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj); |
464 return obj; | 453 return obj; |
465 } | 454 } |
466 | 455 |
467 void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID) { | 456 v8::Local<v8::Object> JS_GetThisObj(v8::Isolate* pIsolate) { |
468 // Do nothing. | |
469 } | |
470 v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime* pJSRuntime) { | |
471 // Return the global object. | 457 // Return the global object. |
472 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 458 v8::Isolate::Scope isolate_scope(pIsolate); |
473 v8::Isolate::Scope isolate_scope(isolate); | 459 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
474 | |
475 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | |
476 if (!pArray) | 460 if (!pArray) |
477 return v8::Local<v8::Object>(); | 461 return v8::Local<v8::Object>(); |
478 | 462 |
479 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 463 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
480 return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); | 464 return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); |
481 } | 465 } |
482 | 466 |
483 int JS_GetObjDefnID(v8::Local<v8::Object> pObj) { | 467 int JS_GetObjDefnID(v8::Local<v8::Object> pObj) { |
484 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 468 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) |
485 return -1; | 469 return -1; |
486 CJS_PrivateData* pPrivateData = | 470 CJS_PrivateData* pPrivateData = |
487 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 471 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); |
488 if (pPrivateData) | 472 if (pPrivateData) |
489 return pPrivateData->ObjDefID; | 473 return pPrivateData->ObjDefID; |
490 return -1; | 474 return -1; |
491 } | 475 } |
492 | 476 |
493 IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj) { | 477 v8::Isolate* JS_GetRuntime(v8::Local<v8::Object> pObj) { |
494 if (pObj.IsEmpty()) | 478 if (pObj.IsEmpty()) |
495 return NULL; | 479 return NULL; |
496 v8::Local<v8::Context> context = pObj->CreationContext(); | 480 v8::Local<v8::Context> context = pObj->CreationContext(); |
497 if (context.IsEmpty()) | 481 if (context.IsEmpty()) |
498 return NULL; | 482 return NULL; |
499 return context->GetIsolate(); | 483 return context->GetIsolate(); |
500 } | 484 } |
501 | 485 |
502 int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName) { | 486 int JS_GetObjDefnID(v8::Isolate* pIsolate, const wchar_t* pObjName) { |
503 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 487 v8::Isolate::Scope isolate_scope(pIsolate); |
504 v8::Isolate::Scope isolate_scope(isolate); | 488 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
505 | |
506 CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | |
507 if (!pArray) | 489 if (!pArray) |
508 return -1; | 490 return -1; |
509 | 491 |
510 for (int i = 0; i < pArray->GetSize(); i++) { | 492 for (int i = 0; i < pArray->GetSize(); i++) { |
511 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 493 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); |
512 if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) | 494 if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) |
513 return i; | 495 return i; |
514 } | 496 } |
515 return -1; | 497 return -1; |
516 } | 498 } |
517 | 499 |
518 void JS_Error(v8::Isolate* isolate, const CFX_WideString& message) { | 500 void JS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) { |
519 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t | 501 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t |
520 // wide-strings isn't handled by v8, so use UTF8 as a common | 502 // wide-strings isn't handled by v8, so use UTF8 as a common |
521 // intermediate format. | 503 // intermediate format. |
522 CFX_ByteString utf8_message = message.UTF8Encode(); | 504 CFX_ByteString utf8_message = message.UTF8Encode(); |
523 isolate->ThrowException(v8::String::NewFromUtf8(isolate, utf8_message.c_str(), | 505 pIsolate->ThrowException( |
524 v8::NewStringType::kNormal) | 506 v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(), |
525 .ToLocalChecked()); | 507 v8::NewStringType::kNormal).ToLocalChecked()); |
526 } | 508 } |
527 | 509 |
528 unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { | 510 unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { |
529 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, nLen); | 511 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, nLen); |
530 } | 512 } |
531 | 513 |
532 unsigned JS_CalcHash(const wchar_t* main) { | 514 unsigned JS_CalcHash(const wchar_t* main) { |
533 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, | 515 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, |
534 FXSYS_wcslen(main)); | 516 FXSYS_wcslen(main)); |
535 } | 517 } |
(...skipping 17 matching lines...) Expand all Loading... |
553 return NULL; | 535 return NULL; |
554 } | 536 } |
555 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { | 537 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { |
556 JS_SetPrivate(NULL, pObj, p); | 538 JS_SetPrivate(NULL, pObj, p); |
557 } | 539 } |
558 | 540 |
559 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { | 541 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { |
560 return JS_GetPrivate(NULL, pObj); | 542 return JS_GetPrivate(NULL, pObj); |
561 } | 543 } |
562 | 544 |
563 void JS_SetPrivate(IJS_Runtime* pJSRuntime, | 545 void JS_SetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj, void* p) { |
564 v8::Local<v8::Object> pObj, | |
565 void* p) { | |
566 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 546 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) |
567 return; | 547 return; |
568 CJS_PrivateData* pPrivateData = | 548 CJS_PrivateData* pPrivateData = |
569 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 549 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); |
570 if (!pPrivateData) | 550 if (!pPrivateData) |
571 return; | 551 return; |
572 pPrivateData->pPrivate = p; | 552 pPrivateData->pPrivate = p; |
573 } | 553 } |
574 | 554 |
575 void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj) { | 555 void* JS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj) { |
576 if (pObj.IsEmpty()) | 556 if (pObj.IsEmpty()) |
577 return NULL; | 557 return NULL; |
578 CJS_PrivateData* pPrivateData = NULL; | 558 CJS_PrivateData* pPrivateData = NULL; |
579 if (pObj->InternalFieldCount()) | 559 if (pObj->InternalFieldCount()) |
580 pPrivateData = | 560 pPrivateData = |
581 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 561 (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); |
582 else { | 562 else { |
583 // It could be a global proxy object. | 563 // It could be a global proxy object. |
584 v8::Local<v8::Value> v = pObj->GetPrototype(); | 564 v8::Local<v8::Value> v = pObj->GetPrototype(); |
585 v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 565 v8::Isolate* isolate = (v8::Isolate*)pIsolate; |
586 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 566 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
587 if (v->IsObject()) | 567 if (v->IsObject()) |
588 pPrivateData = (CJS_PrivateData*)v->ToObject(context) | 568 pPrivateData = (CJS_PrivateData*)v->ToObject(context) |
589 .ToLocalChecked() | 569 .ToLocalChecked() |
590 ->GetAlignedPointerFromInternalField(0); | 570 ->GetAlignedPointerFromInternalField(0); |
591 } | 571 } |
592 if (!pPrivateData) | 572 if (!pPrivateData) |
593 return NULL; | 573 return NULL; |
594 return pPrivateData->pPrivate; | 574 return pPrivateData->pPrivate; |
595 } | 575 } |
596 | 576 |
597 void JS_FreePrivate(void* pPrivateData) { | 577 void JS_FreePrivate(void* pPrivateData) { |
598 delete (CJS_PrivateData*)pPrivateData; | 578 delete (CJS_PrivateData*)pPrivateData; |
599 } | 579 } |
600 | 580 |
601 void JS_FreePrivate(v8::Local<v8::Object> pObj) { | 581 void JS_FreePrivate(v8::Local<v8::Object> pObj) { |
602 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 582 if (pObj.IsEmpty() || !pObj->InternalFieldCount()) |
603 return; | 583 return; |
604 JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); | 584 JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); |
605 pObj->SetAlignedPointerInInternalField(0, NULL); | 585 pObj->SetAlignedPointerInInternalField(0, NULL); |
606 } | 586 } |
607 | 587 |
608 v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj) { | 588 v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj) { |
609 return pObj; | 589 return pObj; |
610 } | 590 } |
611 | 591 |
612 v8::Local<v8::String> WSToJSString(IJS_Runtime* pJSRuntime, | 592 v8::Local<v8::String> WSToJSString(v8::Isolate* pIsolate, |
613 const wchar_t* PropertyName, | 593 const wchar_t* PropertyName, |
614 int Len = -1) { | 594 int Len = -1) { |
615 CFX_WideString ws = CFX_WideString(PropertyName, Len); | 595 CFX_WideString ws = CFX_WideString(PropertyName, Len); |
616 CFX_ByteString bs = ws.UTF8Encode(); | 596 CFX_ByteString bs = ws.UTF8Encode(); |
617 if (!pJSRuntime) | 597 if (!pIsolate) |
618 pJSRuntime = v8::Isolate::GetCurrent(); | 598 pIsolate = v8::Isolate::GetCurrent(); |
619 return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(), | 599 return v8::String::NewFromUtf8(pIsolate, bs.c_str(), |
620 v8::NewStringType::kNormal) | 600 v8::NewStringType::kNormal).ToLocalChecked(); |
621 .ToLocalChecked(); | |
622 } | 601 } |
623 | 602 |
624 v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime, | 603 v8::Local<v8::Value> JS_GetObjectElement(v8::Isolate* pIsolate, |
625 v8::Local<v8::Object> pObj, | 604 v8::Local<v8::Object> pObj, |
626 const wchar_t* PropertyName) { | 605 const wchar_t* PropertyName) { |
627 if (pObj.IsEmpty()) | 606 if (pObj.IsEmpty()) |
628 return v8::Local<v8::Value>(); | 607 return v8::Local<v8::Value>(); |
629 v8::Local<v8::Value> val; | 608 v8::Local<v8::Value> val; |
630 if (!pObj->Get(pJSRuntime->GetCurrentContext(), | 609 if (!pObj->Get(pIsolate->GetCurrentContext(), |
631 WSToJSString(pJSRuntime, PropertyName)) | 610 WSToJSString(pIsolate, PropertyName)).ToLocal(&val)) |
632 .ToLocal(&val)) | |
633 return v8::Local<v8::Value>(); | 611 return v8::Local<v8::Value>(); |
634 return val; | 612 return val; |
635 } | 613 } |
636 | 614 |
637 v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, | 615 v8::Local<v8::Array> JS_GetObjectElementNames(v8::Isolate* pIsolate, |
638 v8::Local<v8::Object> pObj) { | 616 v8::Local<v8::Object> pObj) { |
639 if (pObj.IsEmpty()) | 617 if (pObj.IsEmpty()) |
640 return v8::Local<v8::Array>(); | 618 return v8::Local<v8::Array>(); |
641 v8::Local<v8::Array> val; | 619 v8::Local<v8::Array> val; |
642 if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val)) | 620 if (!pObj->GetPropertyNames(pIsolate->GetCurrentContext()).ToLocal(&val)) |
643 return v8::Local<v8::Array>(); | 621 return v8::Local<v8::Array>(); |
644 return val; | 622 return val; |
645 } | 623 } |
646 | 624 |
647 void JS_PutObjectString(IJS_Runtime* pJSRuntime, | 625 void JS_PutObjectString(v8::Isolate* pIsolate, |
648 v8::Local<v8::Object> pObj, | 626 v8::Local<v8::Object> pObj, |
649 const wchar_t* PropertyName, | 627 const wchar_t* PropertyName, |
650 const wchar_t* sValue) // VT_string | 628 const wchar_t* sValue) // VT_string |
651 { | 629 { |
652 if (pObj.IsEmpty()) | 630 if (pObj.IsEmpty()) |
653 return; | 631 return; |
654 pObj->Set(pJSRuntime->GetCurrentContext(), | 632 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
655 WSToJSString(pJSRuntime, PropertyName), | 633 WSToJSString(pIsolate, sValue)).FromJust(); |
656 WSToJSString(pJSRuntime, sValue)) | |
657 .FromJust(); | |
658 } | 634 } |
659 | 635 |
660 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 636 void JS_PutObjectNumber(v8::Isolate* pIsolate, |
661 v8::Local<v8::Object> pObj, | 637 v8::Local<v8::Object> pObj, |
662 const wchar_t* PropertyName, | 638 const wchar_t* PropertyName, |
663 int nValue) { | 639 int nValue) { |
664 if (pObj.IsEmpty()) | 640 if (pObj.IsEmpty()) |
665 return; | 641 return; |
666 pObj->Set(pJSRuntime->GetCurrentContext(), | 642 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
667 WSToJSString(pJSRuntime, PropertyName), | 643 v8::Int32::New(pIsolate, nValue)).FromJust(); |
668 v8::Int32::New(pJSRuntime, nValue)) | |
669 .FromJust(); | |
670 } | 644 } |
671 | 645 |
672 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 646 void JS_PutObjectNumber(v8::Isolate* pIsolate, |
673 v8::Local<v8::Object> pObj, | 647 v8::Local<v8::Object> pObj, |
674 const wchar_t* PropertyName, | 648 const wchar_t* PropertyName, |
675 float fValue) { | 649 float fValue) { |
676 if (pObj.IsEmpty()) | 650 if (pObj.IsEmpty()) |
677 return; | 651 return; |
678 pObj->Set(pJSRuntime->GetCurrentContext(), | 652 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
679 WSToJSString(pJSRuntime, PropertyName), | 653 v8::Number::New(pIsolate, (double)fValue)).FromJust(); |
680 v8::Number::New(pJSRuntime, (double)fValue)) | |
681 .FromJust(); | |
682 } | 654 } |
683 | 655 |
684 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 656 void JS_PutObjectNumber(v8::Isolate* pIsolate, |
685 v8::Local<v8::Object> pObj, | 657 v8::Local<v8::Object> pObj, |
686 const wchar_t* PropertyName, | 658 const wchar_t* PropertyName, |
687 double dValue) { | 659 double dValue) { |
688 if (pObj.IsEmpty()) | 660 if (pObj.IsEmpty()) |
689 return; | 661 return; |
690 pObj->Set(pJSRuntime->GetCurrentContext(), | 662 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
691 WSToJSString(pJSRuntime, PropertyName), | 663 v8::Number::New(pIsolate, (double)dValue)).FromJust(); |
692 v8::Number::New(pJSRuntime, (double)dValue)) | |
693 .FromJust(); | |
694 } | 664 } |
695 | 665 |
696 void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime, | 666 void JS_PutObjectBoolean(v8::Isolate* pIsolate, |
697 v8::Local<v8::Object> pObj, | 667 v8::Local<v8::Object> pObj, |
698 const wchar_t* PropertyName, | 668 const wchar_t* PropertyName, |
699 bool bValue) { | 669 bool bValue) { |
700 if (pObj.IsEmpty()) | 670 if (pObj.IsEmpty()) |
701 return; | 671 return; |
702 pObj->Set(pJSRuntime->GetCurrentContext(), | 672 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
703 WSToJSString(pJSRuntime, PropertyName), | 673 v8::Boolean::New(pIsolate, bValue)).FromJust(); |
704 v8::Boolean::New(pJSRuntime, bValue)) | |
705 .FromJust(); | |
706 } | 674 } |
707 | 675 |
708 void JS_PutObjectObject(IJS_Runtime* pJSRuntime, | 676 void JS_PutObjectObject(v8::Isolate* pIsolate, |
709 v8::Local<v8::Object> pObj, | 677 v8::Local<v8::Object> pObj, |
710 const wchar_t* PropertyName, | 678 const wchar_t* PropertyName, |
711 v8::Local<v8::Object> pPut) { | 679 v8::Local<v8::Object> pPut) { |
712 if (pObj.IsEmpty()) | 680 if (pObj.IsEmpty()) |
713 return; | 681 return; |
714 pObj->Set(pJSRuntime->GetCurrentContext(), | 682 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
715 WSToJSString(pJSRuntime, PropertyName), pPut) | 683 pPut).FromJust(); |
716 .FromJust(); | |
717 } | 684 } |
718 | 685 |
719 void JS_PutObjectNull(IJS_Runtime* pJSRuntime, | 686 void JS_PutObjectNull(v8::Isolate* pIsolate, |
720 v8::Local<v8::Object> pObj, | 687 v8::Local<v8::Object> pObj, |
721 const wchar_t* PropertyName) { | 688 const wchar_t* PropertyName) { |
722 if (pObj.IsEmpty()) | 689 if (pObj.IsEmpty()) |
723 return; | 690 return; |
724 pObj->Set(pJSRuntime->GetCurrentContext(), | 691 pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), |
725 WSToJSString(pJSRuntime, PropertyName), v8::Local<v8::Object>()) | 692 v8::Local<v8::Object>()).FromJust(); |
726 .FromJust(); | |
727 } | 693 } |
728 | 694 |
729 v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime) { | 695 v8::Local<v8::Array> JS_NewArray(v8::Isolate* pIsolate) { |
730 return v8::Array::New(pJSRuntime); | 696 return v8::Array::New(pIsolate); |
731 } | 697 } |
732 | 698 |
733 unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, | 699 unsigned JS_PutArrayElement(v8::Isolate* pIsolate, |
734 v8::Local<v8::Array> pArray, | 700 v8::Local<v8::Array> pArray, |
735 unsigned index, | 701 unsigned index, |
736 v8::Local<v8::Value> pValue, | 702 v8::Local<v8::Value> pValue, |
737 FXJSVALUETYPE eType) { | 703 FXJSVALUETYPE eType) { |
738 if (pArray.IsEmpty()) | 704 if (pArray.IsEmpty()) |
739 return 0; | 705 return 0; |
740 if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing()) | 706 if (pArray->Set(pIsolate->GetCurrentContext(), index, pValue).IsNothing()) |
741 return 0; | 707 return 0; |
742 return 1; | 708 return 1; |
743 } | 709 } |
744 | 710 |
745 v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime, | 711 v8::Local<v8::Value> JS_GetArrayElement(v8::Isolate* pIsolate, |
746 v8::Local<v8::Array> pArray, | 712 v8::Local<v8::Array> pArray, |
747 unsigned index) { | 713 unsigned index) { |
748 if (pArray.IsEmpty()) | 714 if (pArray.IsEmpty()) |
749 return v8::Local<v8::Value>(); | 715 return v8::Local<v8::Value>(); |
750 v8::Local<v8::Value> val; | 716 v8::Local<v8::Value> val; |
751 if (!pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val)) | 717 if (!pArray->Get(pIsolate->GetCurrentContext(), index).ToLocal(&val)) |
752 return v8::Local<v8::Value>(); | 718 return v8::Local<v8::Value>(); |
753 return val; | 719 return val; |
754 } | 720 } |
755 | 721 |
756 unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray) { | 722 unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray) { |
757 if (pArray.IsEmpty()) | 723 if (pArray.IsEmpty()) |
758 return 0; | 724 return 0; |
759 return pArray->Length(); | 725 return pArray->Length(); |
760 } | 726 } |
761 | 727 |
762 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, int number) { | 728 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, int number) { |
763 return v8::Int32::New(pJSRuntime, number); | 729 return v8::Int32::New(pIsolate, number); |
764 } | 730 } |
765 | 731 |
766 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, double number) { | 732 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, double number) { |
767 return v8::Number::New(pJSRuntime, number); | 733 return v8::Number::New(pIsolate, number); |
768 } | 734 } |
769 | 735 |
770 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, float number) { | 736 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, float number) { |
771 return v8::Number::New(pJSRuntime, (float)number); | 737 return v8::Number::New(pIsolate, (float)number); |
772 } | 738 } |
773 | 739 |
774 v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b) { | 740 v8::Local<v8::Value> JS_NewBoolean(v8::Isolate* pIsolate, bool b) { |
775 return v8::Boolean::New(pJSRuntime, b); | 741 return v8::Boolean::New(pIsolate, b); |
776 } | 742 } |
777 | 743 |
778 v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime, | 744 v8::Local<v8::Value> JS_NewObject(v8::Isolate* pIsolate, |
779 v8::Local<v8::Object> pObj) { | 745 v8::Local<v8::Object> pObj) { |
780 if (pObj.IsEmpty()) | 746 if (pObj.IsEmpty()) |
781 return v8::Local<v8::Value>(); | 747 return v8::Local<v8::Value>(); |
782 return pObj->Clone(); | 748 return pObj->Clone(); |
783 } | 749 } |
784 | 750 |
785 v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime, | 751 v8::Local<v8::Value> JS_NewObject2(v8::Isolate* pIsolate, |
786 v8::Local<v8::Array> pObj) { | 752 v8::Local<v8::Array> pObj) { |
787 if (pObj.IsEmpty()) | 753 if (pObj.IsEmpty()) |
788 return v8::Local<v8::Value>(); | 754 return v8::Local<v8::Value>(); |
789 return pObj->Clone(); | 755 return pObj->Clone(); |
790 } | 756 } |
791 | 757 |
792 v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime, | 758 v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate, |
793 const wchar_t* string) { | 759 const wchar_t* string) { |
794 return WSToJSString(pJSRuntime, string); | 760 return WSToJSString(pIsolate, string); |
795 } | 761 } |
796 | 762 |
797 v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime, | 763 v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate, |
798 const wchar_t* string, | 764 const wchar_t* string, |
799 unsigned nLen) { | 765 unsigned nLen) { |
800 return WSToJSString(pJSRuntime, string, nLen); | 766 return WSToJSString(pIsolate, string, nLen); |
801 } | 767 } |
802 | 768 |
803 v8::Local<v8::Value> JS_NewNull() { | 769 v8::Local<v8::Value> JS_NewNull() { |
804 return v8::Local<v8::Value>(); | 770 return v8::Local<v8::Value>(); |
805 } | 771 } |
806 | 772 |
807 v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime, double d) { | 773 v8::Local<v8::Value> JS_NewDate(v8::Isolate* pIsolate, double d) { |
808 return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked(); | 774 return v8::Date::New(pIsolate->GetCurrentContext(), d).ToLocalChecked(); |
809 } | 775 } |
810 | 776 |
811 v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime) { | 777 v8::Local<v8::Value> JS_NewValue(v8::Isolate* pIsolate) { |
812 return v8::Local<v8::Value>(); | 778 return v8::Local<v8::Value>(); |
813 } | 779 } |
814 | 780 |
815 v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime, | 781 v8::Local<v8::Value> JS_GetListValue(v8::Isolate* pIsolate, |
816 v8::Local<v8::Value> pList, | 782 v8::Local<v8::Value> pList, |
817 int index) { | 783 int index) { |
818 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 784 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
819 if (!pList.IsEmpty() && pList->IsObject()) { | 785 if (!pList.IsEmpty() && pList->IsObject()) { |
820 v8::Local<v8::Object> obj; | 786 v8::Local<v8::Object> obj; |
821 if (pList->ToObject(context).ToLocal(&obj)) { | 787 if (pList->ToObject(context).ToLocal(&obj)) { |
822 v8::Local<v8::Value> val; | 788 v8::Local<v8::Value> val; |
823 if (obj->Get(context, index).ToLocal(&val)) | 789 if (obj->Get(context, index).ToLocal(&val)) |
824 return val; | 790 return val; |
825 } | 791 } |
826 } | 792 } |
827 return v8::Local<v8::Value>(); | 793 return v8::Local<v8::Value>(); |
828 } | 794 } |
829 | 795 |
830 int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 796 int JS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { |
831 if (pValue.IsEmpty()) | 797 if (pValue.IsEmpty()) |
832 return 0; | 798 return 0; |
833 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 799 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
834 return pValue->ToInt32(context).ToLocalChecked()->Value(); | 800 return pValue->ToInt32(context).ToLocalChecked()->Value(); |
835 } | 801 } |
836 | 802 |
837 bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 803 bool JS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { |
838 if (pValue.IsEmpty()) | 804 if (pValue.IsEmpty()) |
839 return false; | 805 return false; |
840 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 806 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
841 return pValue->ToBoolean(context).ToLocalChecked()->Value(); | 807 return pValue->ToBoolean(context).ToLocalChecked()->Value(); |
842 } | 808 } |
843 | 809 |
844 double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 810 double JS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { |
845 if (pValue.IsEmpty()) | 811 if (pValue.IsEmpty()) |
846 return 0.0; | 812 return 0.0; |
847 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 813 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
848 return pValue->ToNumber(context).ToLocalChecked()->Value(); | 814 return pValue->ToNumber(context).ToLocalChecked()->Value(); |
849 } | 815 } |
850 | 816 |
851 v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime, | 817 v8::Local<v8::Object> JS_ToObject(v8::Isolate* pIsolate, |
852 v8::Local<v8::Value> pValue) { | 818 v8::Local<v8::Value> pValue) { |
853 if (pValue.IsEmpty()) | 819 if (pValue.IsEmpty()) |
854 return v8::Local<v8::Object>(); | 820 return v8::Local<v8::Object>(); |
855 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 821 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
856 return pValue->ToObject(context).ToLocalChecked(); | 822 return pValue->ToObject(context).ToLocalChecked(); |
857 } | 823 } |
858 | 824 |
859 CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, | 825 CFX_WideString JS_ToString(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { |
860 v8::Local<v8::Value> pValue) { | |
861 if (pValue.IsEmpty()) | 826 if (pValue.IsEmpty()) |
862 return L""; | 827 return L""; |
863 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 828 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
864 v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); | 829 v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); |
865 return CFX_WideString::FromUTF8(*s, s.length()); | 830 return CFX_WideString::FromUTF8(*s, s.length()); |
866 } | 831 } |
867 | 832 |
868 v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime, | 833 v8::Local<v8::Array> JS_ToArray(v8::Isolate* pIsolate, |
869 v8::Local<v8::Value> pValue) { | 834 v8::Local<v8::Value> pValue) { |
870 if (pValue.IsEmpty()) | 835 if (pValue.IsEmpty()) |
871 return v8::Local<v8::Array>(); | 836 return v8::Local<v8::Array>(); |
872 v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 837 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
873 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 838 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); |
874 } | 839 } |
875 | 840 |
876 void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 841 void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { |
877 pTo = pFrom; | 842 pTo = pFrom; |
878 } | 843 } |
879 | 844 |
880 // JavaScript time implement begin. | 845 // JavaScript time implement begin. |
881 | 846 |
882 double _getLocalTZA() { | 847 double _getLocalTZA() { |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 | 1119 |
1155 bool JS_PortIsNan(double d) { | 1120 bool JS_PortIsNan(double d) { |
1156 return d != d; | 1121 return d != d; |
1157 } | 1122 } |
1158 | 1123 |
1159 double JS_LocalTime(double d) { | 1124 double JS_LocalTime(double d) { |
1160 return JS_GetDateTime() + _getDaylightSavingTA(d); | 1125 return JS_GetDateTime() + _getDaylightSavingTA(d); |
1161 } | 1126 } |
1162 | 1127 |
1163 // JavaScript time implement End. | 1128 // JavaScript time implement End. |
OLD | NEW |