Encapsulate FXJS_PerIsolateData members.
-- same with V8TemplateMap.
-- rename/add locals for easier reading.
-- protected not useful in non-extended class.
Bug: pdfium:1680
Change-Id: Ie25ff76cce7414c20b9b57a7807c0ebf546f32ef
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96694
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp
index c84e117..b8c06f9 100644
--- a/fxjs/cfxjs_engine.cpp
+++ b/fxjs/cfxjs_engine.cpp
@@ -108,7 +108,7 @@
m_map.Set(key, handle);
}
- friend class V8TemplateMapTraits;
+ MapType* GetMap() { return &m_map; }
private:
MapType m_map;
@@ -298,10 +298,10 @@
}
V8TemplateMapTraits::MapType* V8TemplateMapTraits::MapFromWeakCallbackInfo(
- const v8::WeakCallbackInfo<WeakCallbackDataType>& data) {
- V8TemplateMap* pMap =
- FXJS_PerIsolateData::Get(data.GetIsolate())->m_pDynamicObjsMap.get();
- return pMap ? &pMap->m_map : nullptr;
+ const v8::WeakCallbackInfo<WeakCallbackDataType>& info) {
+ auto* pIsolateData = FXJS_PerIsolateData::Get(info.GetIsolate());
+ V8TemplateMap* pObjsMap = pIsolateData->GetDynamicObjsMap();
+ return pObjsMap ? pObjsMap->GetMap() : nullptr;
}
void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate) {
@@ -628,8 +628,9 @@
pObjDef->RunConstructor(this, obj);
if (type == FXJSOBJTYPE_DYNAMIC) {
auto* pIsolateData = FXJS_PerIsolateData::Get(GetIsolate());
- if (pIsolateData->m_pDynamicObjsMap)
- pIsolateData->m_pDynamicObjsMap->SetAndMakeWeak(pObjData, obj);
+ V8TemplateMap* pObjsMap = pIsolateData->GetDynamicObjsMap();
+ if (pObjsMap)
+ pObjsMap->SetAndMakeWeak(pObjData, obj);
}
return obj;
}
diff --git a/fxjs/cfxjs_engine.h b/fxjs/cfxjs_engine.h
index 56c9ad6..6a2c1da 100644
--- a/fxjs/cfxjs_engine.h
+++ b/fxjs/cfxjs_engine.h
@@ -17,6 +17,7 @@
#include <functional>
#include <map>
#include <memory>
+#include <utility>
#include <vector>
#include "core/fxcrt/widestring.h"
@@ -53,14 +54,19 @@
uint32_t CurrentMaxObjDefinitionID() const;
CFXJS_ObjDefinition* ObjDefinitionForID(uint32_t id) const;
uint32_t AssignIDForObjDefinition(std::unique_ptr<CFXJS_ObjDefinition> pDefn);
+ V8TemplateMap* GetDynamicObjsMap() { return m_pDynamicObjsMap.get(); }
+ ExtensionIface* GetExtension() { return m_pExtension.get(); }
+ void SetExtension(std::unique_ptr<ExtensionIface> extension) {
+ m_pExtension = std::move(extension);
+ }
+
+ private:
+ explicit FXJS_PerIsolateData(v8::Isolate* pIsolate);
const wchar_t* const m_Tag; // Raw, always a literal.
std::vector<std::unique_ptr<CFXJS_ObjDefinition>> m_ObjectDefnArray;
std::unique_ptr<V8TemplateMap> m_pDynamicObjsMap;
- std::unique_ptr<ExtensionIface> m_pFXJSERuntimeData;
-
- protected:
- explicit FXJS_PerIsolateData(v8::Isolate* pIsolate);
+ std::unique_ptr<ExtensionIface> m_pExtension;
};
void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate);
diff --git a/fxjs/xfa/cfxjse_runtimedata.cpp b/fxjs/xfa/cfxjse_runtimedata.cpp
index fbf6c5d..d081bb5 100644
--- a/fxjs/xfa/cfxjse_runtimedata.cpp
+++ b/fxjs/xfa/cfxjse_runtimedata.cpp
@@ -51,9 +51,8 @@
CFXJSE_RuntimeData* CFXJSE_RuntimeData::Get(v8::Isolate* pIsolate) {
FXJS_PerIsolateData::SetUp(pIsolate);
-
FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate);
- if (!pData->m_pFXJSERuntimeData)
- pData->m_pFXJSERuntimeData = CFXJSE_RuntimeData::Create(pIsolate);
- return static_cast<CFXJSE_RuntimeData*>(pData->m_pFXJSERuntimeData.get());
+ if (!pData->GetExtension())
+ pData->SetExtension(CFXJSE_RuntimeData::Create(pIsolate));
+ return static_cast<CFXJSE_RuntimeData*>(pData->GetExtension());
}