| 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 "../../include/jsapi/fxjs_v8.h" | 8 #include "../../include/jsapi/fxjs_v8.h" | 
| 9 | 9 | 
| 10 const wchar_t kFXJSValueNameString[] = L"string"; | 10 const wchar_t kFXJSValueNameString[] = L"string"; | 
| 11 const wchar_t kFXJSValueNameNumber[] = L"number"; | 11 const wchar_t kFXJSValueNameNumber[] = L"number"; | 
| 12 const wchar_t kFXJSValueNameBoolean[] = L"boolean"; | 12 const wchar_t kFXJSValueNameBoolean[] = L"boolean"; | 
| 13 const wchar_t kFXJSValueNameDate[] = L"date"; | 13 const wchar_t kFXJSValueNameDate[] = L"date"; | 
| 14 const wchar_t kFXJSValueNameObject[] = L"object"; | 14 const wchar_t kFXJSValueNameObject[] = L"object"; | 
| 15 const wchar_t kFXJSValueNameFxobj[] = L"fxobj"; | 15 const wchar_t kFXJSValueNameFxobj[] = L"fxobj"; | 
| 16 const wchar_t kFXJSValueNameNull[] = L"null"; | 16 const wchar_t kFXJSValueNameNull[] = L"null"; | 
| 17 const wchar_t kFXJSValueNameUndefined[] = L"undefined"; | 17 const wchar_t kFXJSValueNameUndefined[] = L"undefined"; | 
| 18 | 18 | 
| 19 static unsigned int g_embedderDataSlot = 1u; |  | 
| 20 |  | 
| 21 // Keep this consistent with the values defined in gin/public/context_holder.h | 19 // Keep this consistent with the values defined in gin/public/context_holder.h | 
| 22 // (without actually requiring a dependency on gin itself for the standalone | 20 // (without actually requiring a dependency on gin itself for the standalone | 
| 23 // embedders of PDFIum). The value we want to use is: | 21 // embedders of PDFIum). The value we want to use is: | 
| 24 //   kPerContextDataStartIndex + kEmbedderPDFium, which is 3. | 22 //   kPerContextDataStartIndex + kEmbedderPDFium, which is 3. | 
| 25 static const unsigned int kPerContextDataIndex = 3u; | 23 static const unsigned int kPerContextDataIndex = 3u; | 
| 26 | 24 static unsigned int g_embedderDataSlot = 1u; | 
|  | 25 static v8::Isolate* g_isolate = nullptr; | 
|  | 26 static FXJS_ArrayBufferAllocator* g_arrayBufferAllocator = nullptr; | 
| 27 static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr; | 27 static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr; | 
| 28 | 28 | 
| 29 class CFXJS_PrivateData { | 29 class CFXJS_PrivateData { | 
| 30  public: | 30  public: | 
| 31   CFXJS_PrivateData(int nObjDefID) : ObjDefID(nObjDefID), pPrivate(NULL) {} | 31   CFXJS_PrivateData(int nObjDefID) : ObjDefID(nObjDefID), pPrivate(NULL) {} | 
| 32 | 32 | 
| 33   int ObjDefID; | 33   int ObjDefID; | 
| 34   void* pPrivate; | 34   void* pPrivate; | 
| 35 }; | 35 }; | 
| 36 | 36 | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 124 } | 124 } | 
| 125 | 125 | 
| 126 void* FXJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) { | 126 void* FXJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) { | 
| 127   return malloc(length); | 127   return malloc(length); | 
| 128 } | 128 } | 
| 129 | 129 | 
| 130 void FXJS_ArrayBufferAllocator::Free(void* data, size_t length) { | 130 void FXJS_ArrayBufferAllocator::Free(void* data, size_t length) { | 
| 131   free(data); | 131   free(data); | 
| 132 } | 132 } | 
| 133 | 133 | 
|  | 134 void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate) { | 
|  | 135   g_embedderDataSlot = embedderDataSlot; | 
|  | 136   g_isolate = pIsolate; | 
|  | 137 } | 
|  | 138 | 
|  | 139 void FXJS_Release() { | 
|  | 140   g_DefaultGlobalObjectTemplate = nullptr; | 
|  | 141   g_isolate = nullptr; | 
|  | 142 | 
|  | 143   delete g_arrayBufferAllocator; | 
|  | 144   g_arrayBufferAllocator = nullptr; | 
|  | 145 } | 
|  | 146 | 
|  | 147 bool FXJS_GetIsolate(v8::Isolate** pResultIsolate) { | 
|  | 148   if (g_isolate) { | 
|  | 149     *pResultIsolate = g_isolate; | 
|  | 150     return false; | 
|  | 151   } | 
|  | 152   // Provide backwards compatibility when no external isolate. | 
|  | 153   if (!g_arrayBufferAllocator) | 
|  | 154     g_arrayBufferAllocator = new FXJS_ArrayBufferAllocator(); | 
|  | 155   v8::Isolate::CreateParams params; | 
|  | 156   params.array_buffer_allocator = g_arrayBufferAllocator; | 
|  | 157   *pResultIsolate = v8::Isolate::New(params); | 
|  | 158   return true; | 
|  | 159 } | 
|  | 160 | 
| 134 // static | 161 // static | 
| 135 void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) { | 162 void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) { | 
| 136   if (!pIsolate->GetData(g_embedderDataSlot)) | 163   if (!pIsolate->GetData(g_embedderDataSlot)) | 
| 137     pIsolate->SetData(g_embedderDataSlot, new FXJS_PerIsolateData()); | 164     pIsolate->SetData(g_embedderDataSlot, new FXJS_PerIsolateData()); | 
| 138 } | 165 } | 
| 139 | 166 | 
| 140 // static | 167 // static | 
| 141 FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) { | 168 FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) { | 
| 142   return static_cast<FXJS_PerIsolateData*>( | 169   return static_cast<FXJS_PerIsolateData*>( | 
| 143       pIsolate->GetData(g_embedderDataSlot)); | 170       pIsolate->GetData(g_embedderDataSlot)); | 
| 144 } | 171 } | 
| 145 | 172 | 
| 146 void FXJS_Initialize(unsigned int embedderDataSlot) { |  | 
| 147   g_embedderDataSlot = embedderDataSlot; |  | 
| 148 } |  | 
| 149 |  | 
| 150 void FXJS_Release() { |  | 
| 151 } |  | 
| 152 |  | 
| 153 int FXJS_DefineObj(v8::Isolate* pIsolate, | 173 int FXJS_DefineObj(v8::Isolate* pIsolate, | 
| 154                    const wchar_t* sObjName, | 174                    const wchar_t* sObjName, | 
| 155                    FXJSOBJTYPE eObjType, | 175                    FXJSOBJTYPE eObjType, | 
| 156                    FXJS_CONSTRUCTOR pConstructor, | 176                    FXJS_CONSTRUCTOR pConstructor, | 
| 157                    FXJS_DESTRUCTOR pDestructor) { | 177                    FXJS_DESTRUCTOR pDestructor) { | 
| 158   v8::Isolate::Scope isolate_scope(pIsolate); | 178   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 159   v8::HandleScope handle_scope(pIsolate); | 179   v8::HandleScope handle_scope(pIsolate); | 
| 160 | 180 | 
| 161   FXJS_PerIsolateData::SetUp(pIsolate); | 181   FXJS_PerIsolateData::SetUp(pIsolate); | 
| 162   CFXJS_ObjDefinition* pObjDef = new CFXJS_ObjDefinition( | 182   CFXJS_ObjDefinition* pObjDef = new CFXJS_ObjDefinition( | 
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 740     return v8::Local<v8::Array>(); | 760     return v8::Local<v8::Array>(); | 
| 741   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 761   v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 
| 742   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 762   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 
| 743 } | 763 } | 
| 744 | 764 | 
| 745 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 765 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 
| 746   pTo = pFrom; | 766   pTo = pFrom; | 
| 747 } | 767 } | 
| 748 | 768 | 
| 749 | 769 | 
| OLD | NEW | 
|---|