diff --git a/core/fpdfdoc/cpdf_iconfit.cpp b/core/fpdfdoc/cpdf_iconfit.cpp
index 55702a3..36e19da 100644
--- a/core/fpdfdoc/cpdf_iconfit.cpp
+++ b/core/fpdfdoc/cpdf_iconfit.cpp
@@ -24,16 +24,16 @@
 
 CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() const {
   if (!m_pDict)
-    return Always;
+    return ScaleMethod::kAlways;
 
   ByteString csSW = m_pDict->GetStringFor("SW", "A");
   if (csSW == "B")
-    return Bigger;
+    return ScaleMethod::kBigger;
   if (csSW == "S")
-    return Smaller;
+    return ScaleMethod::kSmaller;
   if (csSW == "N")
-    return Never;
-  return Always;
+    return ScaleMethod::kNever;
+  return ScaleMethod::kAlways;
 }
 
 bool CPDF_IconFit::IsProportionalScale() const {
diff --git a/core/fpdfdoc/cpdf_iconfit.h b/core/fpdfdoc/cpdf_iconfit.h
index 86a4918..8840980 100644
--- a/core/fpdfdoc/cpdf_iconfit.h
+++ b/core/fpdfdoc/cpdf_iconfit.h
@@ -15,7 +15,7 @@
 
 class CPDF_IconFit {
  public:
-  enum ScaleMethod { Always = 0, Bigger, Smaller, Never };
+  enum class ScaleMethod { kAlways = 0, kBigger, kSmaller, kNever };
 
   explicit CPDF_IconFit(const CPDF_Dictionary* pDict);
   CPDF_IconFit(const CPDF_IconFit& that);
diff --git a/fpdfsdk/pwl/cpwl_icon.cpp b/fpdfsdk/pwl/cpwl_icon.cpp
index 67df09e..bade072 100644
--- a/fpdfsdk/pwl/cpwl_icon.cpp
+++ b/fpdfsdk/pwl/cpwl_icon.cpp
@@ -53,35 +53,35 @@
   CFX_SizeF image_size = GetImageSize();
   float fImageWidth = image_size.width;
   float fImageHeight = image_size.height;
-  int32_t nScaleMethod = m_pIconFit ? m_pIconFit->GetScaleMethod() : 0;
+  CPDF_IconFit::ScaleMethod scale_method =
+      m_pIconFit ? m_pIconFit->GetScaleMethod()
+                 : CPDF_IconFit::ScaleMethod::kAlways;
 
-  switch (nScaleMethod) {
-    default:
-    case 0:
+  switch (scale_method) {
+    case CPDF_IconFit::ScaleMethod::kAlways:
       fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
       fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
       break;
-    case 1:
+    case CPDF_IconFit::ScaleMethod::kBigger:
       if (fPlateWidth < fImageWidth)
         fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
       if (fPlateHeight < fImageHeight)
         fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
       break;
-    case 2:
+    case CPDF_IconFit::ScaleMethod::kSmaller:
       if (fPlateWidth > fImageWidth)
         fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
       if (fPlateHeight > fImageHeight)
         fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
       break;
-    case 3:
+    case CPDF_IconFit::ScaleMethod::kNever:
       break;
   }
 
-  float fMinScale;
   if (m_pIconFit && m_pIconFit->IsProportionalScale()) {
-    fMinScale = std::min(fHScale, fVScale);
-    fHScale = fMinScale;
-    fVScale = fMinScale;
+    float min_scale = std::min(fHScale, fVScale);
+    fHScale = min_scale;
+    fVScale = min_scale;
   }
   return {fHScale, fVScale};
 }
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 8830dff..7483ee0 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -880,21 +880,19 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CPDF_IconFit IconFit = pFormControl->GetIconFit();
-  int ScaleM = IconFit.GetScaleMethod();
-  switch (ScaleM) {
-    case CPDF_IconFit::Always:
+  CPDF_IconFit::ScaleMethod scale_method = IconFit.GetScaleMethod();
+  switch (scale_method) {
+    case CPDF_IconFit::ScaleMethod::kAlways:
+    case CPDF_IconFit::ScaleMethod::kBigger:
+    case CPDF_IconFit::ScaleMethod::kNever:
+    case CPDF_IconFit::ScaleMethod::kSmaller:
       return CJS_Result::Success(
-          pRuntime->NewNumber(static_cast<int32_t>(CPDF_IconFit::Always)));
-    case CPDF_IconFit::Bigger:
-      return CJS_Result::Success(
-          pRuntime->NewNumber(static_cast<int32_t>(CPDF_IconFit::Bigger)));
-    case CPDF_IconFit::Never:
-      return CJS_Result::Success(
-          pRuntime->NewNumber(static_cast<int32_t>(CPDF_IconFit::Never)));
-    case CPDF_IconFit::Smaller:
-      return CJS_Result::Success(
-          pRuntime->NewNumber(static_cast<int32_t>(CPDF_IconFit::Smaller)));
+          pRuntime->NewNumber(static_cast<int>(scale_method)));
   }
+
+  // Note this is deliberately not the default case for the switch statement
+  // above, so missing cases trigger compile time errors.
+  NOTREACHED();
   return CJS_Result::Success();
 }
 
