| 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 "fpdfsdk/javascript/cjs_runtime.h" | 7 #include "fpdfsdk/javascript/cjs_runtime.h" | 
| 8 | 8 | 
| 9 #include <algorithm> | 9 #include <algorithm> | 
| 10 | 10 | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 81 #endif | 81 #endif | 
| 82     } | 82     } | 
| 83 #ifndef PDF_ENABLE_XFA | 83 #ifndef PDF_ENABLE_XFA | 
| 84     FXJS_Initialize(embedderDataSlot, pExternalIsolate); | 84     FXJS_Initialize(embedderDataSlot, pExternalIsolate); | 
| 85 #else | 85 #else | 
| 86     m_isolateManaged = FXJS_GetIsolate(&m_isolate); | 86     m_isolateManaged = FXJS_GetIsolate(&m_isolate); | 
| 87   } | 87   } | 
| 88 | 88 | 
| 89   v8::Isolate* isolate = m_isolate; | 89   v8::Isolate* isolate = m_isolate; | 
| 90   v8::Isolate::Scope isolate_scope(isolate); | 90   v8::Isolate::Scope isolate_scope(isolate); | 
| 91   v8::Locker locker(isolate); |  | 
| 92   v8::HandleScope handle_scope(isolate); | 91   v8::HandleScope handle_scope(isolate); | 
| 93   if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) { | 92   if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) { | 
| 94     CJS_Context* pContext = (CJS_Context*)NewContext(); | 93     CJS_Context* pContext = (CJS_Context*)NewContext(); | 
| 95     FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); | 94     FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); | 
| 96     ReleaseContext(pContext); | 95     ReleaseContext(pContext); | 
| 97     return; | 96     return; | 
| 98 #endif | 97 #endif | 
| 99   } | 98   } | 
| 100 #ifndef PDF_ENABLE_XFA | 99 #ifndef PDF_ENABLE_XFA | 
| 101   m_isolateManaged = FXJS_GetIsolate(&m_isolate); | 100   m_isolateManaged = FXJS_GetIsolate(&m_isolate); | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 121   m_ContextArray.clear(); | 120   m_ContextArray.clear(); | 
| 122   m_ConstArrays.clear(); | 121   m_ConstArrays.clear(); | 
| 123   FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); | 122   FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); | 
| 124   m_context.Reset(); | 123   m_context.Reset(); | 
| 125   if (m_isolateManaged) | 124   if (m_isolateManaged) | 
| 126     m_isolate->Dispose(); | 125     m_isolate->Dispose(); | 
| 127 } | 126 } | 
| 128 | 127 | 
| 129 void CJS_Runtime::DefineJSObjects() { | 128 void CJS_Runtime::DefineJSObjects() { | 
| 130   v8::Isolate::Scope isolate_scope(GetIsolate()); | 129   v8::Isolate::Scope isolate_scope(GetIsolate()); | 
| 131 #ifdef PDF_ENABLE_XFA |  | 
| 132   v8::Locker locker(GetIsolate()); |  | 
| 133 #endif |  | 
| 134   v8::HandleScope handle_scope(GetIsolate()); | 130   v8::HandleScope handle_scope(GetIsolate()); | 
| 135   v8::Local<v8::Context> context = v8::Context::New(GetIsolate()); | 131   v8::Local<v8::Context> context = v8::Context::New(GetIsolate()); | 
| 136   v8::Context::Scope context_scope(context); | 132   v8::Context::Scope context_scope(context); | 
| 137 | 133 | 
| 138   // The call order determines the "ObjDefID" assigned to each class. | 134   // The call order determines the "ObjDefID" assigned to each class. | 
| 139   // ObjDefIDs 0 - 2 | 135   // ObjDefIDs 0 - 2 | 
| 140   CJS_Border::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 136   CJS_Border::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 
| 141   CJS_Display::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 137   CJS_Display::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 
| 142   CJS_Font::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 138   CJS_Font::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); | 
| 143 | 139 | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 190   } | 186   } | 
| 191 } | 187 } | 
| 192 | 188 | 
| 193 IJS_Context* CJS_Runtime::GetCurrentContext() { | 189 IJS_Context* CJS_Runtime::GetCurrentContext() { | 
| 194   return m_ContextArray.empty() ? nullptr : m_ContextArray.back().get(); | 190   return m_ContextArray.empty() ? nullptr : m_ContextArray.back().get(); | 
| 195 } | 191 } | 
| 196 | 192 | 
| 197 void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { | 193 void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { | 
| 198   if (m_pDocument != pReaderDoc) { | 194   if (m_pDocument != pReaderDoc) { | 
| 199     v8::Isolate::Scope isolate_scope(m_isolate); | 195     v8::Isolate::Scope isolate_scope(m_isolate); | 
| 200 #ifdef PDF_ENABLE_XFA |  | 
| 201     v8::Locker locker(m_isolate); |  | 
| 202 #endif |  | 
| 203     v8::HandleScope handle_scope(m_isolate); | 196     v8::HandleScope handle_scope(m_isolate); | 
| 204     v8::Local<v8::Context> context = | 197     v8::Local<v8::Context> context = | 
| 205         v8::Local<v8::Context>::New(m_isolate, m_context); | 198         v8::Local<v8::Context>::New(m_isolate, m_context); | 
| 206     v8::Context::Scope context_scope(context); | 199     v8::Context::Scope context_scope(context); | 
| 207 | 200 | 
| 208     m_pDocument = pReaderDoc; | 201     m_pDocument = pReaderDoc; | 
| 209     if (pReaderDoc) { | 202     if (pReaderDoc) { | 
| 210       v8::Local<v8::Object> pThis = FXJS_GetThisObj(GetIsolate()); | 203       v8::Local<v8::Object> pThis = FXJS_GetThisObj(GetIsolate()); | 
| 211       if (!pThis.IsEmpty()) { | 204       if (!pThis.IsEmpty()) { | 
| 212         if (FXJS_GetObjDefnID(pThis) == CJS_Document::g_nObjDefnID) { | 205         if (FXJS_GetObjDefnID(pThis) == CJS_Document::g_nObjDefnID) { | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 258 CFX_WideString ChangeObjName(const CFX_WideString& str) { | 251 CFX_WideString ChangeObjName(const CFX_WideString& str) { | 
| 259   CFX_WideString sRet = str; | 252   CFX_WideString sRet = str; | 
| 260   sRet.Replace(L"_", L"."); | 253   sRet.Replace(L"_", L"."); | 
| 261   return sRet; | 254   return sRet; | 
| 262 } | 255 } | 
| 263 FX_BOOL CJS_Runtime::GetValueByName(const CFX_ByteStringC& utf8Name, | 256 FX_BOOL CJS_Runtime::GetValueByName(const CFX_ByteStringC& utf8Name, | 
| 264                                     CFXJSE_Value* pValue) { | 257                                     CFXJSE_Value* pValue) { | 
| 265 #ifdef PDF_ENABLE_XFA | 258 #ifdef PDF_ENABLE_XFA | 
| 266   const FX_CHAR* name = utf8Name.c_str(); | 259   const FX_CHAR* name = utf8Name.c_str(); | 
| 267 | 260 | 
| 268   v8::Locker lock(GetIsolate()); |  | 
| 269   v8::Isolate::Scope isolate_scope(GetIsolate()); | 261   v8::Isolate::Scope isolate_scope(GetIsolate()); | 
| 270   v8::HandleScope handle_scope(GetIsolate()); | 262   v8::HandleScope handle_scope(GetIsolate()); | 
| 271   v8::Local<v8::Context> old_context = GetIsolate()->GetCurrentContext(); | 263   v8::Local<v8::Context> old_context = GetIsolate()->GetCurrentContext(); | 
| 272   v8::Local<v8::Context> context = | 264   v8::Local<v8::Context> context = | 
| 273       v8::Local<v8::Context>::New(GetIsolate(), m_context); | 265       v8::Local<v8::Context>::New(GetIsolate(), m_context); | 
| 274   v8::Context::Scope context_scope(context); | 266   v8::Context::Scope context_scope(context); | 
| 275 | 267 | 
| 276   // Caution: We're about to hand to XFA an object that in order to invoke | 268   // Caution: We're about to hand to XFA an object that in order to invoke | 
| 277   // methods will require that the current v8::Context always has a pointer | 269   // methods will require that the current v8::Context always has a pointer | 
| 278   // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates | 270   // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 295 | 287 | 
| 296   return TRUE; | 288   return TRUE; | 
| 297 } | 289 } | 
| 298 FX_BOOL CJS_Runtime::SetValueByName(const CFX_ByteStringC& utf8Name, | 290 FX_BOOL CJS_Runtime::SetValueByName(const CFX_ByteStringC& utf8Name, | 
| 299                                     CFXJSE_Value* pValue) { | 291                                     CFXJSE_Value* pValue) { | 
| 300 #ifdef PDF_ENABLE_XFA | 292 #ifdef PDF_ENABLE_XFA | 
| 301   if (utf8Name.IsEmpty() || !pValue) | 293   if (utf8Name.IsEmpty() || !pValue) | 
| 302     return FALSE; | 294     return FALSE; | 
| 303   const FX_CHAR* name = utf8Name.c_str(); | 295   const FX_CHAR* name = utf8Name.c_str(); | 
| 304   v8::Isolate* pIsolate = GetIsolate(); | 296   v8::Isolate* pIsolate = GetIsolate(); | 
| 305   v8::Locker lock(pIsolate); |  | 
| 306   v8::Isolate::Scope isolate_scope(pIsolate); | 297   v8::Isolate::Scope isolate_scope(pIsolate); | 
| 307   v8::HandleScope handle_scope(pIsolate); | 298   v8::HandleScope handle_scope(pIsolate); | 
| 308   v8::Local<v8::Context> context = | 299   v8::Local<v8::Context> context = | 
| 309       v8::Local<v8::Context>::New(pIsolate, m_context); | 300       v8::Local<v8::Context>::New(pIsolate, m_context); | 
| 310   v8::Context::Scope context_scope(context); | 301   v8::Context::Scope context_scope(context); | 
| 311 | 302 | 
| 312   // v8::Local<v8::Context> tmpCotext = | 303   // v8::Local<v8::Context> tmpCotext = | 
| 313   // v8::Local<v8::Context>::New(GetIsolate(), m_context); | 304   // v8::Local<v8::Context>::New(GetIsolate(), m_context); | 
| 314   v8::Local<v8::Value> propvalue = | 305   v8::Local<v8::Value> propvalue = | 
| 315       v8::Local<v8::Value>::New(GetIsolate(), pValue->DirectGetValue()); | 306       v8::Local<v8::Value>::New(GetIsolate(), pValue->DirectGetValue()); | 
| 316   context->Global()->Set( | 307   context->Global()->Set( | 
| 317       v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, | 308       v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, | 
| 318                               utf8Name.GetLength()), | 309                               utf8Name.GetLength()), | 
| 319       propvalue); | 310       propvalue); | 
| 320 #endif | 311 #endif | 
| 321   return TRUE; | 312   return TRUE; | 
| 322 } | 313 } | 
| 323 | 314 | 
| 324 #endif | 315 #endif | 
| 325 void CJS_Runtime::AddObserver(Observer* observer) { | 316 void CJS_Runtime::AddObserver(Observer* observer) { | 
| 326   ASSERT(!pdfium::ContainsKey(m_observers, observer)); | 317   ASSERT(!pdfium::ContainsKey(m_observers, observer)); | 
| 327   m_observers.insert(observer); | 318   m_observers.insert(observer); | 
| 328 } | 319 } | 
| 329 | 320 | 
| 330 void CJS_Runtime::RemoveObserver(Observer* observer) { | 321 void CJS_Runtime::RemoveObserver(Observer* observer) { | 
| 331   ASSERT(pdfium::ContainsKey(m_observers, observer)); | 322   ASSERT(pdfium::ContainsKey(m_observers, observer)); | 
| 332   m_observers.erase(observer); | 323   m_observers.erase(observer); | 
| 333 } | 324 } | 
| OLD | NEW | 
|---|