Tidy CPDF_StructElement.

- Use a helper function to initialize |m_Type| so it can be const.
- Add GetAltText() method for consistency with GetTitle().

Change-Id: I507e2b5c18f4312eaefc96826a65e84c3a4725c5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/54595
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_structelement.cpp b/core/fpdfdoc/cpdf_structelement.cpp
index 1e7e5dc..89a5e39 100644
--- a/core/fpdfdoc/cpdf_structelement.cpp
+++ b/core/fpdfdoc/cpdf_structelement.cpp
@@ -17,6 +17,21 @@
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfdoc/cpdf_structtree.h"
 
+namespace {
+
+ByteString GetStructElementType(CPDF_StructTree* pTree,
+                                const CPDF_Dictionary* pDict) {
+  ByteString type = pDict->GetStringFor("S");
+  if (pTree->GetRoleMap()) {
+    ByteString mapped = pTree->GetRoleMap()->GetStringFor(type);
+    if (!mapped.IsEmpty())
+      type = std::move(mapped);
+  }
+  return type;
+}
+
+}  // namespace
+
 CPDF_StructKid::CPDF_StructKid()
     : m_Type(Invalid),
       m_PageObjNum(0),
@@ -33,17 +48,16 @@
     : m_pTree(pTree),
       m_pParent(pParent),
       m_pDict(pDict),
-      m_Type(pDict->GetStringFor("S")) {
-  if (pTree->GetRoleMap()) {
-    ByteString mapped = pTree->GetRoleMap()->GetStringFor(m_Type);
-    if (!mapped.IsEmpty())
-      m_Type = std::move(mapped);
-  }
-  LoadKids(pDict);
+      m_Type(GetStructElementType(m_pTree.Get(), m_pDict.Get())) {
+  LoadKids(m_pDict.Get());
 }
 
 CPDF_StructElement::~CPDF_StructElement() = default;
 
+WideString CPDF_StructElement::GetAltText() const {
+  return GetDict()->GetUnicodeTextFor("Alt");
+}
+
 WideString CPDF_StructElement::GetTitle() const {
   return GetDict()->GetUnicodeTextFor("T");
 }
diff --git a/core/fpdfdoc/cpdf_structelement.h b/core/fpdfdoc/cpdf_structelement.h
index 359662e..d4981a5 100644
--- a/core/fpdfdoc/cpdf_structelement.h
+++ b/core/fpdfdoc/cpdf_structelement.h
@@ -39,6 +39,7 @@
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
   ByteString GetType() const { return m_Type; }
+  WideString GetAltText() const;
   WideString GetTitle() const;
 
   // Never returns nullptr.
@@ -62,7 +63,7 @@
   UnownedPtr<CPDF_StructTree> const m_pTree;
   UnownedPtr<CPDF_StructElement> const m_pParent;
   UnownedPtr<const CPDF_Dictionary> const m_pDict;
-  ByteString m_Type;
+  const ByteString m_Type;
   std::vector<CPDF_StructKid> m_Kids;
 };
 
diff --git a/fpdfsdk/fpdf_structtree.cpp b/fpdfsdk/fpdf_structtree.cpp
index d0b0972..cfd57a8 100644
--- a/fpdfsdk/fpdf_structtree.cpp
+++ b/fpdfsdk/fpdf_structtree.cpp
@@ -74,9 +74,7 @@
                               unsigned long buflen) {
   CPDF_StructElement* elem =
       CPDFStructElementFromFPDFStructElement(struct_element);
-  return elem ? WideStringToBuffer(elem->GetDict()->GetUnicodeTextFor("Alt"),
-                                   buffer, buflen)
-              : 0;
+  return elem ? WideStringToBuffer(elem->GetAltText(), buffer, buflen) : 0;
 }
 
 FPDF_EXPORT int FPDF_CALLCONV