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

Unified Diff: fxjs/include/fxjs_v8.h

Issue 2245863002: Push v8::Isolate into CFXJS_Engine class (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Null isolate before letting CFXJS_Engine dtor invoked 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « fxjs/fxjs_v8_embeddertest.cpp ('k') | testing/js_embedder_test.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fxjs/include/fxjs_v8.h
diff --git a/fxjs/include/fxjs_v8.h b/fxjs/include/fxjs_v8.h
index 52afc491b233ce2a1280174cbbeb5a23a4a3a35d..7c4a9070f82c0e46f50375f58429bd253546ca52 100644
--- a/fxjs/include/fxjs_v8.h
+++ b/fxjs/include/fxjs_v8.h
@@ -125,25 +125,9 @@ class FXJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
void Free(void* data, size_t length) override;
};
-using FXJS_CONSTRUCTOR = void (*)(CFXJS_Engine* fxjs,
- v8::Local<v8::Object> obj);
-using FXJS_DESTRUCTOR = void (*)(v8::Local<v8::Object> obj);
-
void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate);
void FXJS_Release();
-class CFXJS_Engine {
- public:
- CFXJS_Engine();
- ~CFXJS_Engine();
-
- protected:
- v8::Isolate* m_isolate;
- v8::Global<v8::Context> m_context;
- std::vector<v8::Global<v8::Object>*> m_StaticObjects;
- std::map<CFX_WideString, v8::Global<v8::Array>> m_ConstArrays;
-};
-
// Gets the global isolate set by FXJS_Initialize(), or makes a new one each
// time if there is no such isolate. Returns true if a new isolate had to be
// created.
@@ -152,140 +136,133 @@ bool FXJS_GetIsolate(v8::Isolate** pResultIsolate);
// Get the global isolate's ref count.
size_t FXJS_GlobalIsolateRefCount();
-// Always returns a valid, newly-created objDefnID.
-int FXJS_DefineObj(v8::Isolate* pIsolate,
- const wchar_t* sObjName,
- FXJSOBJTYPE eObjType,
- FXJS_CONSTRUCTOR pConstructor,
- FXJS_DESTRUCTOR pDestructor);
+class CFXJS_Engine {
+ public:
+ CFXJS_Engine();
+ ~CFXJS_Engine();
+
+ using Constructor = void (*)(CFXJS_Engine* pEngine,
+ v8::Local<v8::Object> obj);
+ using Destructor = void (*)(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj);
-void FXJS_DefineObjMethod(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sMethodName,
- v8::FunctionCallback pMethodCall);
-void FXJS_DefineObjProperty(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sPropName,
- v8::AccessorGetterCallback pPropGet,
- v8::AccessorSetterCallback pPropPut);
-void FXJS_DefineObjAllProperties(v8::Isolate* pIsolate,
- int nObjDefnID,
- v8::NamedPropertyQueryCallback pPropQurey,
- v8::NamedPropertyGetterCallback pPropGet,
- v8::NamedPropertySetterCallback pPropPut,
- v8::NamedPropertyDeleterCallback pPropDel);
-void FXJS_DefineObjConst(v8::Isolate* pIsolate,
- int nObjDefnID,
- const wchar_t* sConstName,
- v8::Local<v8::Value> pDefault);
-void FXJS_DefineGlobalMethod(v8::Isolate* pIsolate,
- const wchar_t* sMethodName,
- v8::FunctionCallback pMethodCall);
-void FXJS_DefineGlobalConst(v8::Isolate* pIsolate,
- const wchar_t* sConstName,
- v8::FunctionCallback pConstGetter);
-
-// Called after FXJS_Define* calls made.
-void FXJS_InitializeEngine(
- v8::Isolate* pIsolate,
- CFXJS_Engine* pEngine,
- v8::Global<v8::Context>* pV8PersistentContext,
- std::vector<v8::Global<v8::Object>*>* pStaticObjects);
-void FXJS_ReleaseEngine(v8::Isolate* pIsolate,
- v8::Global<v8::Context>* pV8PersistentContext,
- std::vector<v8::Global<v8::Object>*>* pStaticObjects);
-CFXJS_Engine* FXJS_GetCurrentEngineFromIsolate(v8::Isolate* pIsolate);
+ static CFXJS_Engine* CurrentEngineFromIsolate(v8::Isolate* pIsolate);
+ static int GetObjDefnID(v8::Local<v8::Object> pObj);
#ifdef PDF_ENABLE_XFA
-// Called as part of FXJS_InitializeEngine, exposed so PDF can make its
-// own contexts compatible with XFA or vice versa.
-void FXJS_SetEngineForV8Context(v8::Local<v8::Context> v8Context,
- CFXJS_Engine* pEngine);
+ // Called as part of FXJS_InitializeEngine, exposed so PDF can make its
+ // own contexts compatible with XFA or vice versa.
+ static void SetForV8Context(v8::Local<v8::Context> v8Context,
+ CFXJS_Engine* pEngine);
#endif // PDF_ENABLE_XFA
-// Called after FXJS_InitializeEngine call made.
-int FXJS_Execute(v8::Isolate* pIsolate,
- const CFX_WideString& script,
- FXJSErr* perror);
-
-v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate,
- CFXJS_Engine* pEngine,
- int nObjDefnID,
- bool bStatic = false);
-v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate);
-int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj);
-
-void FXJS_SetPrivate(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- void* p);
-void* FXJS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj);
-void FXJS_FreePrivate(void* p);
-void FXJS_FreePrivate(v8::Local<v8::Object> pObj);
-void FXJS_Error(v8::Isolate* isolate, const CFX_WideString& message);
-
-v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate,
- const CFX_WideString& wsPropertyName);
-
-std::vector<CFX_WideString> FXJS_GetObjectPropertyNames(
- v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj);
-v8::Local<v8::Value> FXJS_GetObjectProperty(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName);
-
-unsigned FXJS_GetArrayLength(v8::Local<v8::Array> pArray);
-v8::Local<v8::Value> FXJS_GetArrayElement(v8::Isolate* pIsolate,
- v8::Local<v8::Array> pArray,
- unsigned index);
-
-void FXJS_PutObjectString(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& wsPropertyName,
- const CFX_WideString& wsValue);
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName,
- int nValue);
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName,
- float fValue);
-void FXJS_PutObjectNumber(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName,
- double dValue);
-void FXJS_PutObjectBoolean(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName,
- bool bValue);
-void FXJS_PutObjectObject(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName,
- v8::Local<v8::Object> pPut);
-void FXJS_PutObjectNull(v8::Isolate* pIsolate,
- v8::Local<v8::Object> pObj,
- const CFX_WideString& PropertyName);
-unsigned FXJS_PutArrayElement(v8::Isolate* pIsolate,
- v8::Local<v8::Array> pArray,
- unsigned index,
- v8::Local<v8::Value> pValue);
-
-v8::Local<v8::Value> FXJS_NewNull(v8::Isolate* pIsolate);
-v8::Local<v8::Array> FXJS_NewArray(v8::Isolate* pIsolate);
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, int number);
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, double number);
-v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, float number);
-v8::Local<v8::Value> FXJS_NewBoolean(v8::Isolate* pIsolate, bool b);
-v8::Local<v8::Value> FXJS_NewString(v8::Isolate* pIsolate, const wchar_t* str);
-v8::Local<v8::Date> FXJS_NewDate(v8::Isolate* pIsolate, double d);
-
-int FXJS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
-bool FXJS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
-double FXJS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
-v8::Local<v8::Object> FXJS_ToObject(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue);
-CFX_WideString FXJS_ToString(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue);
-v8::Local<v8::Array> FXJS_ToArray(v8::Isolate* pIsolate,
- v8::Local<v8::Value> pValue);
+ // TODO(tsepez): to constructor.
+ void SetIsolate(v8::Isolate* pIsolate) { m_isolate = pIsolate; }
+ v8::Isolate* GetIsolate() const { return m_isolate; }
+
+ // Always returns a valid, newly-created objDefnID.
+ int DefineObj(const wchar_t* sObjName,
+ FXJSOBJTYPE eObjType,
+ Constructor pConstructor,
+ Destructor pDestructor);
+
+ void DefineObjMethod(int nObjDefnID,
+ const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall);
+ void DefineObjProperty(int nObjDefnID,
+ const wchar_t* sPropName,
+ v8::AccessorGetterCallback pPropGet,
+ v8::AccessorSetterCallback pPropPut);
+ void DefineObjAllProperties(int nObjDefnID,
+ v8::NamedPropertyQueryCallback pPropQurey,
+ v8::NamedPropertyGetterCallback pPropGet,
+ v8::NamedPropertySetterCallback pPropPut,
+ v8::NamedPropertyDeleterCallback pPropDel);
+ void DefineObjConst(int nObjDefnID,
+ const wchar_t* sConstName,
+ v8::Local<v8::Value> pDefault);
+ void DefineGlobalMethod(const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall);
+ void DefineGlobalConst(const wchar_t* sConstName,
+ v8::FunctionCallback pConstGetter);
+
+ // Called after FXJS_Define* calls made.
+ void InitializeEngine();
+ void ReleaseEngine();
+
+ // Called after FXJS_InitializeEngine call made.
+ int Execute(const CFX_WideString& script, FXJSErr* perror);
+
+ v8::Local<v8::Context> NewLocalContext();
+ v8::Local<v8::Context> GetPersistentContext();
+
+ v8::Local<v8::Value> NewNull();
+ v8::Local<v8::Array> NewArray();
+ v8::Local<v8::Value> NewNumber(int number);
+ v8::Local<v8::Value> NewNumber(double number);
+ v8::Local<v8::Value> NewNumber(float number);
+ v8::Local<v8::Value> NewBoolean(bool b);
+ v8::Local<v8::Value> NewString(const wchar_t* str);
+ v8::Local<v8::Date> NewDate(double d);
+ v8::Local<v8::Object> NewFxDynamicObj(int nObjDefnID, bool bStatic = false);
+
+ v8::Local<v8::Object> GetThisObj();
+ int ToInt32(v8::Local<v8::Value> pValue);
+ bool ToBoolean(v8::Local<v8::Value> pValue);
+ double ToNumber(v8::Local<v8::Value> pValue);
+ CFX_WideString ToString(v8::Local<v8::Value> pValue);
+ v8::Local<v8::Object> ToObject(v8::Local<v8::Value> pValue);
+ v8::Local<v8::Array> ToArray(v8::Local<v8::Value> pValue);
+
+ unsigned GetArrayLength(v8::Local<v8::Array> pArray);
+ v8::Local<v8::Value> GetArrayElement(v8::Local<v8::Array> pArray,
+ unsigned index);
+ unsigned PutArrayElement(v8::Local<v8::Array> pArray,
+ unsigned index,
+ v8::Local<v8::Value> pValue);
+
+ std::vector<CFX_WideString> GetObjectPropertyNames(
+ v8::Local<v8::Object> pObj);
+ v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName);
+
+ void PutObjectString(v8::Local<v8::Object> pObj,
+ const CFX_WideString& wsPropertyName,
+ const CFX_WideString& wsValue);
+ void PutObjectNumber(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName,
+ int nValue);
+ void PutObjectNumber(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName,
+ float fValue);
+ void PutObjectNumber(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName,
+ double dValue);
+ void PutObjectBoolean(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName,
+ bool bValue);
+ void PutObjectObject(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName,
+ v8::Local<v8::Object> pPut);
+ void PutObjectNull(v8::Local<v8::Object> pObj,
+ const CFX_WideString& PropertyName);
+
+ // Native object binding.
+ void SetObjectPrivate(v8::Local<v8::Object> pObj, void* p);
+ void* GetObjectPrivate(v8::Local<v8::Object> pObj);
+ static void FreeObjectPrivate(void* p);
+ static void FreeObjectPrivate(v8::Local<v8::Object> pObj);
+
+ void SetConstArray(const CFX_WideString& name, v8::Local<v8::Array> array);
+ v8::Local<v8::Array> GetConstArray(const CFX_WideString& name);
+
+ v8::Local<v8::String> WSToJSString(const CFX_WideString& wsPropertyName);
+ void Error(const CFX_WideString& message);
+
+ private:
+ v8::Isolate* m_isolate;
+ v8::Global<v8::Context> m_V8PersistentContext;
+ std::vector<v8::Global<v8::Object>*> m_StaticObjects;
+ std::map<CFX_WideString, v8::Global<v8::Array>> m_ConstArrays;
+};
+
#endif // FXJS_INCLUDE_FXJS_V8_H_
« no previous file with comments | « fxjs/fxjs_v8_embeddertest.cpp ('k') | testing/js_embedder_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698