• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "fxjs/ijs_runtime.h"
6 
7 #include "fxjs/cjs_runtimestub.h"
8 
9 #ifdef PDF_ENABLE_V8
10 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
11 #include "fxjs/cfxjs_engine.h"
12 #include "fxjs/cjs_runtime.h"
13 #include "fxjs/global_timer.h"
14 #ifdef PDF_ENABLE_XFA
15 #include "fxjs/gc/heap.h"
16 #endif  // PDF_ENABLE_XFA
17 #endif  // PDF_ENABLE_V8
18 
ScopedEventContext(IJS_Runtime * pRuntime)19 IJS_Runtime::ScopedEventContext::ScopedEventContext(IJS_Runtime* pRuntime)
20     : m_pRuntime(pRuntime), m_pContext(pRuntime->NewEventContext()) {}
21 
~ScopedEventContext()22 IJS_Runtime::ScopedEventContext::~ScopedEventContext() {
23   m_pRuntime->ReleaseEventContext(m_pContext.ExtractAsDangling());
24 }
25 
26 // static
Initialize(unsigned int slot,void * isolate,void * platform)27 void IJS_Runtime::Initialize(unsigned int slot, void* isolate, void* platform) {
28 #ifdef PDF_ENABLE_V8
29   GlobalTimer::InitializeGlobals();
30   FXJS_Initialize(slot, static_cast<v8::Isolate*>(isolate));
31 #ifdef PDF_ENABLE_XFA
32   FXGC_Initialize(static_cast<v8::Platform*>(platform),
33                   static_cast<v8::Isolate*>(isolate));
34 #endif  // PDF_ENABLE_XFA
35 #endif  // PDF_ENABLE_V8
36 }
37 
38 // static
Destroy()39 void IJS_Runtime::Destroy() {
40 #ifdef PDF_ENABLE_V8
41 #ifdef PDF_ENABLE_XFA
42   FXGC_Release();
43 #endif  // PDF_ENABLE_XFA
44   FXJS_Release();
45   GlobalTimer::DestroyGlobals();
46 #endif  // PDF_ENABLE_V8
47 }
48 
49 // static
Create(CPDFSDK_FormFillEnvironment * pFormFillEnv)50 std::unique_ptr<IJS_Runtime> IJS_Runtime::Create(
51     CPDFSDK_FormFillEnvironment* pFormFillEnv) {
52 #ifdef PDF_ENABLE_V8
53   if (pFormFillEnv->IsJSPlatformPresent())
54     return std::make_unique<CJS_Runtime>(pFormFillEnv);
55 #endif
56   return std::make_unique<CJS_RuntimeStub>(pFormFillEnv);
57 }
58 
59 IJS_Runtime::~IJS_Runtime() = default;
60 
JS_Error(int line,int column,const WideString & exception)61 IJS_Runtime::JS_Error::JS_Error(int line,
62                                 int column,
63                                 const WideString& exception)
64     : line(line), column(column), exception(exception) {}
65