Refactor common CJS_Field color code into GetFormControlColor().

In CJS_Field, get_fill_color() and get_stroke_color() have nearly
identical code. Refactor that into a helper function. To make this
possible without resorting to function pointers, get rid of
GetBorderColorARGB(), GetOriginalBorderColorComponent(),
GetBackgroundColor() and GetOriginalBackgroundColorComponent() in
CPDF_FormControl. Those are just wrapper methods around GetColorARGB()
and GetOriginalColorComponent(). Expose the 2 methods called by the
wrapper methods, and call them directly from CJS_Field.

Change-Id: I8aeba694d7312ca2bf3ce2655322e99c3ba5bc6d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81512
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 7714284..aa55c7d 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -184,6 +184,29 @@
   return fields;
 }
 
+CFX_Color GetFormControlColor(CPDF_FormControl* pFormControl,
+                              const ByteString& entry) {
+  CFX_Color color;
+  switch (pFormControl->GetColorARGB(entry).color_type) {
+    case CFX_Color::Type::kTransparent:
+      return CFX_Color(CFX_Color::Type::kTransparent);
+    case CFX_Color::Type::kGray:
+      return CFX_Color(CFX_Color::Type::kGray,
+                       pFormControl->GetOriginalColorComponent(0, entry));
+    case CFX_Color::Type::kRGB:
+      return CFX_Color(CFX_Color::Type::kRGB,
+                       pFormControl->GetOriginalColorComponent(0, entry),
+                       pFormControl->GetOriginalColorComponent(1, entry),
+                       pFormControl->GetOriginalColorComponent(2, entry));
+    case CFX_Color::Type::kCMYK:
+      return CFX_Color(CFX_Color::Type::kCMYK,
+                       pFormControl->GetOriginalColorComponent(0, entry),
+                       pFormControl->GetOriginalColorComponent(1, entry),
+                       pFormControl->GetOriginalColorComponent(2, entry),
+                       pFormControl->GetOriginalColorComponent(3, entry));
+  }
+}
+
 bool SetWidgetDisplayStatus(CPDFSDK_Widget* pWidget, int value) {
   if (!pWidget)
     return false;
@@ -1291,30 +1314,7 @@
   if (!pFormControl)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  CFX_Color color;
-  switch (pFormControl->GetBackgroundColor().color_type) {
-    case CFX_Color::Type::kTransparent:
-      color = CFX_Color(CFX_Color::Type::kTransparent);
-      break;
-    case CFX_Color::Type::kGray:
-      color = CFX_Color(CFX_Color::Type::kGray,
-                        pFormControl->GetOriginalBackgroundColorComponent(0));
-      break;
-    case CFX_Color::Type::kRGB:
-      color = CFX_Color(CFX_Color::Type::kRGB,
-                        pFormControl->GetOriginalBackgroundColorComponent(0),
-                        pFormControl->GetOriginalBackgroundColorComponent(1),
-                        pFormControl->GetOriginalBackgroundColorComponent(2));
-      break;
-    case CFX_Color::Type::kCMYK:
-      color = CFX_Color(CFX_Color::Type::kCMYK,
-                        pFormControl->GetOriginalBackgroundColorComponent(0),
-                        pFormControl->GetOriginalBackgroundColorComponent(1),
-                        pFormControl->GetOriginalBackgroundColorComponent(2),
-                        pFormControl->GetOriginalBackgroundColorComponent(3));
-      break;
-  }
-
+  CFX_Color color = GetFormControlColor(pFormControl, pdfium::appearance::kBG);
   v8::Local<v8::Value> array =
       CJS_Color::ConvertPWLColorToArray(pRuntime, color);
   if (array.IsEmpty())
@@ -1830,30 +1830,7 @@
   if (!pFormControl)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  CFX_Color color;
-  switch (pFormControl->GetBorderColorARGB().color_type) {
-    case CFX_Color::Type::kTransparent:
-      color = CFX_Color(CFX_Color::Type::kTransparent);
-      break;
-    case CFX_Color::Type::kGray:
-      color = CFX_Color(CFX_Color::Type::kGray,
-                        pFormControl->GetOriginalBorderColorComponent(0));
-      break;
-    case CFX_Color::Type::kRGB:
-      color = CFX_Color(CFX_Color::Type::kRGB,
-                        pFormControl->GetOriginalBorderColorComponent(0),
-                        pFormControl->GetOriginalBorderColorComponent(1),
-                        pFormControl->GetOriginalBorderColorComponent(2));
-      break;
-    case CFX_Color::Type::kCMYK:
-      color = CFX_Color(CFX_Color::Type::kCMYK,
-                        pFormControl->GetOriginalBorderColorComponent(0),
-                        pFormControl->GetOriginalBorderColorComponent(1),
-                        pFormControl->GetOriginalBorderColorComponent(2),
-                        pFormControl->GetOriginalBorderColorComponent(3));
-      break;
-  }
-
+  CFX_Color color = GetFormControlColor(pFormControl, pdfium::appearance::kBC);
   v8::Local<v8::Value> array =
       CJS_Color::ConvertPWLColorToArray(pRuntime, color);
   if (array.IsEmpty())