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

Side by Side Diff: fxjse/include/fxjs_perisolatedata.h

Issue 2053043002: Untangle bad depdenency from fxjse/ to fpdfsdk/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@move_fxjse
Patch Set: Created 4 years, 6 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
« no previous file with comments | « fxjse/fxjs_perisolatedata.cpp ('k') | fxjse/runtime.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef FXJSE_INCLUDE_FXJS_PERISOLATEDATA_H_
8 #define FXJSE_INCLUDE_FXJS_PERISOLATEDATA_H_
9
10 #include <v8-util.h>
11 #include <v8.h>
12
13 #include "core/fxcrt/include/fx_string.h"
14
15 class CFXJSE_RuntimeData;
16 class CFXJS_ObjDefinition;
17 class IJS_Runtime; // A native runtime, typically owns the v8::Context.
18
19 using FXJS_CONSTRUCTOR = void (*)(IJS_Runtime* cc, v8::Local<v8::Object> obj);
20 using FXJS_DESTRUCTOR = void (*)(v8::Local<v8::Object> obj);
21
22 enum FXJSOBJTYPE {
23 FXJSOBJTYPE_DYNAMIC = 0, // Created by native method and returned to JS.
24 FXJSOBJTYPE_STATIC, // Created by init and hung off of global object.
25 FXJSOBJTYPE_GLOBAL, // The global object itself (may only appear once).
26 };
27
28 // Global weak map to save dynamic objects.
29 class V8TemplateMapTraits : public v8::StdMapTraits<void*, v8::Object> {
30 public:
31 typedef v8::GlobalValueMap<void*, v8::Object, V8TemplateMapTraits> MapType;
32 typedef void WeakCallbackDataType;
33
34 static WeakCallbackDataType* WeakCallbackParameter(
35 MapType* map,
36 void* key,
37 const v8::Local<v8::Object>& value) {
38 return key;
39 }
40 static MapType* MapFromWeakCallbackInfo(
41 const v8::WeakCallbackInfo<WeakCallbackDataType>&);
42
43 static void* KeyFromWeakCallbackInfo(
44 const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {
45 return data.GetParameter();
46 }
47 static const v8::PersistentContainerCallbackType kCallbackType =
48 v8::kWeakWithInternalFields;
49 static void DisposeWeak(
50 const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {}
51 static void OnWeakCallback(
52 const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {}
53 static void Dispose(v8::Isolate* isolate,
54 v8::Global<v8::Object> value,
55 void* key);
56 static void DisposeCallbackData(WeakCallbackDataType* callbackData) {}
57 };
58
59 class V8TemplateMap {
60 public:
61 typedef v8::GlobalValueMap<void*, v8::Object, V8TemplateMapTraits> MapType;
62
63 void set(void* key, v8::Local<v8::Object> handle) {
64 ASSERT(!m_map.Contains(key));
65 m_map.Set(key, handle);
66 }
67 explicit V8TemplateMap(v8::Isolate* isolate) : m_map(isolate) {}
68 friend class V8TemplateMapTraits;
69
70 private:
71 MapType m_map;
72 };
73
74 class FXJS_PerIsolateData {
75 public:
76 static void SetEmbedderDataSlot(unsigned int slot);
77 static unsigned int EmbedderDataSlot();
78
79 static void SetUp(v8::Isolate* pIsolate);
80 static FXJS_PerIsolateData* Get(v8::Isolate* pIsolate);
81
82 void CreateDynamicObjsMap(v8::Isolate* pIsolate) {
83 if (!m_pDynamicObjsMap)
84 m_pDynamicObjsMap = new V8TemplateMap(pIsolate);
85 }
86 void ReleaseDynamicObjsMap() {
87 delete m_pDynamicObjsMap;
88 m_pDynamicObjsMap = nullptr;
89 }
90
91 std::vector<CFXJS_ObjDefinition*> m_ObjectDefnArray;
92 #ifdef PDF_ENABLE_XFA
93 CFXJSE_RuntimeData* m_pFXJSERuntimeData;
94 #endif // PDF_ENABLE_XFA
95 V8TemplateMap* m_pDynamicObjsMap;
96
97 protected:
98 #ifndef PDF_ENABLE_XFA
99 FXJS_PerIsolateData() : m_pDynamicObjsMap(nullptr) {}
100 #else // PDF_ENABLE_XFA
101 FXJS_PerIsolateData()
102 : m_pFXJSERuntimeData(nullptr), m_pDynamicObjsMap(nullptr) {}
103 #endif // PDF_ENABLE_XFA
104 };
105
106 class CFXJS_ObjDefinition {
107 public:
108 static int MaxID(v8::Isolate* pIsolate) {
109 return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray.size();
110 }
111
112 static CFXJS_ObjDefinition* ForID(v8::Isolate* pIsolate, int id) {
113 // Note: GetAt() halts if out-of-range even in release builds.
114 return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray[id];
115 }
116
117 CFXJS_ObjDefinition(v8::Isolate* isolate,
118 const wchar_t* sObjName,
119 FXJSOBJTYPE eObjType,
120 FXJS_CONSTRUCTOR pConstructor,
121 FXJS_DESTRUCTOR pDestructor)
122 : m_ObjName(sObjName),
123 m_ObjType(eObjType),
124 m_pConstructor(pConstructor),
125 m_pDestructor(pDestructor),
126 m_pIsolate(isolate) {
127 v8::Isolate::Scope isolate_scope(isolate);
128 v8::HandleScope handle_scope(isolate);
129
130 v8::Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(isolate);
131 fun->InstanceTemplate()->SetInternalFieldCount(2);
132 m_FunctionTemplate.Reset(isolate, fun);
133
134 v8::Local<v8::Signature> sig = v8::Signature::New(isolate, fun);
135 m_Signature.Reset(isolate, sig);
136 }
137
138 int AssignID() {
139 FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(m_pIsolate);
140 pData->m_ObjectDefnArray.push_back(this);
141 return pData->m_ObjectDefnArray.size() - 1;
142 }
143
144 v8::Local<v8::ObjectTemplate> GetInstanceTemplate() {
145 v8::EscapableHandleScope scope(m_pIsolate);
146 v8::Local<v8::FunctionTemplate> function =
147 m_FunctionTemplate.Get(m_pIsolate);
148 return scope.Escape(function->InstanceTemplate());
149 }
150
151 v8::Local<v8::Signature> GetSignature() {
152 v8::EscapableHandleScope scope(m_pIsolate);
153 return scope.Escape(m_Signature.Get(m_pIsolate));
154 }
155
156 const wchar_t* const m_ObjName;
157 const FXJSOBJTYPE m_ObjType;
158 const FXJS_CONSTRUCTOR m_pConstructor;
159 const FXJS_DESTRUCTOR m_pDestructor;
160
161 v8::Isolate* m_pIsolate;
162 v8::Global<v8::FunctionTemplate> m_FunctionTemplate;
163 v8::Global<v8::Signature> m_Signature;
164 };
165
166 #endif // FXJSE_INCLUDE_FXJS_PERISOLATEDATA_H_
OLDNEW
« no previous file with comments | « fxjse/fxjs_perisolatedata.cpp ('k') | fxjse/runtime.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698