| 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::HandleScope handle_scope(pIsolate); | 
| 284   v8::HandleScope handle_scope(isolate); |  | 
| 285 | 276 | 
| 286   v8::Global<v8::ObjectTemplate>& globalObjTemp = | 277   v8::Global<v8::ObjectTemplate>& globalObjTemp = | 
| 287       _getGlobalObjectTemplate(pJSRuntime); | 278       _getGlobalObjectTemplate(pIsolate); | 
| 288   v8::Local<v8::Context> v8Context = v8::Context::New( | 279   v8::Local<v8::Context> v8Context = v8::Context::New( | 
| 289       isolate, NULL, | 280       pIsolate, NULL, | 
| 290       v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp)); | 281       v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp)); | 
| 291   v8::Context::Scope context_scope(v8Context); | 282   v8::Context::Scope context_scope(v8Context); | 
| 292 | 283 | 
| 293   v8::Local<v8::External> ptr = v8::External::New(isolate, pFXRuntime); | 284   v8::Local<v8::External> ptr = v8::External::New(pIsolate, pFXRuntime); | 
| 294   v8Context->SetEmbedderData(1, ptr); | 285   v8Context->SetEmbedderData(1, ptr); | 
| 295 | 286 | 
| 296   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 287   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 297   if (!pArray) | 288   if (!pArray) | 
| 298     return; | 289     return; | 
| 299 | 290 | 
| 300   for (int i = 0; i < pArray->GetSize(); i++) { | 291   for (int i = 0; i < pArray->GetSize(); i++) { | 
| 301     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 292     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 
| 302     CFX_WideString ws = CFX_WideString(pObjDef->objName); | 293     CFX_WideString ws = CFX_WideString(pObjDef->objName); | 
| 303     CFX_ByteString bs = ws.UTF8Encode(); | 294     CFX_ByteString bs = ws.UTF8Encode(); | 
| 304     v8::Local<v8::String> objName = | 295     v8::Local<v8::String> objName = | 
| 305         v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal, | 296         v8::String::NewFromUtf8(pIsolate, bs.c_str(), | 
| 306                                 bs.GetLength()) | 297                                 v8::NewStringType::kNormal, | 
| 307             .ToLocalChecked(); | 298                                 bs.GetLength()).ToLocalChecked(); | 
| 308 | 299 | 
| 309     if (pObjDef->objType == JS_DYNAMIC) { | 300     if (pObjDef->objType == JS_DYNAMIC) { | 
| 310       // Document is set as global object, need to construct it first. | 301       // Document is set as global object, need to construct it first. | 
| 311       if (ws.Equal(L"Document")) { | 302       if (ws.Equal(L"Document")) { | 
| 312         CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 303         CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 
| 313         pPrivateData->ObjDefID = i; | 304         pPrivateData->ObjDefID = i; | 
| 314 | 305 | 
| 315         v8Context->Global() | 306         v8Context->Global() | 
| 316             ->GetPrototype() | 307             ->GetPrototype() | 
| 317             ->ToObject(v8Context) | 308             ->ToObject(v8Context) | 
| 318             .ToLocalChecked() | 309             .ToLocalChecked() | 
| 319             ->SetAlignedPointerInInternalField(0, pPrivateData); | 310             ->SetAlignedPointerInInternalField(0, pPrivateData); | 
| 320 | 311 | 
| 321         if (pObjDef->m_pConstructor) | 312         if (pObjDef->m_pConstructor) | 
| 322           pObjDef->m_pConstructor(context, v8Context->Global() | 313           pObjDef->m_pConstructor(context, v8Context->Global() | 
| 323                                                ->GetPrototype() | 314                                                ->GetPrototype() | 
| 324                                                ->ToObject(v8Context) | 315                                                ->ToObject(v8Context) | 
| 325                                                .ToLocalChecked(), | 316                                                .ToLocalChecked(), | 
| 326                                   v8Context->Global() | 317                                   v8Context->Global() | 
| 327                                       ->GetPrototype() | 318                                       ->GetPrototype() | 
| 328                                       ->ToObject(v8Context) | 319                                       ->ToObject(v8Context) | 
| 329                                       .ToLocalChecked()); | 320                                       .ToLocalChecked()); | 
| 330       } | 321       } | 
| 331     } else { | 322     } else { | 
| 332       v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pJSRuntime, context, i); | 323       v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pIsolate, context, i); | 
| 333       v8Context->Global()->Set(v8Context, objName, obj).FromJust(); | 324       v8Context->Global()->Set(v8Context, objName, obj).FromJust(); | 
| 334       pObjDef->m_StaticObj.Reset(isolate, obj); | 325       pObjDef->m_StaticObj.Reset(pIsolate, obj); | 
| 335     } | 326     } | 
| 336   } | 327   } | 
| 337   v8PersistentContext.Reset(isolate, v8Context); | 328   v8PersistentContext.Reset(pIsolate, v8Context); | 
| 338 } | 329 } | 
| 339 | 330 | 
| 340 void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, | 331 void JS_ReleaseRuntime(v8::Isolate* pIsolate, | 
| 341                        v8::Global<v8::Context>& v8PersistentContext) { | 332                        v8::Global<v8::Context>& v8PersistentContext) { | 
| 342   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 333   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 343   v8::Isolate::Scope isolate_scope(isolate); | 334   v8::HandleScope handle_scope(pIsolate); | 
| 344   v8::HandleScope handle_scope(isolate); |  | 
| 345   v8::Local<v8::Context> context = | 335   v8::Local<v8::Context> context = | 
| 346       v8::Local<v8::Context>::New(isolate, v8PersistentContext); | 336       v8::Local<v8::Context>::New(pIsolate, v8PersistentContext); | 
| 347   v8::Context::Scope context_scope(context); | 337   v8::Context::Scope context_scope(context); | 
| 348 | 338 | 
| 349   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 339   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 350   if (!pArray) | 340   if (!pArray) | 
| 351     return; | 341     return; | 
| 352 | 342 | 
| 353   for (int i = 0; i < pArray->GetSize(); i++) { | 343   for (int i = 0; i < pArray->GetSize(); i++) { | 
| 354     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 344     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 
| 355     if (!pObjDef->m_StaticObj.IsEmpty()) { | 345     if (!pObjDef->m_StaticObj.IsEmpty()) { | 
| 356       v8::Local<v8::Object> pObj = | 346       v8::Local<v8::Object> pObj = | 
| 357           v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj); | 347           v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj); | 
| 358       if (pObjDef->m_pDestructor) | 348       if (pObjDef->m_pDestructor) | 
| 359         pObjDef->m_pDestructor(pObj); | 349         pObjDef->m_pDestructor(pObj); | 
| 360       JS_FreePrivate(pObj); | 350       JS_FreePrivate(pObj); | 
| 361     } | 351     } | 
| 362     delete pObjDef; | 352     delete pObjDef; | 
| 363   } | 353   } | 
| 364   delete pArray; | 354   delete pArray; | 
| 365   isolate->SetData(g_embedderDataSlot, NULL); | 355   pIsolate->SetData(g_embedderDataSlot, NULL); | 
| 366 } | 356 } | 
| 367 | 357 | 
| 368 void JS_Initial(unsigned int embedderDataSlot) { | 358 void JS_Initial(unsigned int embedderDataSlot) { | 
| 369   g_embedderDataSlot = embedderDataSlot; | 359   g_embedderDataSlot = embedderDataSlot; | 
| 370 } | 360 } | 
| 371 | 361 | 
| 372 void JS_Release() { | 362 void JS_Release() { | 
| 373 } | 363 } | 
| 374 | 364 | 
| 375 int JS_Execute(IJS_Runtime* pJSRuntime, | 365 int JS_Execute(v8::Isolate* pIsolate, | 
| 376                IFXJS_Context* pJSContext, | 366                IFXJS_Context* pJSContext, | 
| 377                const wchar_t* script, | 367                const wchar_t* script, | 
| 378                long length, | 368                long length, | 
| 379                FXJSErr* perror) { | 369                FXJSErr* perror) { | 
| 380   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 370   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 381   v8::Isolate::Scope isolate_scope(isolate); | 371   v8::TryCatch try_catch(pIsolate); | 
| 382   v8::TryCatch try_catch(isolate); |  | 
| 383 | 372 | 
| 384   CFX_WideString wsScript(script); | 373   CFX_WideString wsScript(script); | 
| 385   CFX_ByteString bsScript = wsScript.UTF8Encode(); | 374   CFX_ByteString bsScript = wsScript.UTF8Encode(); | 
| 386 | 375 | 
| 387   v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 376   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 388   v8::Local<v8::Script> compiled_script; | 377   v8::Local<v8::Script> compiled_script; | 
| 389   if (!v8::Script::Compile(context, | 378   if (!v8::Script::Compile( | 
| 390                            v8::String::NewFromUtf8(isolate, bsScript.c_str(), | 379            context, v8::String::NewFromUtf8( | 
| 391                                                    v8::NewStringType::kNormal, | 380                         pIsolate, bsScript.c_str(), v8::NewStringType::kNormal, | 
| 392                                                    bsScript.GetLength()) | 381                         bsScript.GetLength()).ToLocalChecked()) | 
| 393                                .ToLocalChecked()) |  | 
| 394            .ToLocal(&compiled_script)) { | 382            .ToLocal(&compiled_script)) { | 
| 395     v8::String::Utf8Value error(try_catch.Exception()); | 383     v8::String::Utf8Value error(try_catch.Exception()); | 
| 396     return -1; | 384     return -1; | 
| 397   } | 385   } | 
| 398 | 386 | 
| 399   v8::Local<v8::Value> result; | 387   v8::Local<v8::Value> result; | 
| 400   if (!compiled_script->Run(context).ToLocal(&result)) { | 388   if (!compiled_script->Run(context).ToLocal(&result)) { | 
| 401     v8::String::Utf8Value error(try_catch.Exception()); | 389     v8::String::Utf8Value error(try_catch.Exception()); | 
| 402     return -1; | 390     return -1; | 
| 403   } | 391   } | 
| 404   return 0; | 392   return 0; | 
| 405 } | 393 } | 
| 406 | 394 | 
| 407 v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, | 395 v8::Local<v8::Object> JS_NewFxDynamicObj(v8::Isolate* pIsolate, | 
| 408                                          IFXJS_Context* pJSContext, | 396                                          IFXJS_Context* pJSContext, | 
| 409                                          int nObjDefnID) { | 397                                          int nObjDefnID) { | 
| 410   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 398   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 411   v8::Isolate::Scope isolate_scope(isolate); | 399   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 412   v8::Local<v8::Context> context = isolate->GetCurrentContext(); |  | 
| 413   if (-1 == nObjDefnID) { | 400   if (-1 == nObjDefnID) { | 
| 414     v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(isolate); | 401     v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(pIsolate); | 
| 415     v8::Local<v8::Object> obj; | 402     v8::Local<v8::Object> obj; | 
| 416     if (objTempl->NewInstance(context).ToLocal(&obj)) | 403     if (objTempl->NewInstance(context).ToLocal(&obj)) | 
| 417       return obj; | 404       return obj; | 
| 418     return v8::Local<v8::Object>(); | 405     return v8::Local<v8::Object>(); | 
| 419   } | 406   } | 
| 420 | 407 | 
| 421   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); | 408   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 422   if (!pArray) | 409   if (!pArray) | 
| 423     return v8::Local<v8::Object>(); | 410     return v8::Local<v8::Object>(); | 
| 424 | 411 | 
| 425   if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 412   if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 
| 426     return v8::Local<v8::Object>(); | 413     return v8::Local<v8::Object>(); | 
| 427   CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 414   CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 
| 428 | 415 | 
| 429   v8::Local<v8::ObjectTemplate> objTemp = | 416   v8::Local<v8::ObjectTemplate> objTemp = | 
| 430       v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate); | 417       v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); | 
| 431   v8::Local<v8::Object> obj; | 418   v8::Local<v8::Object> obj; | 
| 432   if (!objTemp->NewInstance(context).ToLocal(&obj)) | 419   if (!objTemp->NewInstance(context).ToLocal(&obj)) | 
| 433     return v8::Local<v8::Object>(); | 420     return v8::Local<v8::Object>(); | 
| 434 | 421 | 
| 435   CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 422   CJS_PrivateData* pPrivateData = new CJS_PrivateData; | 
| 436   pPrivateData->ObjDefID = nObjDefnID; | 423   pPrivateData->ObjDefID = nObjDefnID; | 
| 437 | 424 | 
| 438   obj->SetAlignedPointerInInternalField(0, pPrivateData); | 425   obj->SetAlignedPointerInInternalField(0, pPrivateData); | 
| 439   if (pObjDef->m_pConstructor) | 426   if (pObjDef->m_pConstructor) | 
| 440     pObjDef->m_pConstructor( | 427     pObjDef->m_pConstructor( | 
| 441         pJSContext, obj, | 428         pJSContext, obj, | 
| 442         context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); | 429         context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); | 
| 443 | 430 | 
| 444   return obj; | 431   return obj; | 
| 445 } | 432 } | 
| 446 | 433 | 
| 447 v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) { | 434 v8::Local<v8::Object> JS_GetStaticObj(v8::Isolate* pIsolate, int nObjDefnID) { | 
| 448   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 435   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 449   v8::Isolate::Scope isolate_scope(isolate); | 436   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 450 |  | 
| 451   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); |  | 
| 452   if (!pArray) | 437   if (!pArray) | 
| 453     return v8::Local<v8::Object>(); | 438     return v8::Local<v8::Object>(); | 
| 454 | 439 | 
| 455   if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 440   if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 
| 456     return v8::Local<v8::Object>(); | 441     return v8::Local<v8::Object>(); | 
| 457   CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 442   CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 
| 458   v8::Local<v8::Object> obj = | 443   v8::Local<v8::Object> obj = | 
| 459       v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj); | 444       v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj); | 
| 460   return obj; | 445   return obj; | 
| 461 } | 446 } | 
| 462 | 447 | 
| 463 void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID) { | 448 v8::Local<v8::Object> JS_GetThisObj(v8::Isolate* pIsolate) { | 
| 464   // Do nothing. |  | 
| 465 } |  | 
| 466 v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime* pJSRuntime) { |  | 
| 467   // Return the global object. | 449   // Return the global object. | 
| 468   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 450   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 469   v8::Isolate::Scope isolate_scope(isolate); | 451   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 470 |  | 
| 471   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); |  | 
| 472   if (!pArray) | 452   if (!pArray) | 
| 473     return v8::Local<v8::Object>(); | 453     return v8::Local<v8::Object>(); | 
| 474 | 454 | 
| 475   v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 455   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 476   return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); | 456   return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); | 
| 477 } | 457 } | 
| 478 | 458 | 
| 479 int JS_GetObjDefnID(v8::Local<v8::Object> pObj) { | 459 int JS_GetObjDefnID(v8::Local<v8::Object> pObj) { | 
| 480   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 460   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 
| 481     return -1; | 461     return -1; | 
| 482   CJS_PrivateData* pPrivateData = | 462   CJS_PrivateData* pPrivateData = | 
| 483       (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 463       (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 
| 484   if (pPrivateData) | 464   if (pPrivateData) | 
| 485     return pPrivateData->ObjDefID; | 465     return pPrivateData->ObjDefID; | 
| 486   return -1; | 466   return -1; | 
| 487 } | 467 } | 
| 488 | 468 | 
| 489 IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj) { | 469 v8::Isolate* JS_GetRuntime(v8::Local<v8::Object> pObj) { | 
| 490   if (pObj.IsEmpty()) | 470   if (pObj.IsEmpty()) | 
| 491     return NULL; | 471     return NULL; | 
| 492   v8::Local<v8::Context> context = pObj->CreationContext(); | 472   v8::Local<v8::Context> context = pObj->CreationContext(); | 
| 493   if (context.IsEmpty()) | 473   if (context.IsEmpty()) | 
| 494     return NULL; | 474     return NULL; | 
| 495   return context->GetIsolate(); | 475   return context->GetIsolate(); | 
| 496 } | 476 } | 
| 497 | 477 | 
| 498 int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName) { | 478 int JS_GetObjDefnID(v8::Isolate* pIsolate, const wchar_t* pObjName) { | 
| 499   v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 479   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 500   v8::Isolate::Scope isolate_scope(isolate); | 480   CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 
| 501 |  | 
| 502   CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); |  | 
| 503   if (!pArray) | 481   if (!pArray) | 
| 504     return -1; | 482     return -1; | 
| 505 | 483 | 
| 506   for (int i = 0; i < pArray->GetSize(); i++) { | 484   for (int i = 0; i < pArray->GetSize(); i++) { | 
| 507     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 485     CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 
| 508     if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) | 486     if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) | 
| 509       return i; | 487       return i; | 
| 510   } | 488   } | 
| 511   return -1; | 489   return -1; | 
| 512 } | 490 } | 
| 513 | 491 | 
| 514 void JS_Error(v8::Isolate* isolate, const CFX_WideString& message) { | 492 void JS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) { | 
| 515   // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t | 493   // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t | 
| 516   // wide-strings isn't handled by v8, so use UTF8 as a common | 494   // wide-strings isn't handled by v8, so use UTF8 as a common | 
| 517   // intermediate format. | 495   // intermediate format. | 
| 518   CFX_ByteString utf8_message = message.UTF8Encode(); | 496   CFX_ByteString utf8_message = message.UTF8Encode(); | 
| 519   isolate->ThrowException(v8::String::NewFromUtf8(isolate, utf8_message.c_str(), | 497   pIsolate->ThrowException( | 
| 520                                                   v8::NewStringType::kNormal) | 498       v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(), | 
| 521                               .ToLocalChecked()); | 499                               v8::NewStringType::kNormal).ToLocalChecked()); | 
| 522 } | 500 } | 
| 523 | 501 | 
| 524 unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { | 502 unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { | 
| 525   return (unsigned)FX_HashCode_String_GetW(main, nLen); | 503   return (unsigned)FX_HashCode_String_GetW(main, nLen); | 
| 526 } | 504 } | 
| 527 | 505 | 
| 528 unsigned JS_CalcHash(const wchar_t* main) { | 506 unsigned JS_CalcHash(const wchar_t* main) { | 
| 529   return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main)); | 507   return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main)); | 
| 530 } | 508 } | 
| 531 const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj) { | 509 const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj) { | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 548   return NULL; | 526   return NULL; | 
| 549 } | 527 } | 
| 550 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { | 528 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { | 
| 551   JS_SetPrivate(NULL, pObj, p); | 529   JS_SetPrivate(NULL, pObj, p); | 
| 552 } | 530 } | 
| 553 | 531 | 
| 554 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { | 532 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { | 
| 555   return JS_GetPrivate(NULL, pObj); | 533   return JS_GetPrivate(NULL, pObj); | 
| 556 } | 534 } | 
| 557 | 535 | 
| 558 void JS_SetPrivate(IJS_Runtime* pJSRuntime, | 536 void JS_SetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj, void* p) { | 
| 559                    v8::Local<v8::Object> pObj, |  | 
| 560                    void* p) { |  | 
| 561   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 537   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 
| 562     return; | 538     return; | 
| 563   CJS_PrivateData* pPrivateData = | 539   CJS_PrivateData* pPrivateData = | 
| 564       (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 540       (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 
| 565   if (!pPrivateData) | 541   if (!pPrivateData) | 
| 566     return; | 542     return; | 
| 567   pPrivateData->pPrivate = p; | 543   pPrivateData->pPrivate = p; | 
| 568 } | 544 } | 
| 569 | 545 | 
| 570 void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj) { | 546 void* JS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj) { | 
| 571   if (pObj.IsEmpty()) | 547   if (pObj.IsEmpty()) | 
| 572     return NULL; | 548     return NULL; | 
| 573   CJS_PrivateData* pPrivateData = NULL; | 549   CJS_PrivateData* pPrivateData = NULL; | 
| 574   if (pObj->InternalFieldCount()) | 550   if (pObj->InternalFieldCount()) | 
| 575     pPrivateData = | 551     pPrivateData = | 
| 576         (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 552         (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); | 
| 577   else { | 553   else { | 
| 578     // It could be a global proxy object. | 554     // It could be a global proxy object. | 
| 579     v8::Local<v8::Value> v = pObj->GetPrototype(); | 555     v8::Local<v8::Value> v = pObj->GetPrototype(); | 
| 580     v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; | 556     v8::Isolate* isolate = (v8::Isolate*)pIsolate; | 
| 581     v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 557     v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 
| 582     if (v->IsObject()) | 558     if (v->IsObject()) | 
| 583       pPrivateData = (CJS_PrivateData*)v->ToObject(context) | 559       pPrivateData = (CJS_PrivateData*)v->ToObject(context) | 
| 584                          .ToLocalChecked() | 560                          .ToLocalChecked() | 
| 585                          ->GetAlignedPointerFromInternalField(0); | 561                          ->GetAlignedPointerFromInternalField(0); | 
| 586   } | 562   } | 
| 587   if (!pPrivateData) | 563   if (!pPrivateData) | 
| 588     return NULL; | 564     return NULL; | 
| 589   return pPrivateData->pPrivate; | 565   return pPrivateData->pPrivate; | 
| 590 } | 566 } | 
| 591 | 567 | 
| 592 void JS_FreePrivate(void* pPrivateData) { | 568 void JS_FreePrivate(void* pPrivateData) { | 
| 593   delete (CJS_PrivateData*)pPrivateData; | 569   delete (CJS_PrivateData*)pPrivateData; | 
| 594 } | 570 } | 
| 595 | 571 | 
| 596 void JS_FreePrivate(v8::Local<v8::Object> pObj) { | 572 void JS_FreePrivate(v8::Local<v8::Object> pObj) { | 
| 597   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 573   if (pObj.IsEmpty() || !pObj->InternalFieldCount()) | 
| 598     return; | 574     return; | 
| 599   JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); | 575   JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); | 
| 600   pObj->SetAlignedPointerInInternalField(0, NULL); | 576   pObj->SetAlignedPointerInInternalField(0, NULL); | 
| 601 } | 577 } | 
| 602 | 578 | 
| 603 v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj) { | 579 v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj) { | 
| 604   return pObj; | 580   return pObj; | 
| 605 } | 581 } | 
| 606 | 582 | 
| 607 v8::Local<v8::String> WSToJSString(IJS_Runtime* pJSRuntime, | 583 v8::Local<v8::String> WSToJSString(v8::Isolate* pIsolate, | 
| 608                                    const wchar_t* PropertyName, | 584                                    const wchar_t* PropertyName, | 
| 609                                    int Len = -1) { | 585                                    int Len = -1) { | 
| 610   CFX_WideString ws = CFX_WideString(PropertyName, Len); | 586   CFX_WideString ws = CFX_WideString(PropertyName, Len); | 
| 611   CFX_ByteString bs = ws.UTF8Encode(); | 587   CFX_ByteString bs = ws.UTF8Encode(); | 
| 612   if (!pJSRuntime) | 588   if (!pIsolate) | 
| 613     pJSRuntime = v8::Isolate::GetCurrent(); | 589     pIsolate = v8::Isolate::GetCurrent(); | 
| 614   return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(), | 590   return v8::String::NewFromUtf8(pIsolate, bs.c_str(), | 
| 615                                  v8::NewStringType::kNormal) | 591                                  v8::NewStringType::kNormal).ToLocalChecked(); | 
| 616       .ToLocalChecked(); |  | 
| 617 } | 592 } | 
| 618 | 593 | 
| 619 v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime, | 594 v8::Local<v8::Value> JS_GetObjectElement(v8::Isolate* pIsolate, | 
| 620                                          v8::Local<v8::Object> pObj, | 595                                          v8::Local<v8::Object> pObj, | 
| 621                                          const wchar_t* PropertyName) { | 596                                          const wchar_t* PropertyName) { | 
| 622   if (pObj.IsEmpty()) | 597   if (pObj.IsEmpty()) | 
| 623     return v8::Local<v8::Value>(); | 598     return v8::Local<v8::Value>(); | 
| 624   v8::Local<v8::Value> val; | 599   v8::Local<v8::Value> val; | 
| 625   if (!pObj->Get(pJSRuntime->GetCurrentContext(), | 600   if (!pObj->Get(pIsolate->GetCurrentContext(), | 
| 626                  WSToJSString(pJSRuntime, PropertyName)) | 601                  WSToJSString(pIsolate, PropertyName)).ToLocal(&val)) | 
| 627            .ToLocal(&val)) |  | 
| 628     return v8::Local<v8::Value>(); | 602     return v8::Local<v8::Value>(); | 
| 629   return val; | 603   return val; | 
| 630 } | 604 } | 
| 631 | 605 | 
| 632 v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, | 606 v8::Local<v8::Array> JS_GetObjectElementNames(v8::Isolate* pIsolate, | 
| 633                                               v8::Local<v8::Object> pObj) { | 607                                               v8::Local<v8::Object> pObj) { | 
| 634   if (pObj.IsEmpty()) | 608   if (pObj.IsEmpty()) | 
| 635     return v8::Local<v8::Array>(); | 609     return v8::Local<v8::Array>(); | 
| 636   v8::Local<v8::Array> val; | 610   v8::Local<v8::Array> val; | 
| 637   if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val)) | 611   if (!pObj->GetPropertyNames(pIsolate->GetCurrentContext()).ToLocal(&val)) | 
| 638     return v8::Local<v8::Array>(); | 612     return v8::Local<v8::Array>(); | 
| 639   return val; | 613   return val; | 
| 640 } | 614 } | 
| 641 | 615 | 
| 642 void JS_PutObjectString(IJS_Runtime* pJSRuntime, | 616 void JS_PutObjectString(v8::Isolate* pIsolate, | 
| 643                         v8::Local<v8::Object> pObj, | 617                         v8::Local<v8::Object> pObj, | 
| 644                         const wchar_t* PropertyName, | 618                         const wchar_t* PropertyName, | 
| 645                         const wchar_t* sValue)  // VT_string | 619                         const wchar_t* sValue)  // VT_string | 
| 646 { | 620 { | 
| 647   if (pObj.IsEmpty()) | 621   if (pObj.IsEmpty()) | 
| 648     return; | 622     return; | 
| 649   pObj->Set(pJSRuntime->GetCurrentContext(), | 623   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 650             WSToJSString(pJSRuntime, PropertyName), | 624             WSToJSString(pIsolate, sValue)).FromJust(); | 
| 651             WSToJSString(pJSRuntime, sValue)) |  | 
| 652       .FromJust(); |  | 
| 653 } | 625 } | 
| 654 | 626 | 
| 655 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 627 void JS_PutObjectNumber(v8::Isolate* pIsolate, | 
| 656                         v8::Local<v8::Object> pObj, | 628                         v8::Local<v8::Object> pObj, | 
| 657                         const wchar_t* PropertyName, | 629                         const wchar_t* PropertyName, | 
| 658                         int nValue) { | 630                         int nValue) { | 
| 659   if (pObj.IsEmpty()) | 631   if (pObj.IsEmpty()) | 
| 660     return; | 632     return; | 
| 661   pObj->Set(pJSRuntime->GetCurrentContext(), | 633   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 662             WSToJSString(pJSRuntime, PropertyName), | 634             v8::Int32::New(pIsolate, nValue)).FromJust(); | 
| 663             v8::Int32::New(pJSRuntime, nValue)) |  | 
| 664       .FromJust(); |  | 
| 665 } | 635 } | 
| 666 | 636 | 
| 667 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 637 void JS_PutObjectNumber(v8::Isolate* pIsolate, | 
| 668                         v8::Local<v8::Object> pObj, | 638                         v8::Local<v8::Object> pObj, | 
| 669                         const wchar_t* PropertyName, | 639                         const wchar_t* PropertyName, | 
| 670                         float fValue) { | 640                         float fValue) { | 
| 671   if (pObj.IsEmpty()) | 641   if (pObj.IsEmpty()) | 
| 672     return; | 642     return; | 
| 673   pObj->Set(pJSRuntime->GetCurrentContext(), | 643   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 674             WSToJSString(pJSRuntime, PropertyName), | 644             v8::Number::New(pIsolate, (double)fValue)).FromJust(); | 
| 675             v8::Number::New(pJSRuntime, (double)fValue)) |  | 
| 676       .FromJust(); |  | 
| 677 } | 645 } | 
| 678 | 646 | 
| 679 void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, | 647 void JS_PutObjectNumber(v8::Isolate* pIsolate, | 
| 680                         v8::Local<v8::Object> pObj, | 648                         v8::Local<v8::Object> pObj, | 
| 681                         const wchar_t* PropertyName, | 649                         const wchar_t* PropertyName, | 
| 682                         double dValue) { | 650                         double dValue) { | 
| 683   if (pObj.IsEmpty()) | 651   if (pObj.IsEmpty()) | 
| 684     return; | 652     return; | 
| 685   pObj->Set(pJSRuntime->GetCurrentContext(), | 653   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 686             WSToJSString(pJSRuntime, PropertyName), | 654             v8::Number::New(pIsolate, (double)dValue)).FromJust(); | 
| 687             v8::Number::New(pJSRuntime, (double)dValue)) |  | 
| 688       .FromJust(); |  | 
| 689 } | 655 } | 
| 690 | 656 | 
| 691 void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime, | 657 void JS_PutObjectBoolean(v8::Isolate* pIsolate, | 
| 692                          v8::Local<v8::Object> pObj, | 658                          v8::Local<v8::Object> pObj, | 
| 693                          const wchar_t* PropertyName, | 659                          const wchar_t* PropertyName, | 
| 694                          bool bValue) { | 660                          bool bValue) { | 
| 695   if (pObj.IsEmpty()) | 661   if (pObj.IsEmpty()) | 
| 696     return; | 662     return; | 
| 697   pObj->Set(pJSRuntime->GetCurrentContext(), | 663   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 698             WSToJSString(pJSRuntime, PropertyName), | 664             v8::Boolean::New(pIsolate, bValue)).FromJust(); | 
| 699             v8::Boolean::New(pJSRuntime, bValue)) |  | 
| 700       .FromJust(); |  | 
| 701 } | 665 } | 
| 702 | 666 | 
| 703 void JS_PutObjectObject(IJS_Runtime* pJSRuntime, | 667 void JS_PutObjectObject(v8::Isolate* pIsolate, | 
| 704                         v8::Local<v8::Object> pObj, | 668                         v8::Local<v8::Object> pObj, | 
| 705                         const wchar_t* PropertyName, | 669                         const wchar_t* PropertyName, | 
| 706                         v8::Local<v8::Object> pPut) { | 670                         v8::Local<v8::Object> pPut) { | 
| 707   if (pObj.IsEmpty()) | 671   if (pObj.IsEmpty()) | 
| 708     return; | 672     return; | 
| 709   pObj->Set(pJSRuntime->GetCurrentContext(), | 673   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 710             WSToJSString(pJSRuntime, PropertyName), pPut) | 674             pPut).FromJust(); | 
| 711       .FromJust(); |  | 
| 712 } | 675 } | 
| 713 | 676 | 
| 714 void JS_PutObjectNull(IJS_Runtime* pJSRuntime, | 677 void JS_PutObjectNull(v8::Isolate* pIsolate, | 
| 715                       v8::Local<v8::Object> pObj, | 678                       v8::Local<v8::Object> pObj, | 
| 716                       const wchar_t* PropertyName) { | 679                       const wchar_t* PropertyName) { | 
| 717   if (pObj.IsEmpty()) | 680   if (pObj.IsEmpty()) | 
| 718     return; | 681     return; | 
| 719   pObj->Set(pJSRuntime->GetCurrentContext(), | 682   pObj->Set(pIsolate->GetCurrentContext(), WSToJSString(pIsolate, PropertyName), | 
| 720             WSToJSString(pJSRuntime, PropertyName), v8::Local<v8::Object>()) | 683             v8::Local<v8::Object>()).FromJust(); | 
| 721       .FromJust(); |  | 
| 722 } | 684 } | 
| 723 | 685 | 
| 724 v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime) { | 686 v8::Local<v8::Array> JS_NewArray(v8::Isolate* pIsolate) { | 
| 725   return v8::Array::New(pJSRuntime); | 687   return v8::Array::New(pIsolate); | 
| 726 } | 688 } | 
| 727 | 689 | 
| 728 unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, | 690 unsigned JS_PutArrayElement(v8::Isolate* pIsolate, | 
| 729                             v8::Local<v8::Array> pArray, | 691                             v8::Local<v8::Array> pArray, | 
| 730                             unsigned index, | 692                             unsigned index, | 
| 731                             v8::Local<v8::Value> pValue, | 693                             v8::Local<v8::Value> pValue, | 
| 732                             FXJSVALUETYPE eType) { | 694                             FXJSVALUETYPE eType) { | 
| 733   if (pArray.IsEmpty()) | 695   if (pArray.IsEmpty()) | 
| 734     return 0; | 696     return 0; | 
| 735   if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing()) | 697   if (pArray->Set(pIsolate->GetCurrentContext(), index, pValue).IsNothing()) | 
| 736     return 0; | 698     return 0; | 
| 737   return 1; | 699   return 1; | 
| 738 } | 700 } | 
| 739 | 701 | 
| 740 v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime, | 702 v8::Local<v8::Value> JS_GetArrayElement(v8::Isolate* pIsolate, | 
| 741                                         v8::Local<v8::Array> pArray, | 703                                         v8::Local<v8::Array> pArray, | 
| 742                                         unsigned index) { | 704                                         unsigned index) { | 
| 743   if (pArray.IsEmpty()) | 705   if (pArray.IsEmpty()) | 
| 744     return v8::Local<v8::Value>(); | 706     return v8::Local<v8::Value>(); | 
| 745   v8::Local<v8::Value> val; | 707   v8::Local<v8::Value> val; | 
| 746   if (!pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val)) | 708   if (!pArray->Get(pIsolate->GetCurrentContext(), index).ToLocal(&val)) | 
| 747     return v8::Local<v8::Value>(); | 709     return v8::Local<v8::Value>(); | 
| 748   return val; | 710   return val; | 
| 749 } | 711 } | 
| 750 | 712 | 
| 751 unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray) { | 713 unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray) { | 
| 752   if (pArray.IsEmpty()) | 714   if (pArray.IsEmpty()) | 
| 753     return 0; | 715     return 0; | 
| 754   return pArray->Length(); | 716   return pArray->Length(); | 
| 755 } | 717 } | 
| 756 | 718 | 
| 757 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, int number) { | 719 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, int number) { | 
| 758   return v8::Int32::New(pJSRuntime, number); | 720   return v8::Int32::New(pIsolate, number); | 
| 759 } | 721 } | 
| 760 | 722 | 
| 761 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, double number) { | 723 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, double number) { | 
| 762   return v8::Number::New(pJSRuntime, number); | 724   return v8::Number::New(pIsolate, number); | 
| 763 } | 725 } | 
| 764 | 726 | 
| 765 v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, float number) { | 727 v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, float number) { | 
| 766   return v8::Number::New(pJSRuntime, (float)number); | 728   return v8::Number::New(pIsolate, (float)number); | 
| 767 } | 729 } | 
| 768 | 730 | 
| 769 v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b) { | 731 v8::Local<v8::Value> JS_NewBoolean(v8::Isolate* pIsolate, bool b) { | 
| 770   return v8::Boolean::New(pJSRuntime, b); | 732   return v8::Boolean::New(pIsolate, b); | 
| 771 } | 733 } | 
| 772 | 734 | 
| 773 v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime, | 735 v8::Local<v8::Value> JS_NewObject(v8::Isolate* pIsolate, | 
| 774                                   v8::Local<v8::Object> pObj) { | 736                                   v8::Local<v8::Object> pObj) { | 
| 775   if (pObj.IsEmpty()) | 737   if (pObj.IsEmpty()) | 
| 776     return v8::Local<v8::Value>(); | 738     return v8::Local<v8::Value>(); | 
| 777   return pObj->Clone(); | 739   return pObj->Clone(); | 
| 778 } | 740 } | 
| 779 | 741 | 
| 780 v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime, | 742 v8::Local<v8::Value> JS_NewObject2(v8::Isolate* pIsolate, | 
| 781                                    v8::Local<v8::Array> pObj) { | 743                                    v8::Local<v8::Array> pObj) { | 
| 782   if (pObj.IsEmpty()) | 744   if (pObj.IsEmpty()) | 
| 783     return v8::Local<v8::Value>(); | 745     return v8::Local<v8::Value>(); | 
| 784   return pObj->Clone(); | 746   return pObj->Clone(); | 
| 785 } | 747 } | 
| 786 | 748 | 
| 787 v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime, | 749 v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate, | 
| 788                                   const wchar_t* string) { | 750                                   const wchar_t* string) { | 
| 789   return WSToJSString(pJSRuntime, string); | 751   return WSToJSString(pIsolate, string); | 
| 790 } | 752 } | 
| 791 | 753 | 
| 792 v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime, | 754 v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate, | 
| 793                                   const wchar_t* string, | 755                                   const wchar_t* string, | 
| 794                                   unsigned nLen) { | 756                                   unsigned nLen) { | 
| 795   return WSToJSString(pJSRuntime, string, nLen); | 757   return WSToJSString(pIsolate, string, nLen); | 
| 796 } | 758 } | 
| 797 | 759 | 
| 798 v8::Local<v8::Value> JS_NewNull() { | 760 v8::Local<v8::Value> JS_NewNull() { | 
| 799   return v8::Local<v8::Value>(); | 761   return v8::Local<v8::Value>(); | 
| 800 } | 762 } | 
| 801 | 763 | 
| 802 v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime, double d) { | 764 v8::Local<v8::Value> JS_NewDate(v8::Isolate* pIsolate, double d) { | 
| 803   return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked(); | 765   return v8::Date::New(pIsolate->GetCurrentContext(), d).ToLocalChecked(); | 
| 804 } | 766 } | 
| 805 | 767 | 
| 806 v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime) { | 768 v8::Local<v8::Value> JS_NewValue(v8::Isolate* pIsolate) { | 
| 807   return v8::Local<v8::Value>(); | 769   return v8::Local<v8::Value>(); | 
| 808 } | 770 } | 
| 809 | 771 | 
| 810 v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime, | 772 v8::Local<v8::Value> JS_GetListValue(v8::Isolate* pIsolate, | 
| 811                                      v8::Local<v8::Value> pList, | 773                                      v8::Local<v8::Value> pList, | 
| 812                                      int index) { | 774                                      int index) { | 
| 813   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 775   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 814   if (!pList.IsEmpty() && pList->IsObject()) { | 776   if (!pList.IsEmpty() && pList->IsObject()) { | 
| 815     v8::Local<v8::Object> obj; | 777     v8::Local<v8::Object> obj; | 
| 816     if (pList->ToObject(context).ToLocal(&obj)) { | 778     if (pList->ToObject(context).ToLocal(&obj)) { | 
| 817       v8::Local<v8::Value> val; | 779       v8::Local<v8::Value> val; | 
| 818       if (obj->Get(context, index).ToLocal(&val)) | 780       if (obj->Get(context, index).ToLocal(&val)) | 
| 819         return val; | 781         return val; | 
| 820     } | 782     } | 
| 821   } | 783   } | 
| 822   return v8::Local<v8::Value>(); | 784   return v8::Local<v8::Value>(); | 
| 823 } | 785 } | 
| 824 | 786 | 
| 825 int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 787 int JS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { | 
| 826   if (pValue.IsEmpty()) | 788   if (pValue.IsEmpty()) | 
| 827     return 0; | 789     return 0; | 
| 828   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 790   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 829   return pValue->ToInt32(context).ToLocalChecked()->Value(); | 791   return pValue->ToInt32(context).ToLocalChecked()->Value(); | 
| 830 } | 792 } | 
| 831 | 793 | 
| 832 bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 794 bool JS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { | 
| 833   if (pValue.IsEmpty()) | 795   if (pValue.IsEmpty()) | 
| 834     return false; | 796     return false; | 
| 835   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 797   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 836   return pValue->ToBoolean(context).ToLocalChecked()->Value(); | 798   return pValue->ToBoolean(context).ToLocalChecked()->Value(); | 
| 837 } | 799 } | 
| 838 | 800 | 
| 839 double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) { | 801 double JS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { | 
| 840   if (pValue.IsEmpty()) | 802   if (pValue.IsEmpty()) | 
| 841     return 0.0; | 803     return 0.0; | 
| 842   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 804   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 843   return pValue->ToNumber(context).ToLocalChecked()->Value(); | 805   return pValue->ToNumber(context).ToLocalChecked()->Value(); | 
| 844 } | 806 } | 
| 845 | 807 | 
| 846 v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime, | 808 v8::Local<v8::Object> JS_ToObject(v8::Isolate* pIsolate, | 
| 847                                   v8::Local<v8::Value> pValue) { | 809                                   v8::Local<v8::Value> pValue) { | 
| 848   if (pValue.IsEmpty()) | 810   if (pValue.IsEmpty()) | 
| 849     return v8::Local<v8::Object>(); | 811     return v8::Local<v8::Object>(); | 
| 850   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 812   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 851   return pValue->ToObject(context).ToLocalChecked(); | 813   return pValue->ToObject(context).ToLocalChecked(); | 
| 852 } | 814 } | 
| 853 | 815 | 
| 854 CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, | 816 CFX_WideString JS_ToString(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) { | 
| 855                            v8::Local<v8::Value> pValue) { |  | 
| 856   if (pValue.IsEmpty()) | 817   if (pValue.IsEmpty()) | 
| 857     return L""; | 818     return L""; | 
| 858   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 819   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 859   v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); | 820   v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); | 
| 860   return CFX_WideString::FromUTF8(*s, s.length()); | 821   return CFX_WideString::FromUTF8(*s, s.length()); | 
| 861 } | 822 } | 
| 862 | 823 | 
| 863 v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime, | 824 v8::Local<v8::Array> JS_ToArray(v8::Isolate* pIsolate, | 
| 864                                 v8::Local<v8::Value> pValue) { | 825                                 v8::Local<v8::Value> pValue) { | 
| 865   if (pValue.IsEmpty()) | 826   if (pValue.IsEmpty()) | 
| 866     return v8::Local<v8::Array>(); | 827     return v8::Local<v8::Array>(); | 
| 867   v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext(); | 828   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 868   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 829   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 
| 869 } | 830 } | 
| 870 | 831 | 
| 871 void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 832 void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 
| 872   pTo = pFrom; | 833   pTo = pFrom; | 
| 873 } | 834 } | 
| 874 | 835 | 
| 875 // JavaScript time implement begin. | 836 // JavaScript time implement begin. | 
| 876 | 837 | 
| 877 double _getLocalTZA() { | 838 double _getLocalTZA() { | 
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1149 | 1110 | 
| 1150 bool JS_PortIsNan(double d) { | 1111 bool JS_PortIsNan(double d) { | 
| 1151   return d != d; | 1112   return d != d; | 
| 1152 } | 1113 } | 
| 1153 | 1114 | 
| 1154 double JS_LocalTime(double d) { | 1115 double JS_LocalTime(double d) { | 
| 1155   return JS_GetDateTime() + _getDaylightSavingTA(d); | 1116   return JS_GetDateTime() + _getDaylightSavingTA(d); | 
| 1156 } | 1117 } | 
| 1157 | 1118 | 
| 1158 // JavaScript time implement End. | 1119 // JavaScript time implement End. | 
| OLD | NEW | 
|---|