summaryrefslogtreecommitdiff
path: root/fpdfsdk/include
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-09-15 14:03:52 -0700
committerTom Sepez <tsepez@chromium.org>2015-09-15 14:03:52 -0700
commit09ed30750282bf56a92d0e646ab22c64bea81a36 (patch)
tree919cf39ff0c0688589a9db2521bce07abf16ed8f /fpdfsdk/include
parent72d51871ae152163eeb9b005fd0a74d5c1651cd2 (diff)
downloadpdfium-09ed30750282bf56a92d0e646ab22c64bea81a36.tar.xz
Refactor fxjs_v8 and add embeddertests for it.
This forces the layer defined by fxjs_v8.h to be (more) self-contained, so that it can be tested apart from the CJS_* objects (in fpdfsdk/{src,include}/javascript. This implies the array buffer allocator must be part of fxjs_v8. One wrinkle is that we'd like to be able to test an isolate upon which no native objects have been added, so some initialization that would have occurred as part of object definition must be made explicit. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1338073002 .
Diffstat (limited to 'fpdfsdk/include')
-rw-r--r--fpdfsdk/include/javascript/IJavaScript.h4
-rw-r--r--fpdfsdk/include/javascript/JS_Runtime.h10
-rw-r--r--fpdfsdk/include/jsapi/fxjs_v8.h30
3 files changed, 28 insertions, 16 deletions
diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h
index 3524a5b8ff..47e4c17faf 100644
--- a/fpdfsdk/include/javascript/IJavaScript.h
+++ b/fpdfsdk/include/javascript/IJavaScript.h
@@ -146,7 +146,7 @@ class IFXJS_Runtime {
class CJS_RuntimeFactory {
public:
- CJS_RuntimeFactory() : m_bInit(FALSE), m_nRef(0) {}
+ CJS_RuntimeFactory() : m_bInit(false), m_nRef(0) {}
~CJS_RuntimeFactory();
IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp);
@@ -155,7 +155,7 @@ class CJS_RuntimeFactory {
void Release();
private:
- FX_BOOL m_bInit;
+ bool m_bInit;
int m_nRef;
};
diff --git a/fpdfsdk/include/javascript/JS_Runtime.h b/fpdfsdk/include/javascript/JS_Runtime.h
index 5ae6f1bc79..9d1927f192 100644
--- a/fpdfsdk/include/javascript/JS_Runtime.h
+++ b/fpdfsdk/include/javascript/JS_Runtime.h
@@ -15,12 +15,6 @@
class CJS_Context;
-class CJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
- void* Allocate(size_t length) override;
- void* AllocateUninitialized(size_t length) override;
- void Free(void* data, size_t length) override;
-};
-
class CJS_FieldEvent {
public:
CFX_WideString sTargetName;
@@ -30,7 +24,7 @@ class CJS_FieldEvent {
class CJS_Runtime : public IFXJS_Runtime {
public:
- CJS_Runtime(CPDFDoc_Environment* pApp);
+ explicit CJS_Runtime(CPDFDoc_Environment* pApp);
~CJS_Runtime() override;
// IFXJS_Runtime
@@ -65,7 +59,7 @@ class CJS_Runtime : public IFXJS_Runtime {
CJS_FieldEvent* m_pFieldEventPath;
v8::Isolate* m_isolate;
bool m_isolateManaged;
- nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
+ nonstd::unique_ptr<JS_ArrayBufferAllocator> m_pArrayBufferAllocator;
v8::Global<v8::Context> m_context;
};
diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h
index 4195686731..6e4fc6f7a7 100644
--- a/fpdfsdk/include/jsapi/fxjs_v8.h
+++ b/fpdfsdk/include/jsapi/fxjs_v8.h
@@ -45,14 +45,30 @@ extern const wchar_t kFXJSValueNameFxobj[];
extern const wchar_t kFXJSValueNameNull[];
extern const wchar_t kFXJSValueNameUndefined[];
+// FXJS_V8 places no interpretation on these two classes; it merely
+// passes them on to the caller-provided LP_CONSTRUCTORs.
class IFXJS_Context;
class IFXJS_Runtime;
+class JS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+ void* Allocate(size_t length) override;
+ void* AllocateUninitialized(size_t length) override;
+ void Free(void* data, size_t length) override;
+};
+
typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc,
v8::Local<v8::Object> obj,
v8::Local<v8::Object> global);
typedef void (*LP_DESTRUCTOR)(v8::Local<v8::Object> obj);
+// Call before making JS_PrepareIsolate call.
+void JS_Initialize(unsigned int embedderDataSlot);
+void JS_Release();
+
+// Call before making JS_Define* calls. Resources allocated here are cleared
+// as part of JS_ReleaseRuntime().
+void JS_PrepareIsolate(v8::Isolate* pIsolate);
+
// Always returns a valid, newly-created objDefnID.
int JS_DefineObj(v8::Isolate* pIsolate,
const wchar_t* sObjName,
@@ -86,19 +102,21 @@ void JS_DefineGlobalConst(v8::Isolate* pIsolate,
const wchar_t* sConstName,
v8::Local<v8::Value> pDefault);
-void JS_InitialRuntime(v8::Isolate* pIsolate,
- IFXJS_Runtime* pFXRuntime,
- IFXJS_Context* context,
- v8::Global<v8::Context>& v8PersistentContext);
+// Called after JS_Define* calls made.
+void JS_InitializeRuntime(v8::Isolate* pIsolate,
+ IFXJS_Runtime* pFXRuntime,
+ IFXJS_Context* context,
+ v8::Global<v8::Context>& v8PersistentContext);
void JS_ReleaseRuntime(v8::Isolate* pIsolate,
v8::Global<v8::Context>& v8PersistentContext);
-void JS_Initial(unsigned int embedderDataSlot);
-void JS_Release();
+
+// Called after JS_InitializeRuntime call made.
int JS_Execute(v8::Isolate* pIsolate,
IFXJS_Context* pJSContext,
const wchar_t* script,
long length,
FXJSErr* perror);
+
v8::Local<v8::Object> JS_NewFxDynamicObj(v8::Isolate* pIsolate,
IFXJS_Context* pJSContext,
int nObjDefnID);