Move GetDefaultAppearanceString() into cpdf_defaultappearance.cpp

Move the GetDefaultAppearanceString() function, which is generally
useful for providing input into the CPDF_DefaultAppearance ctor, into
cpdf_defaultappearance.cpp. Then add a new CPDF_DefaultAppearance ctor
that takes the same inputs as GetDefaultAppearanceString(), since its
callers ultimately want to construct a CPDF_DefaultAppearance.

Change-Id: I17fe44dc90ff9895c83eacc214810283ab97daec
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/131790
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index fefe6bb..ed934d2 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -9,14 +9,30 @@
 #include <algorithm>
 #include <vector>
 
+#include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_simple_parser.h"
 #include "core/fpdfapi/parser/fpdf_parser_utility.h"
+#include "core/fpdfdoc/cpdf_formfield.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/notreached.h"
 #include "core/fxge/cfx_color.h"
 
 namespace {
 
+ByteString GetDefaultAppearanceString(const CPDF_Dictionary* annot_dict,
+                                      const CPDF_Dictionary* acroform_dict) {
+  ByteString default_appearance_string;
+  RetainPtr<const CPDF_Object> default_appearance_object =
+      CPDF_FormField::GetFieldAttrForDict(annot_dict, "DA");
+  if (default_appearance_object) {
+    default_appearance_string = default_appearance_object->GetString();
+  }
+  if (default_appearance_string.IsEmpty()) {
+    default_appearance_string = acroform_dict->GetByteStringFor("DA");
+  }
+  return default_appearance_string;
+}
+
 // Find the token and its |nParams| parameters from the start of data,
 // and move the current position to the start of those parameters.
 bool FindTagParamFromStart(CPDF_SimpleParser* parser,
@@ -61,6 +77,12 @@
 CPDF_DefaultAppearance::CPDF_DefaultAppearance(const ByteString& csDA)
     : da_(csDA) {}
 
+CPDF_DefaultAppearance::CPDF_DefaultAppearance(
+    const CPDF_Dictionary* annot_dict,
+    const CPDF_Dictionary* acroform_dict)
+    : CPDF_DefaultAppearance(
+          GetDefaultAppearanceString(annot_dict, acroform_dict)) {}
+
 CPDF_DefaultAppearance::~CPDF_DefaultAppearance() = default;
 
 std::optional<CPDF_DefaultAppearance::FontNameAndSize>
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 129b75f..d15d1c5 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -12,6 +12,7 @@
 #include "core/fxcrt/bytestring.h"
 #include "core/fxge/cfx_color.h"
 
+class CPDF_Dictionary;
 class CPDF_SimpleParser;
 
 class CPDF_DefaultAppearance {
@@ -22,6 +23,8 @@
   };
 
   explicit CPDF_DefaultAppearance(const ByteString& csDA);
+  CPDF_DefaultAppearance(const CPDF_Dictionary* annot_dict,
+                         const CPDF_Dictionary* acroform_dict);
   CPDF_DefaultAppearance(const CPDF_DefaultAppearance&) = delete;
   CPDF_DefaultAppearance& operator=(const CPDF_DefaultAppearance&) = delete;
   ~CPDF_DefaultAppearance();
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 56c1411..e921bd3 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -246,20 +246,6 @@
   };
 }
 
-ByteString GetDefaultAppearanceString(CPDF_Dictionary* annot_dict,
-                                      CPDF_Dictionary* form_dict) {
-  ByteString default_appearance_string;
-  RetainPtr<const CPDF_Object> default_appearance_object =
-      CPDF_FormField::GetFieldAttrForDict(annot_dict, "DA");
-  if (default_appearance_object) {
-    default_appearance_string = default_appearance_object->GetString();
-  }
-  if (default_appearance_string.IsEmpty()) {
-    default_appearance_string = form_dict->GetByteStringFor("DA");
-  }
-  return default_appearance_string;
-}
-
 struct DefaultAppearanceInfo {
   ByteString font_name;
   float font_size;
@@ -267,8 +253,9 @@
 };
 
 std::optional<DefaultAppearanceInfo> GetDefaultAppearanceInfo(
-    const ByteString& default_appearance_string) {
-  CPDF_DefaultAppearance appearance(default_appearance_string);
+    const CPDF_Dictionary* annot_dict,
+    const CPDF_Dictionary* acroform_dict) {
+  CPDF_DefaultAppearance appearance(annot_dict, acroform_dict);
   auto maybe_font_name_and_size = appearance.GetFont();
   if (!maybe_font_name_and_size.has_value()) {
     return std::nullopt;
@@ -1051,8 +1038,7 @@
   }
 
   std::optional<DefaultAppearanceInfo> default_appearance_info =
-      GetDefaultAppearanceInfo(
-          GetDefaultAppearanceString(annot_dict, form_dict));
+      GetDefaultAppearanceInfo(annot_dict, form_dict);
   if (!default_appearance_info.has_value()) {
     return false;
   }
@@ -1454,8 +1440,7 @@
   }
 
   std::optional<DefaultAppearanceInfo> default_appearance_info =
-      GetDefaultAppearanceInfo(
-          GetDefaultAppearanceString(annot_dict, form_dict));
+      GetDefaultAppearanceInfo(annot_dict, form_dict);
   if (!default_appearance_info.has_value()) {
     return;
   }