Encapsulate CFXJS_ObjDefinition members
Bug: pdfium:1680
Change-Id: I4ada46e66c4d630780c7c3470a8f380baac95460
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96691
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp
index b4ce4e5..c84e117 100644
--- a/fxjs/cfxjs_engine.cpp
+++ b/fxjs/cfxjs_engine.cpp
@@ -190,6 +190,8 @@
holder->SetAlignedPointerInInternalField(1, nullptr);
}
+ FXJSOBJTYPE GetObjType() const { return m_ObjType; }
+ const char* GetObjName() const { return m_ObjName.Get(); }
v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); }
void DefineConst(const char* sConstName, v8::Local<v8::Value> pDefault) {
@@ -234,6 +236,17 @@
return scope.Escape(m_Signature.Get(GetIsolate()));
}
+ void RunConstructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) {
+ if (m_pConstructor)
+ m_pConstructor(pEngine, obj);
+ }
+
+ void RunDestructor(v8::Local<v8::Object> obj) {
+ if (m_pDestructor)
+ m_pDestructor(obj);
+ }
+
+ private:
UnownedPtr<const char> const m_ObjName;
const FXJSOBJTYPE m_ObjType;
const CFXJS_Engine::Constructor m_pConstructor;
@@ -248,7 +261,7 @@
FXJS_PerIsolateData* pIsolateData = FXJS_PerIsolateData::Get(pIsolate);
for (uint32_t i = 1; i <= pIsolateData->CurrentMaxObjDefinitionID(); ++i) {
CFXJS_ObjDefinition* pObjDef = pIsolateData->ObjDefinitionForID(i);
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL)
+ if (pObjDef->GetObjType() == FXJSOBJTYPE_GLOBAL)
return pObjDef->GetInstanceTemplate();
}
if (!g_DefaultGlobalObjectTemplate) {
@@ -275,8 +288,7 @@
CFXJS_ObjDefinition* pObjDef = pIsolateData->ObjDefinitionForID(id);
if (!pObjDef)
return;
- if (pObjDef->m_pDestructor)
- pObjDef->m_pDestructor(obj);
+ pObjDef->RunDestructor(obj);
CFXJS_Engine::FreeObjectPrivate(obj);
}
@@ -509,20 +521,18 @@
m_StaticObjects.resize(maxID + 1);
for (uint32_t i = 1; i <= maxID; ++i) {
CFXJS_ObjDefinition* pObjDef = pIsolateData->ObjDefinitionForID(i);
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
+ if (pObjDef->GetObjType() == FXJSOBJTYPE_GLOBAL) {
CFXJS_PerObjectData::SetInObject(new CFXJS_PerObjectData(i),
v8Context->Global()
->GetPrototype()
->ToObject(v8Context)
.ToLocalChecked());
- if (pObjDef->m_pConstructor) {
- pObjDef->m_pConstructor(this, v8Context->Global()
- ->GetPrototype()
- ->ToObject(v8Context)
- .ToLocalChecked());
- }
- } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
- v8::Local<v8::String> pObjName = NewString(pObjDef->m_ObjName.Get());
+ pObjDef->RunConstructor(this, v8Context->Global()
+ ->GetPrototype()
+ ->ToObject(v8Context)
+ .ToLocalChecked());
+ } else if (pObjDef->GetObjType() == FXJSOBJTYPE_STATIC) {
+ v8::Local<v8::String> pObjName = NewString(pObjDef->GetObjName());
v8::Local<v8::Object> obj = NewFXJSBoundObject(i, FXJSOBJTYPE_STATIC);
if (!obj.IsEmpty()) {
v8Context->Global()->Set(v8Context, pObjName, obj).FromJust();
@@ -547,7 +557,7 @@
for (uint32_t i = 1; i <= pIsolateData->CurrentMaxObjDefinitionID(); ++i) {
CFXJS_ObjDefinition* pObjDef = pIsolateData->ObjDefinitionForID(i);
v8::Local<v8::Object> pObj;
- if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
+ if (pObjDef->GetObjType() == FXJSOBJTYPE_GLOBAL) {
pObj =
context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
} else if (!m_StaticObjects[i].IsEmpty()) {
@@ -555,8 +565,7 @@
m_StaticObjects[i].Reset();
}
if (!pObj.IsEmpty()) {
- if (pObjDef->m_pDestructor)
- pObjDef->m_pDestructor(pObj);
+ pObjDef->RunDestructor(pObj);
FreeObjectPrivate(pObj);
}
}
@@ -616,9 +625,7 @@
CFXJS_PerObjectData* pObjData = new CFXJS_PerObjectData(nObjDefnID);
CFXJS_PerObjectData::SetInObject(pObjData, obj);
- if (pObjDef->m_pConstructor)
- pObjDef->m_pConstructor(this, obj);
-
+ pObjDef->RunConstructor(this, obj);
if (type == FXJSOBJTYPE_DYNAMIC) {
auto* pIsolateData = FXJS_PerIsolateData::Get(GetIsolate());
if (pIsolateData->m_pDynamicObjsMap)
@@ -671,7 +678,7 @@
CFXJS_ObjDefinition* pObjDef =
pIsolateData->ObjDefinitionForID(pProtoData->GetObjDefnID());
- if (!pObjDef || pObjDef->m_ObjType != FXJSOBJTYPE_GLOBAL)
+ if (!pObjDef || pObjDef->GetObjType() != FXJSOBJTYPE_GLOBAL)
return nullptr;
return pProtoData->GetPrivate();