Make CPDF_FormField::GetFieldAttr() a non-static method
Most callers want to invoke this on the field itself, so we can avoid
the step of passing a dictionary back to the caller. Rename existing
method to GetFieldAttrForDict() to handle odd cases where there isn't
a form field to directly supply the dict.
Change-Id: Icfcde3cfc0c02a595ae9f9119ba24eb24dec6a71
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98790
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index ba48654..f6c8469 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -129,7 +129,7 @@
}
CPDF_Object* pFieldTypeObj =
- CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kFT);
+ CPDF_FormField::GetFieldAttrForDict(pAnnotDict, pdfium::form_fields::kFT);
if (!pFieldTypeObj)
return;
@@ -141,7 +141,7 @@
}
CPDF_Object* pFieldFlagsObj =
- CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kFf);
+ CPDF_FormField::GetFieldAttrForDict(pAnnotDict, pdfium::form_fields::kFf);
uint32_t flags = pFieldFlagsObj ? pFieldFlagsObj->GetInteger() : 0;
if (field_type == pdfium::form_fields::kCh) {
auto type = (flags & pdfium::form_flags::kChoiceCombo)
diff --git a/core/fpdfdoc/cpdf_bafontmap.cpp b/core/fpdfdoc/cpdf_bafontmap.cpp
index 1ce8ea6..cc38d4f 100644
--- a/core/fpdfdoc/cpdf_bafontmap.cpp
+++ b/core/fpdfdoc/cpdf_bafontmap.cpp
@@ -238,13 +238,13 @@
ByteString sDA;
const CPDF_Object* pObj =
- CPDF_FormField::GetFieldAttr(m_pAnnotDict.Get(), "DA");
+ CPDF_FormField::GetFieldAttrForDict(m_pAnnotDict.Get(), "DA");
if (pObj)
sDA = pObj->GetString();
if (bWidget) {
if (sDA.IsEmpty()) {
- pObj = CPDF_FormField::GetFieldAttr(pAcroFormDict.Get(), "DA");
+ pObj = CPDF_FormField::GetFieldAttrForDict(pAcroFormDict.Get(), "DA");
sDA = pObj ? pObj->GetString() : ByteString();
}
}
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index c5e1b11..6d85e33 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -76,7 +76,7 @@
DCHECK(GetType() == CPDF_FormField::kCheckBox ||
GetType() == CPDF_FormField::kRadioButton);
ByteString csOn = GetOnStateName();
- if (ToArray(CPDF_FormField::GetFieldAttr(m_pField->GetFieldDict(), "Opt")))
+ if (ToArray(m_pField->GetFieldAttr("Opt")))
csOn = ByteString::FormatInteger(m_pField->GetControlIndex(this));
if (csOn.IsEmpty())
csOn = "Yes";
@@ -87,8 +87,7 @@
DCHECK(GetType() == CPDF_FormField::kCheckBox ||
GetType() == CPDF_FormField::kRadioButton);
ByteString csOn = GetOnStateName();
- const CPDF_Array* pArray =
- ToArray(CPDF_FormField::GetFieldAttr(m_pField->GetFieldDict(), "Opt"));
+ const CPDF_Array* pArray = ToArray(m_pField->GetFieldAttr("Opt"));
if (pArray)
csOn = pArray->GetByteStringAt(m_pField->GetControlIndex(this));
if (csOn.IsEmpty())
@@ -107,8 +106,7 @@
bool CPDF_FormControl::IsDefaultChecked() const {
DCHECK(GetType() == CPDF_FormField::kCheckBox ||
GetType() == CPDF_FormField::kRadioButton);
- const CPDF_Object* pDV =
- CPDF_FormField::GetFieldAttr(m_pField->GetFieldDict(), "DV");
+ const CPDF_Object* pDV = m_pField->GetFieldAttr("DV");
if (!pDV)
return false;
@@ -187,8 +185,7 @@
return CPDF_DefaultAppearance(
m_pWidgetDict->GetByteStringFor(pdfium::form_fields::kDA));
}
- const CPDF_Object* pObj = CPDF_FormField::GetFieldAttr(
- m_pField->GetFieldDict(), pdfium::form_fields::kDA);
+ const CPDF_Object* pObj = m_pField->GetFieldAttr(pdfium::form_fields::kDA);
if (!pObj)
return m_pForm->GetDefaultAppearance();
@@ -210,7 +207,8 @@
if (!csFontNameTag.has_value() || csFontNameTag->IsEmpty())
return nullptr;
- CPDF_Object* pObj = CPDF_FormField::GetFieldAttr(m_pWidgetDict.Get(), "DR");
+ CPDF_Object* pObj =
+ CPDF_FormField::GetFieldAttrForDict(m_pWidgetDict.Get(), "DR");
if (CPDF_Dictionary* pDict = ToDictionary(pObj)) {
RetainPtr<CPDF_Dictionary> pFonts = pDict->GetMutableDictFor("Font");
if (ValidateFontResourceDict(pFonts.Get())) {
@@ -229,8 +227,8 @@
return pFormFont;
RetainPtr<CPDF_Dictionary> pPageDict = m_pWidgetDict->GetMutableDictFor("P");
- CPDF_Dictionary* pDict =
- ToDictionary(CPDF_FormField::GetFieldAttr(pPageDict.Get(), "Resources"));
+ CPDF_Dictionary* pDict = ToDictionary(
+ CPDF_FormField::GetFieldAttrForDict(pPageDict.Get(), "Resources"));
if (!pDict)
return nullptr;
@@ -251,8 +249,7 @@
if (m_pWidgetDict->KeyExist(pdfium::form_fields::kQ))
return m_pWidgetDict->GetIntegerFor(pdfium::form_fields::kQ, 0);
- const CPDF_Object* pObj = CPDF_FormField::GetFieldAttr(
- m_pField->GetFieldDict(), pdfium::form_fields::kQ);
+ const CPDF_Object* pObj = m_pField->GetFieldAttr(pdfium::form_fields::kQ);
if (pObj)
return pObj->GetInteger();
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 4e90b7e..3e83912 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -61,15 +61,15 @@
}
// static
-const CPDF_Object* CPDF_FormField::GetFieldAttr(
+const CPDF_Object* CPDF_FormField::GetFieldAttrForDict(
const CPDF_Dictionary* pFieldDict,
const ByteString& name) {
return GetFieldAttrRecursive(pFieldDict, name, 0);
}
// static
-CPDF_Object* CPDF_FormField::GetFieldAttr(CPDF_Dictionary* pFieldDict,
- const ByteString& name) {
+CPDF_Object* CPDF_FormField::GetFieldAttrForDict(CPDF_Dictionary* pFieldDict,
+ const ByteString& name) {
return const_cast<CPDF_Object*>(GetFieldAttrRecursive(
static_cast<const CPDF_Dictionary*>(pFieldDict), name, 0));
}
@@ -105,8 +105,7 @@
CPDF_FormField::~CPDF_FormField() = default;
void CPDF_FormField::InitFieldFlags() {
- const CPDF_Object* ft_attr =
- GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kFT);
+ const CPDF_Object* ft_attr = GetFieldAttr(pdfium::form_fields::kFT);
ByteString type_name = ft_attr ? ft_attr->GetString() : ByteString();
uint32_t flags = GetFieldFlags();
m_bRequired = flags & pdfium::form_flags::kRequired;
@@ -193,7 +192,7 @@
csValue = pV->GetUnicodeText();
}
- bool bHasRV = !!GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kRV);
+ bool bHasRV = !!GetFieldAttr(pdfium::form_fields::kRV);
if (!bHasRV && (csDValue == csValue))
return false;
@@ -269,25 +268,22 @@
}
CPDF_AAction CPDF_FormField::GetAdditionalAction() const {
- CPDF_Object* pObj = GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kAA);
+ const CPDF_Object* pObj = GetFieldAttr(pdfium::form_fields::kAA);
return CPDF_AAction(pObj ? pObj->GetDict() : nullptr);
}
WideString CPDF_FormField::GetAlternateName() const {
- const CPDF_Object* pObj =
- GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kTU);
+ const CPDF_Object* pObj = GetFieldAttr(pdfium::form_fields::kTU);
return pObj ? pObj->GetUnicodeText() : WideString();
}
WideString CPDF_FormField::GetMappingName() const {
- const CPDF_Object* pObj =
- GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kTM);
+ const CPDF_Object* pObj = GetFieldAttr(pdfium::form_fields::kTM);
return pObj ? pObj->GetUnicodeText() : WideString();
}
uint32_t CPDF_FormField::GetFieldFlags() const {
- const CPDF_Object* pObj =
- GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kFf);
+ const CPDF_Object* pObj = GetFieldAttr(pdfium::form_fields::kFf);
return pObj ? pObj->GetInteger() : 0;
}
@@ -402,7 +398,8 @@
}
int CPDF_FormField::GetMaxLen() const {
- if (const CPDF_Object* pObj = GetFieldAttr(m_pDict.Get(), "MaxLen"))
+ const CPDF_Object* pObj = GetFieldAttr("MaxLen");
+ if (pObj)
return pObj->GetInteger();
for (auto& pControl : GetControls()) {
@@ -551,12 +548,12 @@
}
int CPDF_FormField::CountOptions() const {
- const CPDF_Array* pArray = ToArray(GetFieldAttr(m_pDict.Get(), "Opt"));
+ const CPDF_Array* pArray = ToArray(GetFieldAttr("Opt"));
return pArray ? fxcrt::CollectionSize<int>(*pArray) : 0;
}
WideString CPDF_FormField::GetOptionText(int index, int sub_index) const {
- const CPDF_Array* pArray = ToArray(GetFieldAttr(m_pDict.Get(), "Opt"));
+ const CPDF_Array* pArray = ToArray(GetFieldAttr("Opt"));
if (!pArray)
return WideString();
@@ -623,7 +620,7 @@
}
}
- const CPDF_Object* pOpt = GetFieldAttr(m_pDict.Get(), "Opt");
+ const CPDF_Object* pOpt = GetFieldAttr("Opt");
if (!ToArray(pOpt)) {
ByteString csBExport = PDF_EncodeText(csWExport.AsStringView());
if (bChecked) {
@@ -683,7 +680,7 @@
}
int CPDF_FormField::GetTopVisibleIndex() const {
- const CPDF_Object* pObj = GetFieldAttr(m_pDict.Get(), "TI");
+ const CPDF_Object* pObj = GetFieldAttr("TI");
return pObj ? pObj->GetInteger() : 0;
}
@@ -880,16 +877,16 @@
}
const CPDF_Object* CPDF_FormField::GetDefaultValueObject() const {
- return GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kDV);
+ return GetFieldAttr(pdfium::form_fields::kDV);
}
const CPDF_Object* CPDF_FormField::GetValueObject() const {
- return GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV);
+ return GetFieldAttr(pdfium::form_fields::kV);
}
const CPDF_Object* CPDF_FormField::GetSelectedIndicesObject() const {
DCHECK(GetType() == kComboBox || GetType() == kListBox);
- return GetFieldAttr(m_pDict.Get(), "I");
+ return GetFieldAttr("I");
}
const CPDF_Object* CPDF_FormField::GetValueOrSelectedIndicesObject() const {
diff --git a/core/fpdfdoc/cpdf_formfield.h b/core/fpdfdoc/cpdf_formfield.h
index b49c0a3..db8952b 100644
--- a/core/fpdfdoc/cpdf_formfield.h
+++ b/core/fpdfdoc/cpdf_formfield.h
@@ -73,17 +73,20 @@
~CPDF_FormField();
static absl::optional<FormFieldType> IntToFormFieldType(int value);
-
- static const CPDF_Object* GetFieldAttr(const CPDF_Dictionary* pFieldDict,
- const ByteString& name);
- static CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict,
- const ByteString& name);
-
static WideString GetFullNameForDict(const CPDF_Dictionary* pFieldDict);
+ static const CPDF_Object* GetFieldAttrForDict(
+ const CPDF_Dictionary* pFieldDict,
+ const ByteString& name);
+ static CPDF_Object* GetFieldAttrForDict(CPDF_Dictionary* pFieldDict,
+ const ByteString& name);
WideString GetFullName() const;
Type GetType() const { return m_Type; }
+ const CPDF_Object* GetFieldAttr(const ByteString& name) const {
+ return GetFieldAttrForDict(m_pDict.Get(), name);
+ }
+
const CPDF_Dictionary* GetFieldDict() const { return m_pDict.Get(); }
bool ResetField();
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index e77bf32..50addf6 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -916,7 +916,8 @@
return;
ByteString DA;
- if (CPDF_Object* pDAObj = CPDF_FormField::GetFieldAttr(pAnnotDict, "DA"))
+ CPDF_Object* pDAObj = CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "DA");
+ if (pDAObj)
DA = pDAObj->GetString();
if (DA.IsEmpty())
DA = pFormDict->GetByteStringFor("DA");
@@ -1094,16 +1095,17 @@
switch (type) {
case CPDF_GenerateAP::kTextField: {
- const CPDF_Object* pV =
- CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kV);
+ const CPDF_Object* pV = CPDF_FormField::GetFieldAttrForDict(
+ pAnnotDict, pdfium::form_fields::kV);
WideString swValue = pV ? pV->GetUnicodeText() : WideString();
- const CPDF_Object* pQ = CPDF_FormField::GetFieldAttr(pAnnotDict, "Q");
+ const CPDF_Object* pQ =
+ CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "Q");
int32_t nAlign = pQ ? pQ->GetInteger() : 0;
- const CPDF_Object* pFf =
- CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kFf);
+ const CPDF_Object* pFf = CPDF_FormField::GetFieldAttrForDict(
+ pAnnotDict, pdfium::form_fields::kFf);
uint32_t dwFlags = pFf ? pFf->GetInteger() : 0;
const CPDF_Object* pMaxLen =
- CPDF_FormField::GetFieldAttr(pAnnotDict, "MaxLen");
+ CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "MaxLen");
uint32_t dwMaxLen = pMaxLen ? pMaxLen->GetInteger() : 0;
CPVT_VariableText vt(&prd);
vt.SetPlateRect(rcBody);
@@ -1157,8 +1159,8 @@
break;
}
case CPDF_GenerateAP::kComboBox: {
- const CPDF_Object* pV =
- CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kV);
+ const CPDF_Object* pV = CPDF_FormField::GetFieldAttrForDict(
+ pAnnotDict, pdfium::form_fields::kV);
WideString swValue = pV ? pV->GetUnicodeText() : WideString();
CPVT_VariableText vt(&prd);
CFX_FloatRect rcButton = rcBody;
@@ -1225,10 +1227,10 @@
}
case CPDF_GenerateAP::kListBox: {
CPDF_Array* pOpts =
- ToArray(CPDF_FormField::GetFieldAttr(pAnnotDict, "Opt"));
+ ToArray(CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "Opt"));
CPDF_Array* pSels =
- ToArray(CPDF_FormField::GetFieldAttr(pAnnotDict, "I"));
- CPDF_Object* pTi = CPDF_FormField::GetFieldAttr(pAnnotDict, "TI");
+ ToArray(CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "I"));
+ CPDF_Object* pTi = CPDF_FormField::GetFieldAttrForDict(pAnnotDict, "TI");
int32_t nTop = pTi ? pTi->GetInteger() : 0;
fxcrt::ostringstream sBody;
if (pOpts) {
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 1e99f86..02c06f4 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -977,8 +977,7 @@
pField->GetType() == CPDF_FormField::kRadioButton) {
WideString csExport = pField->GetCheckValue(false);
ByteString csBExport = PDF_EncodeText(csExport.AsStringView());
- const CPDF_Object* pOpt =
- CPDF_FormField::GetFieldAttr(pField->GetFieldDict(), "Opt");
+ const CPDF_Object* pOpt = pField->GetFieldAttr("Opt");
if (pOpt) {
pFieldDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, csBExport,
false);
@@ -986,8 +985,7 @@
pFieldDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, csBExport);
}
} else {
- const CPDF_Object* pV = CPDF_FormField::GetFieldAttr(
- pField->GetFieldDict(), pdfium::form_fields::kV);
+ const CPDF_Object* pV = pField->GetFieldAttr(pdfium::form_fields::kV);
if (pV)
pFieldDict->SetFor(pdfium::form_fields::kV, pV->CloneDirectObject());
}