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

Unified Diff: fpdfsdk/include/jsapi/fxjs_v8.h

Issue 1633083002: Fix memory leakage on Linux - part3 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 4 years, 11 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 | « no previous file | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('j') | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fpdfsdk/include/jsapi/fxjs_v8.h
diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h
index b0845a396f400209092a7a537130375732e6130f..06aaa95965df65bbae8470922870cadeeee042b0 100644
--- a/fpdfsdk/include/jsapi/fxjs_v8.h
+++ b/fpdfsdk/include/jsapi/fxjs_v8.h
@@ -15,6 +15,7 @@
#define FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_
#include <v8.h>
+#include <v8-util.h>
#include <vector>
@@ -45,6 +46,52 @@ struct FXJSErr {
unsigned linnum;
};
+// Global weak map to save dynamic objects.
+class V8TemplateMapTraits : public v8::StdMapTraits<void*, v8::Object> {
+ public:
+ typedef v8::GlobalValueMap<void*, v8::Object, V8TemplateMapTraits> MapType;
+ typedef void WeakCallbackDataType;
+
+ static WeakCallbackDataType* WeakCallbackParameter(
+ MapType* map,
+ void* key,
+ const v8::Local<v8::Object>& value) {
+ return key;
+ }
+ static MapType* MapFromWeakCallbackInfo(
+ const v8::WeakCallbackInfo<WeakCallbackDataType>&);
+
+ static void* KeyFromWeakCallbackInfo(
+ const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {
+ return data.GetParameter();
+ }
+ static const v8::PersistentContainerCallbackType kCallbackType =
+ v8::kWeakWithInternalFields;
+ static void DisposeWeak(
+ const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {}
+ static void OnWeakCallback(
+ const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {}
+ static void Dispose(v8::Isolate* isolate,
+ v8::Global<v8::Object> value,
+ void* key);
+ static void DisposeCallbackData(WeakCallbackDataType* callbackData) {}
+};
+
+class V8TemplateMap {
+ public:
+ typedef v8::GlobalValueMap<void*, v8::Object, V8TemplateMapTraits> MapType;
+
+ void set(void* key, v8::Local<v8::Object> handle) {
+ ASSERT(!m_map.Contains(key));
+ m_map.Set(key, handle);
+ }
+ explicit V8TemplateMap(v8::Isolate* isolate) : m_map(isolate) {}
+ friend class V8TemplateMapTraits;
+
+ private:
+ MapType m_map;
+};
+
class FXJS_PerIsolateData {
public:
static void SetUp(v8::Isolate* pIsolate);
@@ -54,12 +101,21 @@ class FXJS_PerIsolateData {
#ifdef PDF_ENABLE_XFA
CFXJSE_RuntimeData* m_pFXJSERuntimeData;
#endif // PDF_ENABLE_XFA
+ V8TemplateMap* m_pDynamicObjsMap;
Lei Zhang 2016/01/26 22:18:26 Can |m_pDynamicObjsMap| just be a std::unique_ptr
Jim Wang 2016/01/27 05:21:04 When m_pDynamicObjsMap is destroyed, it will visit
+ void CreateDynamicObjsMap(v8::Isolate* pIsolate) {
Lei Zhang 2016/01/26 22:18:26 Please put methods ahead of member variables.
Jim Wang 2016/01/27 05:21:04 Done.
+ m_pDynamicObjsMap = new V8TemplateMap(pIsolate);
+ }
+ void ReleaseDynamicObjsMap() {
+ delete m_pDynamicObjsMap;
+ m_pDynamicObjsMap = nullptr;
+ }
protected:
#ifndef PDF_ENABLE_XFA
- FXJS_PerIsolateData() {}
+ FXJS_PerIsolateData() : m_pDynamicObjsMap(nullptr) {}
#else // PDF_ENABLE_XFA
- FXJS_PerIsolateData() : m_pFXJSERuntimeData(nullptr) {}
+ FXJS_PerIsolateData()
+ : m_pFXJSERuntimeData(nullptr), m_pDynamicObjsMap(nullptr) {}
#endif // PDF_ENABLE_XFA
};
@@ -160,7 +216,8 @@ int FXJS_Execute(v8::Isolate* pIsolate,
v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate,
IJS_Runtime* pJSContext,
- int nObjDefnID);
+ int nObjDefnID,
+ FX_BOOL bStatic = FALSE);
Lei Zhang 2016/01/26 22:18:26 Prefer no default arguments.
Jim Wang 2016/01/27 05:24:27 Acknowledged.
Jim Wang 2016/01/28 03:00:13 After a second thought, in this case, i think it's
Lei Zhang 2016/01/28 03:07:23 Ok. The Google C++ Style Guide has relaxed the rul
v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate);
int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj);
const wchar_t* FXJS_GetTypeof(v8::Local<v8::Value> pObj);
« no previous file with comments | « no previous file | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('j') | fpdfsdk/src/jsapi/fxjs_v8.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698