Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: fpdfsdk/javascript/cjs_runtime.cpp

Issue 2241483004: Move some v8 objects from CJS back into FXJS (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Chromium style rules Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 return new CJS_Runtime(pEnv); 49 return new CJS_Runtime(pEnv);
50 } 50 }
51 51
52 // static 52 // static
53 CJS_Runtime* CJS_Runtime::FromContext(const IJS_Context* cc) { 53 CJS_Runtime* CJS_Runtime::FromContext(const IJS_Context* cc) {
54 const CJS_Context* pContext = static_cast<const CJS_Context*>(cc); 54 const CJS_Context* pContext = static_cast<const CJS_Context*>(cc);
55 return pContext->GetJSRuntime(); 55 return pContext->GetJSRuntime();
56 } 56 }
57 57
58 CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) 58 CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp)
59 : m_pApp(pApp), 59 : m_pApp(pApp), m_pDocument(nullptr), m_bBlocking(FALSE) {
60 m_pDocument(nullptr),
61 m_bBlocking(FALSE),
62 m_isolate(nullptr),
63 m_isolateManaged(false) {
64 #ifndef PDF_ENABLE_XFA 60 #ifndef PDF_ENABLE_XFA
65 IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform; 61 IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform;
66 if (pPlatform->version <= 2) { 62 if (pPlatform->version <= 2) {
67 unsigned int embedderDataSlot = 0; 63 unsigned int embedderDataSlot = 0;
68 v8::Isolate* pExternalIsolate = nullptr; 64 v8::Isolate* pExternalIsolate = nullptr;
69 if (pPlatform->version == 2) { 65 if (pPlatform->version == 2) {
70 pExternalIsolate = reinterpret_cast<v8::Isolate*>(pPlatform->m_isolate); 66 pExternalIsolate = reinterpret_cast<v8::Isolate*>(pPlatform->m_isolate);
71 embedderDataSlot = pPlatform->m_v8EmbedderSlot; 67 embedderDataSlot = pPlatform->m_v8EmbedderSlot;
72 } 68 }
73 FXJS_Initialize(embedderDataSlot, pExternalIsolate); 69 FXJS_Initialize(embedderDataSlot, pExternalIsolate);
(...skipping 15 matching lines...) Expand all
89 FXJS_Initialize(embedderDataSlot, pExternalIsolate); 85 FXJS_Initialize(embedderDataSlot, pExternalIsolate);
90 } 86 }
91 m_isolateManaged = FXJS_GetIsolate(&m_isolate); 87 m_isolateManaged = FXJS_GetIsolate(&m_isolate);
92 } 88 }
93 89
94 v8::Isolate* isolate = m_isolate; 90 v8::Isolate* isolate = m_isolate;
95 v8::Isolate::Scope isolate_scope(isolate); 91 v8::Isolate::Scope isolate_scope(isolate);
96 v8::HandleScope handle_scope(isolate); 92 v8::HandleScope handle_scope(isolate);
97 if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) { 93 if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) {
98 CJS_Context* pContext = (CJS_Context*)NewContext(); 94 CJS_Context* pContext = (CJS_Context*)NewContext();
99 FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); 95 FXJS_InitializeEngine(GetIsolate(), this, &m_context, &m_StaticObjects);
100 ReleaseContext(pContext); 96 ReleaseContext(pContext);
101 return; 97 return;
102 } 98 }
103 #endif 99 #endif
104 100
105 if (m_isolateManaged || FXJS_GlobalIsolateRefCount() == 0) 101 if (m_isolateManaged || FXJS_GlobalIsolateRefCount() == 0)
106 DefineJSObjects(); 102 DefineJSObjects();
107 103
108 #ifdef PDF_ENABLE_XFA 104 #ifdef PDF_ENABLE_XFA
109 CPDFXFA_App::GetInstance()->SetJavaScriptInitialized(TRUE); 105 CPDFXFA_App::GetInstance()->SetJavaScriptInitialized(TRUE);
110 #endif 106 #endif
111 107
112 CJS_Context* pContext = (CJS_Context*)NewContext(); 108 CJS_Context* pContext = (CJS_Context*)NewContext();
113 FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); 109 FXJS_InitializeEngine(GetIsolate(), this, &m_context, &m_StaticObjects);
114 ReleaseContext(pContext); 110 ReleaseContext(pContext);
115 } 111 }
116 112
117 CJS_Runtime::~CJS_Runtime() { 113 CJS_Runtime::~CJS_Runtime() {
118 for (auto* obs : m_observers) 114 for (auto* obs : m_observers)
119 obs->OnDestroyed(); 115 obs->OnDestroyed();
120 116
121 m_ContextArray.clear(); 117 m_ContextArray.clear();
122 m_ConstArrays.clear(); 118 m_ConstArrays.clear();
123 FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); 119 FXJS_ReleaseEngine(GetIsolate(), &m_context, &m_StaticObjects);
124 m_context.Reset(); 120 m_context.Reset();
125 if (m_isolateManaged) 121 if (m_isolateManaged)
126 m_isolate->Dispose(); 122 m_isolate->Dispose();
127 } 123 }
128 124
129 void CJS_Runtime::DefineJSObjects() { 125 void CJS_Runtime::DefineJSObjects() {
130 v8::Isolate::Scope isolate_scope(GetIsolate()); 126 v8::Isolate::Scope isolate_scope(GetIsolate());
131 v8::HandleScope handle_scope(GetIsolate()); 127 v8::HandleScope handle_scope(GetIsolate());
132 v8::Local<v8::Context> context = v8::Context::New(GetIsolate()); 128 v8::Local<v8::Context> context = v8::Context::New(GetIsolate());
133 v8::Context::Scope context_scope(context); 129 v8::Context::Scope context_scope(context);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 v8::Local<v8::Context>::New(GetIsolate(), m_context); 273 v8::Local<v8::Context>::New(GetIsolate(), m_context);
278 v8::Context::Scope context_scope(context); 274 v8::Context::Scope context_scope(context);
279 275
280 // Caution: We're about to hand to XFA an object that in order to invoke 276 // Caution: We're about to hand to XFA an object that in order to invoke
281 // methods will require that the current v8::Context always has a pointer 277 // methods will require that the current v8::Context always has a pointer
282 // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates 278 // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates
283 // its own v8::Context which has not initialized the embedder data slot. 279 // its own v8::Context which has not initialized the embedder data slot.
284 // Do so now. 280 // Do so now.
285 // TODO(tsepez): redesign PDF-side objects to not rely on v8::Context's 281 // TODO(tsepez): redesign PDF-side objects to not rely on v8::Context's
286 // embedder data slots, and/or to always use the right context. 282 // embedder data slots, and/or to always use the right context.
287 FXJS_SetRuntimeForV8Context(old_context, this); 283 FXJS_SetEngineForV8Context(old_context, this);
288 284
289 v8::Local<v8::Value> propvalue = 285 v8::Local<v8::Value> propvalue =
290 context->Global()->Get(v8::String::NewFromUtf8( 286 context->Global()->Get(v8::String::NewFromUtf8(
291 GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength())); 287 GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength()));
292 288
293 if (propvalue.IsEmpty()) { 289 if (propvalue.IsEmpty()) {
294 pValue->SetUndefined(); 290 pValue->SetUndefined();
295 return FALSE; 291 return FALSE;
296 } 292 }
297 pValue->ForceSetValue(propvalue); 293 pValue->ForceSetValue(propvalue);
(...skipping 15 matching lines...) Expand all
313 // v8::Local<v8::Context>::New(GetIsolate(), m_context); 309 // v8::Local<v8::Context>::New(GetIsolate(), m_context);
314 v8::Local<v8::Value> propvalue = 310 v8::Local<v8::Value> propvalue =
315 v8::Local<v8::Value>::New(GetIsolate(), pValue->DirectGetValue()); 311 v8::Local<v8::Value>::New(GetIsolate(), pValue->DirectGetValue());
316 context->Global()->Set( 312 context->Global()->Set(
317 v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, 313 v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString,
318 utf8Name.GetLength()), 314 utf8Name.GetLength()),
319 propvalue); 315 propvalue);
320 return TRUE; 316 return TRUE;
321 } 317 }
322 #endif 318 #endif
OLDNEW
« no previous file with comments | « fpdfsdk/javascript/cjs_runtime.h ('k') | fxjs/fxjs_v8.cpp » ('j') | fxjs/include/fxjs_v8.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698