diff options
author | Jochen Eisinger <jochen@chromium.org> | 2015-05-14 02:00:44 +0200 |
---|---|---|
committer | Jochen Eisinger <jochen@chromium.org> | 2015-05-14 02:00:44 +0200 |
commit | 1b8a296b5d1fdd7f6d7daa099f7feef869e05e5e (patch) | |
tree | b5abbe51992f6925bc9c3978d5444910e516c2ba /fpdfsdk/include | |
parent | 8aa1eac606d8e5030de6509f5d5d66e90db521f4 (diff) | |
download | pdfium-1b8a296b5d1fdd7f6d7daa099f7feef869e05e5e.tar.xz |
Use phantom handles instead of weak handles
Phantom handles allow for freeing objects with one pass of GC. However,
this means that by the time the callback is invoked, the v8 object already
does no longer exist. To avoid accidential access to the dead object, there
are now two callbacks, where the first must only reset the handle, and the
second does the clean-up work.
R=tsepez@chromium.org
BUG=
Review URL: https://codereview.chromium.org/1129253004
Diffstat (limited to 'fpdfsdk/include')
-rw-r--r-- | fpdfsdk/include/javascript/JS_Object.h | 1 | ||||
-rw-r--r-- | fpdfsdk/include/jsapi/fxjs_v8.h | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h index 72cd9904f5..acbff840f1 100644 --- a/fpdfsdk/include/javascript/JS_Object.h +++ b/fpdfsdk/include/javascript/JS_Object.h @@ -46,6 +46,7 @@ public: virtual ~CJS_Object(void); void MakeWeak(); + void Dispose(); virtual FX_BOOL IsType(FX_LPCSTR sClassName){return TRUE;}; virtual CFX_ByteString GetClassName(){return "";}; diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h index a32ace674b..7f23380406 100644 --- a/fpdfsdk/include/jsapi/fxjs_v8.h +++ b/fpdfsdk/include/jsapi/fxjs_v8.h @@ -82,6 +82,7 @@ void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj, v void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj); void JS_SetPrivate(v8::Handle<v8::Object> pObj, void* p); void* JS_GetPrivate(v8::Handle<v8::Object> pObj); +void JS_FreePrivate(void* p); void JS_FreePrivate(v8::Handle<v8::Object> pObj); v8::Handle<v8::Value> JS_GetObjectValue(v8::Handle<v8::Object> pObj); v8::Handle<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj,const wchar_t* PropertyName); |