Deduplicate constants / macros between cfx_face.cpp and cfx_font.cpp

Move more CFX_Font::GetAscent() and CFX_Font::GetDescent() code into
CFX_Face. Then some temporarily duplicated code can be merged together
again. As part of this, change some if-statements into CHECKs, since the
if-statements in question cannot ever evaluate to true if one assumes
int is at least 32-bit.

Change-Id: I0374e361df9275e9f846ae5a9fe8c80a7c9e6928
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/114791
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Dominik Röttsches <drott@chromium.org>
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index d6f9fcb..075ae82 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -20,6 +20,7 @@
 #include "core/fxge/fx_fontencoding.h"
 #include "core/fxge/scoped_font_transform.h"
 #include "third_party/base/check.h"
+#include "third_party/base/check_op.h"
 #include "third_party/base/numerics/safe_conversions.h"
 #include "third_party/base/numerics/safe_math.h"
 
@@ -289,6 +290,20 @@
   return pdfium::base::checked_cast<int16_t>(GetRec()->descender);
 }
 
+int CFX_Face::GetAdjustedAscender() const {
+  int ascender = GetAscender();
+  CHECK_GE(ascender, kThousandthMinInt);
+  CHECK_LE(ascender, kThousandthMaxInt);
+  return EM_ADJUST(GetUnitsPerEm(), ascender);
+}
+
+int CFX_Face::GetAdjustedDescender() const {
+  int descender = GetDescender();
+  CHECK_GE(descender, kThousandthMinInt);
+  CHECK_LE(descender, kThousandthMaxInt);
+  return EM_ADJUST(GetUnitsPerEm(), descender);
+}
+
 #if BUILDFLAG(IS_ANDROID)
 int16_t CFX_Face::GetHeight() const {
   return pdfium::base::checked_cast<int16_t>(GetRec()->height);
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h
index 9534488..5b85a46 100644
--- a/core/fxge/cfx_face.h
+++ b/core/fxge/cfx_face.h
@@ -57,6 +57,8 @@
   uint16_t GetUnitsPerEm() const;
   int16_t GetAscender() const;
   int16_t GetDescender() const;
+  int GetAdjustedAscender() const;
+  int GetAdjustedDescender() const;
 #if BUILDFLAG(IS_ANDROID)
   int16_t GetHeight() const;
 #endif
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index e48a6bc..7bc1469 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -31,13 +31,8 @@
 #include "third_party/base/containers/span.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
-#define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
-
 namespace {
 
-constexpr int kThousandthMinInt = std::numeric_limits<int>::min() / 1000;
-constexpr int kThousandthMaxInt = std::numeric_limits<int>::max() / 1000;
-
 FX_RECT FXRectFromFTPos(FT_Pos left, FT_Pos top, FT_Pos right, FT_Pos bottom) {
   return FX_RECT(pdfium::base::checked_cast<int32_t>(left),
                  pdfium::base::checked_cast<int32_t>(top),
@@ -280,25 +275,11 @@
 }
 
 int CFX_Font::GetAscent() const {
-  if (!m_Face)
-    return 0;
-
-  int ascender = m_Face->GetAscender();
-  if (ascender < kThousandthMinInt || ascender > kThousandthMaxInt)
-    return 0;
-
-  return EM_ADJUST(m_Face->GetUnitsPerEm(), ascender);
+  return m_Face ? m_Face->GetAdjustedAscender() : 0;
 }
 
 int CFX_Font::GetDescent() const {
-  if (!m_Face)
-    return 0;
-
-  int descender = m_Face->GetDescender();
-  if (descender < kThousandthMinInt || descender > kThousandthMaxInt)
-    return 0;
-
-  return EM_ADJUST(m_Face->GetUnitsPerEm(), descender);
+  return m_Face ? m_Face->GetAdjustedDescender() : 0;
 }
 
 absl::optional<FX_RECT> CFX_Font::GetGlyphBBox(uint32_t glyph_index) {