diff --git a/BUILD.gn b/BUILD.gn
index bb8969e..485afe2 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1044,7 +1044,7 @@
     "core/fxge/dib/cstretchengine.cpp",
     "core/fxge/dib/cstretchengine.h",
     "core/fxge/dib/fx_dib_main.cpp",
-    "core/fxge/dib/ifx_scanlinecomposer.h",
+    "core/fxge/dib/scanlinecomposer_iface.h",
     "core/fxge/fontdata/chromefontdata/FoxitDingbats.cpp",
     "core/fxge/fontdata/chromefontdata/FoxitFixed.cpp",
     "core/fxge/fontdata/chromefontdata/FoxitFixedBold.cpp",
@@ -1069,9 +1069,9 @@
     "core/fxge/fx_ge_fontmap.cpp",
     "core/fxge/fx_ge_linux.cpp",
     "core/fxge/fx_ge_text.cpp",
-    "core/fxge/ifx_renderdevicedriver.cpp",
-    "core/fxge/ifx_renderdevicedriver.h",
-    "core/fxge/ifx_systemfontinfo.h",
+    "core/fxge/renderdevicedriver_iface.cpp",
+    "core/fxge/renderdevicedriver_iface.h",
+    "core/fxge/systemfontinfo_iface.h",
     "core/fxge/win32/cfx_windowsdib.h",
   ]
 
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index b93c6f5..0022fb1 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -56,7 +56,7 @@
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 #include "third_party/base/logging.h"
 #include "third_party/base/numerics/safe_math.h"
 #include "third_party/base/ptr_util.h"
diff --git a/core/fxge/agg/fx_agg_driver.h b/core/fxge/agg/fx_agg_driver.h
index 3f4481c..adea810 100644
--- a/core/fxge/agg/fx_agg_driver.h
+++ b/core/fxge/agg/fx_agg_driver.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <vector>
 
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 #include "third_party/agg23/agg_clip_liang_barsky.h"
 #include "third_party/agg23/agg_path_storage.h"
 #include "third_party/agg23/agg_rasterizer_scanline_aa.h"
@@ -30,7 +30,7 @@
   agg::path_storage m_PathData;
 };
 
-class CFX_AggDeviceDriver : public IFX_RenderDeviceDriver {
+class CFX_AggDeviceDriver : public RenderDeviceDriverIface {
  public:
   CFX_AggDeviceDriver(const RetainPtr<CFX_DIBitmap>& pBitmap,
                       bool bRgbByteOrder,
@@ -41,7 +41,7 @@
   void InitPlatform();
   void DestroyPlatform();
 
-  // IFX_RenderDeviceDriver
+  // RenderDeviceDriverIface
   int GetDeviceCaps(int caps_id) const override;
   void SaveState() override;
   void RestoreState(bool bKeepSaved) override;
diff --git a/core/fxge/android/cfx_androidfontinfo.h b/core/fxge/android/cfx_androidfontinfo.h
index e49b161..62ad718 100644
--- a/core/fxge/android/cfx_androidfontinfo.h
+++ b/core/fxge/android/cfx_androidfontinfo.h
@@ -10,18 +10,18 @@
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "core/fxge/cfx_fontmapper.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 
 class CFPF_SkiaFontMgr;
 
-class CFX_AndroidFontInfo : public IFX_SystemFontInfo {
+class CFX_AndroidFontInfo : public SystemFontInfoIface {
  public:
   CFX_AndroidFontInfo();
   ~CFX_AndroidFontInfo() override;
 
   bool Init(CFPF_SkiaFontMgr* pFontMgr);
 
-  // IFX_SystemFontInfo:
+  // SystemFontInfoIface:
   bool EnumFontList(CFX_FontMapper* pMapper) override;
   void* MapFont(int weight,
                 bool bItalic,
diff --git a/core/fxge/apple/apple_int.h b/core/fxge/apple/apple_int.h
index 82415ec..d579891 100644
--- a/core/fxge/apple/apple_int.h
+++ b/core/fxge/apple/apple_int.h
@@ -13,7 +13,7 @@
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 
 #include <Carbon/Carbon.h>
 
diff --git a/core/fxge/apple/fx_mac_imp.cpp b/core/fxge/apple/fx_mac_imp.cpp
index b212f15..076cb22 100644
--- a/core/fxge/apple/fx_mac_imp.cpp
+++ b/core/fxge/apple/fx_mac_imp.cpp
@@ -12,7 +12,7 @@
 #include "core/fxge/cfx_folderfontinfo.h"
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "third_party/base/ptr_util.h"
 
 namespace {
@@ -120,7 +120,7 @@
 
 }  // namespace
 
-std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
+std::unique_ptr<SystemFontInfoIface> SystemFontInfoIface::CreateDefault(
     const char** pUnused) {
   auto pInfo = pdfium::MakeUnique<CFX_MacFontInfo>();
   pInfo->AddPath("~/Library/Fonts");
@@ -131,7 +131,7 @@
 
 void CFX_GEModule::InitPlatform() {
   m_pPlatformData = new CApplePlatform;
-  m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault(nullptr));
+  m_pFontMgr->SetSystemFontInfo(SystemFontInfoIface::CreateDefault(nullptr));
 }
 
 void CFX_GEModule::DestroyPlatform() {
diff --git a/core/fxge/cfx_folderfontinfo.h b/core/fxge/cfx_folderfontinfo.h
index 397b386..1f98301 100644
--- a/core/fxge/cfx_folderfontinfo.h
+++ b/core/fxge/cfx_folderfontinfo.h
@@ -13,9 +13,9 @@
 
 #include "core/fxcrt/unowned_ptr.h"
 #include "core/fxge/cfx_fontmapper.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 
-class CFX_FolderFontInfo : public IFX_SystemFontInfo {
+class CFX_FolderFontInfo : public SystemFontInfoIface {
  public:
   CFX_FolderFontInfo();
   ~CFX_FolderFontInfo() override;
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 7dba8f6..b3e88c0 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -17,7 +17,7 @@
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_substfont.h"
 #include "core/fxge/fx_font.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "third_party/base/stl_util.h"
 
 namespace {
@@ -287,7 +287,7 @@
 }
 
 void CFX_FontMapper::SetSystemFontInfo(
-    std::unique_ptr<IFX_SystemFontInfo> pFontInfo) {
+    std::unique_ptr<SystemFontInfoIface> pFontInfo) {
   if (!pFontInfo)
     return;
 
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index ed8ab61..13d906c 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -15,15 +15,15 @@
 
 class CFX_FontMgr;
 class CFX_SubstFont;
-class IFX_SystemFontInfo;
+class SystemFontInfoIface;
 
 class CFX_FontMapper {
  public:
   explicit CFX_FontMapper(CFX_FontMgr* mgr);
   ~CFX_FontMapper();
 
-  void SetSystemFontInfo(std::unique_ptr<IFX_SystemFontInfo> pFontInfo);
-  IFX_SystemFontInfo* GetSystemFontInfo() { return m_pFontInfo.get(); }
+  void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo);
+  SystemFontInfoIface* GetSystemFontInfo() { return m_pFontInfo.get(); }
   void AddInstalledFont(const ByteString& name, int charset);
   void LoadInstalledFonts();
 
@@ -77,7 +77,7 @@
   FXFT_Face m_MMFaces[MM_FACE_COUNT];
   ByteString m_LastFamily;
   std::vector<FaceData> m_FaceArray;
-  std::unique_ptr<IFX_SystemFontInfo> m_pFontInfo;
+  std::unique_ptr<SystemFontInfoIface> m_pFontInfo;
   FXFT_Face m_FoxitFaces[FOXIT_FACE_COUNT];
   UnownedPtr<CFX_FontMgr> const m_pFontMgr;
 };
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index e2be93e..158b5d0 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -14,7 +14,7 @@
 #include "core/fxge/cttfontdesc.h"
 #include "core/fxge/fontdata/chromefontdata/chromefontdata.h"
 #include "core/fxge/fx_font.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "third_party/base/ptr_util.h"
 
 namespace {
@@ -99,7 +99,7 @@
 }
 
 void CFX_FontMgr::SetSystemFontInfo(
-    std::unique_ptr<IFX_SystemFontInfo> pFontInfo) {
+    std::unique_ptr<SystemFontInfoIface> pFontInfo) {
   m_pBuiltinMapper->SetSystemFontInfo(std::move(pFontInfo));
 }
 
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index e53a4ca..6ca0970 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -15,7 +15,7 @@
 class CFX_FontMapper;
 class CFX_SubstFont;
 class CTTFontDesc;
-class IFX_SystemFontInfo;
+class SystemFontInfoIface;
 
 class CFX_FontMgr {
  public:
@@ -46,7 +46,7 @@
   FXFT_Face GetFileFace(const char* filename, int face_index);
   FXFT_Face GetFixedFace(const uint8_t* pData, uint32_t size, int face_index);
   void ReleaseFace(FXFT_Face face);
-  void SetSystemFontInfo(std::unique_ptr<IFX_SystemFontInfo> pFontInfo);
+  void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo);
   FXFT_Face FindSubstFont(const ByteString& face_name,
                           bool bTrueType,
                           uint32_t flags,
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index af148ee..6c7e896 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -20,7 +20,7 @@
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 
 #if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
 #include "third_party/skia/include/core/SkTypes.h"
@@ -391,7 +391,7 @@
 #endif
 
 void CFX_RenderDevice::SetDeviceDriver(
-    std::unique_ptr<IFX_RenderDeviceDriver> pDriver) {
+    std::unique_ptr<RenderDeviceDriverIface> pDriver) {
   m_pDeviceDriver = std::move(pDriver);
   InitDeviceInfo();
 }
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 925ec26..0eafe8c 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -18,7 +18,7 @@
 class CFX_GraphStateData;
 class CFX_ImageRenderer;
 class PauseIndicatorIface;
-class IFX_RenderDeviceDriver;
+class RenderDeviceDriverIface;
 
 #define FXDC_DEVICE_CLASS 1
 #define FXDC_PIXEL_WIDTH 2
@@ -100,8 +100,8 @@
   virtual ~CFX_RenderDevice();
 
   // Take ownership of |pDriver|.
-  void SetDeviceDriver(std::unique_ptr<IFX_RenderDeviceDriver> pDriver);
-  IFX_RenderDeviceDriver* GetDeviceDriver() const {
+  void SetDeviceDriver(std::unique_ptr<RenderDeviceDriverIface> pDriver);
+  RenderDeviceDriverIface* GetDeviceDriver() const {
     return m_pDeviceDriver.get();
   }
 
@@ -299,7 +299,7 @@
   int m_RenderCaps;
   int m_DeviceClass;
   FX_RECT m_ClipBox;
-  std::unique_ptr<IFX_RenderDeviceDriver> m_pDeviceDriver;
+  std::unique_ptr<RenderDeviceDriverIface> m_pDeviceDriver;
 };
 
 #endif  // CORE_FXGE_CFX_RENDERDEVICE_H_
diff --git a/core/fxge/cfx_windowsrenderdevice.h b/core/fxge/cfx_windowsrenderdevice.h
index f1e0cbd..c6e6686 100644
--- a/core/fxge/cfx_windowsrenderdevice.h
+++ b/core/fxge/cfx_windowsrenderdevice.h
@@ -21,7 +21,7 @@
   kModePostScript3 = 3,
 };
 
-class IFX_RenderDeviceDriver;
+class RenderDeviceDriverIface;
 
 #if defined(PDFIUM_PRINT_TEXT_WITH_GDI)
 typedef void (*PDFiumEnsureTypefaceCharactersAccessible)(const LOGFONT* font,
@@ -36,7 +36,7 @@
 
 class CFX_WindowsRenderDevice : public CFX_RenderDevice {
  public:
-  static IFX_RenderDeviceDriver* CreateDriver(HDC hDC);
+  static RenderDeviceDriverIface* CreateDriver(HDC hDC);
 
   explicit CFX_WindowsRenderDevice(HDC hDC);
   ~CFX_WindowsRenderDevice() override;
diff --git a/core/fxge/dib/cfx_bitmapcomposer.h b/core/fxge/dib/cfx_bitmapcomposer.h
index 98c1f77..f1bf0e9 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.h
+++ b/core/fxge/dib/cfx_bitmapcomposer.h
@@ -13,12 +13,12 @@
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "core/fxge/dib/cfx_scanlinecompositor.h"
-#include "core/fxge/dib/ifx_scanlinecomposer.h"
+#include "core/fxge/dib/scanlinecomposer_iface.h"
 
 class CFX_ClipRgn;
 class CFX_DIBitmap;
 
-class CFX_BitmapComposer : public IFX_ScanlineComposer {
+class CFX_BitmapComposer : public ScanlineComposerIface {
  public:
   CFX_BitmapComposer();
   ~CFX_BitmapComposer() override;
@@ -35,7 +35,7 @@
                int alpha_flag,
                int blend_type);
 
-  // IFX_ScanlineComposer
+  // ScanlineComposerIface
   bool SetInfo(int width,
                int height,
                FXDIB_Format src_format,
diff --git a/core/fxge/dib/cfx_bitmapstorer.h b/core/fxge/dib/cfx_bitmapstorer.h
index 3d3416d..7d3482f 100644
--- a/core/fxge/dib/cfx_bitmapstorer.h
+++ b/core/fxge/dib/cfx_bitmapstorer.h
@@ -13,15 +13,15 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
-#include "core/fxge/dib/ifx_scanlinecomposer.h"
+#include "core/fxge/dib/scanlinecomposer_iface.h"
 #include "third_party/base/stl_util.h"
 
-class CFX_BitmapStorer : public IFX_ScanlineComposer {
+class CFX_BitmapStorer : public ScanlineComposerIface {
  public:
   CFX_BitmapStorer();
   ~CFX_BitmapStorer() override;
 
-  // IFX_ScanlineComposer
+  // ScanlineComposerIface
   void ComposeScanline(int line,
                        const uint8_t* scanline,
                        const uint8_t* scan_extra_alpha) override;
diff --git a/core/fxge/dib/cfx_imagestretcher.cpp b/core/fxge/dib/cfx_imagestretcher.cpp
index af93b26..9d8e290 100644
--- a/core/fxge/dib/cfx_imagestretcher.cpp
+++ b/core/fxge/dib/cfx_imagestretcher.cpp
@@ -42,7 +42,7 @@
 
 }  // namespace
 
-CFX_ImageStretcher::CFX_ImageStretcher(IFX_ScanlineComposer* pDest,
+CFX_ImageStretcher::CFX_ImageStretcher(ScanlineComposerIface* pDest,
                                        const RetainPtr<CFX_DIBSource>& pSource,
                                        int dest_width,
                                        int dest_height,
diff --git a/core/fxge/dib/cfx_imagestretcher.h b/core/fxge/dib/cfx_imagestretcher.h
index e2ed4e9..1133725 100644
--- a/core/fxge/dib/cfx_imagestretcher.h
+++ b/core/fxge/dib/cfx_imagestretcher.h
@@ -13,7 +13,7 @@
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
-#include "core/fxge/dib/ifx_scanlinecomposer.h"
+#include "core/fxge/dib/scanlinecomposer_iface.h"
 #include "core/fxge/fx_dib.h"
 
 class CFX_DIBSource;
@@ -21,7 +21,7 @@
 
 class CFX_ImageStretcher {
  public:
-  CFX_ImageStretcher(IFX_ScanlineComposer* pDest,
+  CFX_ImageStretcher(ScanlineComposerIface* pDest,
                      const RetainPtr<CFX_DIBSource>& pSource,
                      int dest_width,
                      int dest_height,
@@ -40,7 +40,7 @@
   bool ContinueQuickStretch(PauseIndicatorIface* pPause);
   bool ContinueStretch(PauseIndicatorIface* pPause);
 
-  UnownedPtr<IFX_ScanlineComposer> const m_pDest;
+  UnownedPtr<ScanlineComposerIface> const m_pDest;
   RetainPtr<CFX_DIBSource> m_pSource;
   std::unique_ptr<CStretchEngine> m_pStretchEngine;
   std::unique_ptr<uint8_t, FxFreeDeleter> m_pScanline;
diff --git a/core/fxge/dib/cstretchengine.cpp b/core/fxge/dib/cstretchengine.cpp
index cb7ffa0..2915202 100644
--- a/core/fxge/dib/cstretchengine.cpp
+++ b/core/fxge/dib/cstretchengine.cpp
@@ -12,7 +12,7 @@
 #include "core/fxcrt/pauseindicator_iface.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/dib/cfx_dibsource.h"
-#include "core/fxge/dib/ifx_scanlinecomposer.h"
+#include "core/fxge/dib/scanlinecomposer_iface.h"
 #include "core/fxge/fx_dib.h"
 
 namespace {
@@ -217,7 +217,7 @@
   return idx < GetPixelWeightSize() ? &pWeight->m_Weights[idx] : nullptr;
 }
 
-CStretchEngine::CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
+CStretchEngine::CStretchEngine(ScanlineComposerIface* pDestBitmap,
                                FXDIB_Format dest_format,
                                int dest_width,
                                int dest_height,
diff --git a/core/fxge/dib/cstretchengine.h b/core/fxge/dib/cstretchengine.h
index 6f0d4dc..91530cc 100644
--- a/core/fxge/dib/cstretchengine.h
+++ b/core/fxge/dib/cstretchengine.h
@@ -15,11 +15,11 @@
 #include "core/fxge/fx_dib.h"
 
 class PauseIndicatorIface;
-class IFX_ScanlineComposer;
+class ScanlineComposerIface;
 
 class CStretchEngine {
  public:
-  CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
+  CStretchEngine(ScanlineComposerIface* pDestBitmap,
                  FXDIB_Format dest_format,
                  int dest_width,
                  int dest_height,
@@ -61,7 +61,7 @@
   int m_DestBpp;
   int m_SrcBpp;
   int m_bHasAlpha;
-  UnownedPtr<IFX_ScanlineComposer> m_pDestBitmap;
+  UnownedPtr<ScanlineComposerIface> m_pDestBitmap;
   int m_DestWidth;
   int m_DestHeight;
   FX_RECT m_DestClip;
diff --git a/core/fxge/dib/ifx_scanlinecomposer.h b/core/fxge/dib/scanlinecomposer_iface.h
similarity index 74%
rename from core/fxge/dib/ifx_scanlinecomposer.h
rename to core/fxge/dib/scanlinecomposer_iface.h
index 7b070c0..2a8fbbc 100644
--- a/core/fxge/dib/ifx_scanlinecomposer.h
+++ b/core/fxge/dib/scanlinecomposer_iface.h
@@ -4,14 +4,14 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXGE_DIB_IFX_SCANLINECOMPOSER_H_
-#define CORE_FXGE_DIB_IFX_SCANLINECOMPOSER_H_
+#ifndef CORE_FXGE_DIB_SCANLINECOMPOSER_IFACE_H_
+#define CORE_FXGE_DIB_SCANLINECOMPOSER_IFACE_H_
 
 #include "core/fxge/fx_dib.h"
 
-class IFX_ScanlineComposer {
+class ScanlineComposerIface {
  public:
-  virtual ~IFX_ScanlineComposer() {}
+  virtual ~ScanlineComposerIface() {}
 
   virtual void ComposeScanline(int line,
                                const uint8_t* scanline,
@@ -23,4 +23,4 @@
                        uint32_t* pSrcPalette) = 0;
 };
 
-#endif  // CORE_FXGE_DIB_IFX_SCANLINECOMPOSER_H_
+#endif  // CORE_FXGE_DIB_SCANLINECOMPOSER_IFACE_H_
diff --git a/core/fxge/fx_ge_fontmap.cpp b/core/fxge/fx_ge_fontmap.cpp
index 6e3d8ab..58b00f5 100644
--- a/core/fxge/fx_ge_fontmap.cpp
+++ b/core/fxge/fx_ge_fontmap.cpp
@@ -7,7 +7,7 @@
 #include <memory>
 
 #include "core/fxge/cfx_fontmapper.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 
 static ByteString GetStringFromTable(const uint8_t* string_ptr,
                                      uint32_t string_ptr_length,
@@ -52,15 +52,15 @@
   return ByteString();
 }
 #ifdef PDF_ENABLE_XFA
-void* IFX_SystemFontInfo::MapFontByUnicode(uint32_t dwUnicode,
-                                           int weight,
-                                           bool bItalic,
-                                           int pitch_family) {
+void* SystemFontInfoIface::MapFontByUnicode(uint32_t dwUnicode,
+                                            int weight,
+                                            bool bItalic,
+                                            int pitch_family) {
   return nullptr;
 }
 #endif  // PDF_ENABLE_XFA
 
-int IFX_SystemFontInfo::GetFaceIndex(void* hFont) {
+int SystemFontInfoIface::GetFaceIndex(void* hFont) {
   return 0;
 }
 
@@ -73,7 +73,7 @@
 };
 
 #if _FX_OS_ == _FX_OS_ANDROID_
-std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
+std::unique_ptr<SystemFontInfoIface> SystemFontInfoIface::CreateDefault(
     const char** pUnused) {
   return nullptr;
 }
diff --git a/core/fxge/fx_ge_linux.cpp b/core/fxge/fx_ge_linux.cpp
index d5069f3..d2da781 100644
--- a/core/fxge/fx_ge_linux.cpp
+++ b/core/fxge/fx_ge_linux.cpp
@@ -11,7 +11,7 @@
 #include "core/fxge/cfx_folderfontinfo.h"
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "third_party/base/ptr_util.h"
 
 #if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
@@ -142,7 +142,7 @@
 
 }  // namespace
 
-std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
+std::unique_ptr<SystemFontInfoIface> SystemFontInfoIface::CreateDefault(
     const char** pUserPaths) {
   auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
   if (!pInfo->ParseFontCfg(pUserPaths)) {
@@ -156,7 +156,7 @@
 
 void CFX_GEModule::InitPlatform() {
   m_pFontMgr->SetSystemFontInfo(
-      IFX_SystemFontInfo::CreateDefault(m_pUserFontPaths));
+      SystemFontInfoIface::CreateDefault(m_pUserFontPaths));
 }
 
 void CFX_GEModule::DestroyPlatform() {}
diff --git a/core/fxge/fx_ge_text.cpp b/core/fxge/fx_ge_text.cpp
index 147e712..3739e11 100644
--- a/core/fxge/fx_ge_text.cpp
+++ b/core/fxge/fx_ge_text.cpp
@@ -12,7 +12,7 @@
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/fx_font.h"
 #include "core/fxge/fx_freetype.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 
 namespace {
 
diff --git a/core/fxge/ifx_renderdevicedriver.cpp b/core/fxge/ifx_renderdevicedriver.cpp
deleted file mode 100644
index ff8d8fd..0000000
--- a/core/fxge/ifx_renderdevicedriver.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/fxge/ifx_renderdevicedriver.h"
-
-#include "core/fxcrt/fx_coordinates.h"
-#include "core/fxge/cfx_pathdata.h"
-#include "core/fxge/dib/cfx_dibitmap.h"
-
-IFX_RenderDeviceDriver::~IFX_RenderDeviceDriver() {}
-
-CFX_Matrix IFX_RenderDeviceDriver::GetCTM() const {
-  return CFX_Matrix();
-}
-
-bool IFX_RenderDeviceDriver::StartRendering() {
-  return true;
-}
-
-void IFX_RenderDeviceDriver::EndRendering() {}
-
-bool IFX_RenderDeviceDriver::SetClip_PathStroke(
-    const CFX_PathData* pPathData,
-    const CFX_Matrix* pObject2Device,
-    const CFX_GraphStateData* pGraphState) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::SetPixel(int x, int y, uint32_t color) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::FillRectWithBlend(const FX_RECT* pRect,
-                                               uint32_t fill_color,
-                                               int blend_type) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::DrawCosmeticLine(const CFX_PointF& ptMoveTo,
-                                              const CFX_PointF& ptLineTo,
-                                              uint32_t color,
-                                              int blend_type) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::GetDIBits(const RetainPtr<CFX_DIBitmap>& pBitmap,
-                                       int left,
-                                       int top) {
-  return false;
-}
-
-RetainPtr<CFX_DIBitmap> IFX_RenderDeviceDriver::GetBackDrop() {
-  return RetainPtr<CFX_DIBitmap>();
-}
-
-bool IFX_RenderDeviceDriver::ContinueDIBits(CFX_ImageRenderer* handle,
-                                            PauseIndicatorIface* pPause) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::DrawDeviceText(int nChars,
-                                            const FXTEXT_CHARPOS* pCharPos,
-                                            CFX_Font* pFont,
-                                            const CFX_Matrix* pObject2Device,
-                                            float font_size,
-                                            uint32_t color) {
-  return false;
-}
-
-int IFX_RenderDeviceDriver::GetDriverType() const {
-  return 0;
-}
-
-void IFX_RenderDeviceDriver::ClearDriver() {}
-
-bool IFX_RenderDeviceDriver::DrawShading(const CPDF_ShadingPattern* pPattern,
-                                         const CFX_Matrix* pMatrix,
-                                         const FX_RECT& clip_rect,
-                                         int alpha,
-                                         bool bAlphaMode) {
-  return false;
-}
-
-bool IFX_RenderDeviceDriver::SetBitsWithMask(
-    const RetainPtr<CFX_DIBSource>& pBitmap,
-    const RetainPtr<CFX_DIBSource>& pMask,
-    int left,
-    int top,
-    int bitmap_alpha,
-    int blend_type) {
-  return false;
-}
-
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
-void IFX_RenderDeviceDriver::Flush() {}
-#endif
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
new file mode 100644
index 0000000..d1cd65d
--- /dev/null
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -0,0 +1,99 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fxge/renderdevicedriver_iface.h"
+
+#include "core/fxcrt/fx_coordinates.h"
+#include "core/fxge/cfx_pathdata.h"
+#include "core/fxge/dib/cfx_dibitmap.h"
+
+RenderDeviceDriverIface::~RenderDeviceDriverIface() {}
+
+CFX_Matrix RenderDeviceDriverIface::GetCTM() const {
+  return CFX_Matrix();
+}
+
+bool RenderDeviceDriverIface::StartRendering() {
+  return true;
+}
+
+void RenderDeviceDriverIface::EndRendering() {}
+
+bool RenderDeviceDriverIface::SetClip_PathStroke(
+    const CFX_PathData* pPathData,
+    const CFX_Matrix* pObject2Device,
+    const CFX_GraphStateData* pGraphState) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::SetPixel(int x, int y, uint32_t color) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::FillRectWithBlend(const FX_RECT* pRect,
+                                                uint32_t fill_color,
+                                                int blend_type) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::DrawCosmeticLine(const CFX_PointF& ptMoveTo,
+                                               const CFX_PointF& ptLineTo,
+                                               uint32_t color,
+                                               int blend_type) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::GetDIBits(const RetainPtr<CFX_DIBitmap>& pBitmap,
+                                        int left,
+                                        int top) {
+  return false;
+}
+
+RetainPtr<CFX_DIBitmap> RenderDeviceDriverIface::GetBackDrop() {
+  return RetainPtr<CFX_DIBitmap>();
+}
+
+bool RenderDeviceDriverIface::ContinueDIBits(CFX_ImageRenderer* handle,
+                                             PauseIndicatorIface* pPause) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::DrawDeviceText(int nChars,
+                                             const FXTEXT_CHARPOS* pCharPos,
+                                             CFX_Font* pFont,
+                                             const CFX_Matrix* pObject2Device,
+                                             float font_size,
+                                             uint32_t color) {
+  return false;
+}
+
+int RenderDeviceDriverIface::GetDriverType() const {
+  return 0;
+}
+
+void RenderDeviceDriverIface::ClearDriver() {}
+
+bool RenderDeviceDriverIface::DrawShading(const CPDF_ShadingPattern* pPattern,
+                                          const CFX_Matrix* pMatrix,
+                                          const FX_RECT& clip_rect,
+                                          int alpha,
+                                          bool bAlphaMode) {
+  return false;
+}
+
+bool RenderDeviceDriverIface::SetBitsWithMask(
+    const RetainPtr<CFX_DIBSource>& pBitmap,
+    const RetainPtr<CFX_DIBSource>& pMask,
+    int left,
+    int top,
+    int bitmap_alpha,
+    int blend_type) {
+  return false;
+}
+
+#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+void RenderDeviceDriverIface::Flush() {}
+#endif
diff --git a/core/fxge/ifx_renderdevicedriver.h b/core/fxge/renderdevicedriver_iface.h
similarity index 95%
rename from core/fxge/ifx_renderdevicedriver.h
rename to core/fxge/renderdevicedriver_iface.h
index 90c94da..7dd7a10 100644
--- a/core/fxge/ifx_renderdevicedriver.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_
-#define CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_
+#ifndef CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
+#define CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
 
 #include <memory>
 
@@ -25,9 +25,9 @@
 class PauseIndicatorIface;
 struct FX_RECT;
 
-class IFX_RenderDeviceDriver {
+class RenderDeviceDriverIface {
  public:
-  virtual ~IFX_RenderDeviceDriver();
+  virtual ~RenderDeviceDriverIface();
 
   virtual int GetDeviceCaps(int caps_id) const = 0;
   virtual CFX_Matrix GetCTM() const;
@@ -112,4 +112,4 @@
 #endif
 };
 
-#endif  // CORE_FXGE_IFX_RENDERDEVICEDRIVER_H_
+#endif  // CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 4e60191..e545f9c 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "core/fxge/cfx_pathdata.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 
 class FXTEXT_CHARPOS;
 class SkCanvas;
@@ -22,7 +22,7 @@
 class SkiaState;
 struct SkIRect;
 
-class CFX_SkiaDeviceDriver : public IFX_RenderDeviceDriver {
+class CFX_SkiaDeviceDriver : public RenderDeviceDriverIface {
  public:
   CFX_SkiaDeviceDriver(const RetainPtr<CFX_DIBitmap>& pBitmap,
                        bool bRgbByteOrder,
diff --git a/core/fxge/ifx_systemfontinfo.h b/core/fxge/systemfontinfo_iface.h
similarity index 84%
rename from core/fxge/ifx_systemfontinfo.h
rename to core/fxge/systemfontinfo_iface.h
index 1ae097b..bfd1538 100644
--- a/core/fxge/ifx_systemfontinfo.h
+++ b/core/fxge/systemfontinfo_iface.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXGE_IFX_SYSTEMFONTINFO_H_
-#define CORE_FXGE_IFX_SYSTEMFONTINFO_H_
+#ifndef CORE_FXGE_SYSTEMFONTINFO_IFACE_H_
+#define CORE_FXGE_SYSTEMFONTINFO_IFACE_H_
 
 #include <memory>
 
@@ -14,12 +14,12 @@
 const uint32_t kTableNAME = FXDWORD_GET_MSBFIRST("name");
 const uint32_t kTableTTCF = FXDWORD_GET_MSBFIRST("ttcf");
 
-class IFX_SystemFontInfo {
+class SystemFontInfoIface {
  public:
-  static std::unique_ptr<IFX_SystemFontInfo> CreateDefault(
+  static std::unique_ptr<SystemFontInfoIface> CreateDefault(
       const char** pUserPaths);
 
-  virtual ~IFX_SystemFontInfo() = default;
+  virtual ~SystemFontInfoIface() = default;
 
   virtual bool EnumFontList(CFX_FontMapper* pMapper) = 0;
   virtual void* MapFont(int weight,
@@ -46,4 +46,4 @@
   virtual void DeleteFont(void* hFont) = 0;
 };
 
-#endif  // CORE_FXGE_IFX_SYSTEMFONTINFO_H_
+#endif  // CORE_FXGE_SYSTEMFONTINFO_IFACE_H_
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 41dc220..e20c765 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -23,7 +23,7 @@
 #include "core/fxge/dib/cstretchengine.h"
 #include "core/fxge/fx_font.h"
 #include "core/fxge/fx_freetype.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "core/fxge/win32/cfx_windowsdib.h"
 #include "core/fxge/win32/dwrite_int.h"
 #include "core/fxge/win32/win32_int.h"
@@ -326,12 +326,12 @@
                 const char* family) override;
 };
 
-class CFX_Win32FontInfo final : public IFX_SystemFontInfo {
+class CFX_Win32FontInfo final : public SystemFontInfoIface {
  public:
   CFX_Win32FontInfo();
   ~CFX_Win32FontInfo() override;
 
-  // IFX_SystemFontInfo
+  // SystemFontInfoIface
   bool EnumFontList(CFX_FontMapper* pMapper) override;
   void* MapFont(int weight,
                 bool bItalic,
@@ -679,10 +679,10 @@
 
 int g_pdfium_print_mode = WindowsPrintMode::kModeEmf;
 
-std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
+std::unique_ptr<SystemFontInfoIface> SystemFontInfoIface::CreateDefault(
     const char** pUnused) {
   if (IsGDIEnabled())
-    return std::unique_ptr<IFX_SystemFontInfo>(new CFX_Win32FontInfo);
+    return std::unique_ptr<SystemFontInfoIface>(new CFX_Win32FontInfo);
 
   // Select the fallback font information class if GDI is disabled.
   CFX_Win32FallbackFontInfo* pInfoFallback = new CFX_Win32FallbackFontInfo;
@@ -695,7 +695,7 @@
     fonts_path += "\\Fonts";
     pInfoFallback->AddPath(fonts_path);
   }
-  return std::unique_ptr<IFX_SystemFontInfo>(pInfoFallback);
+  return std::unique_ptr<SystemFontInfoIface>(pInfoFallback);
 }
 
 void CFX_GEModule::InitPlatform() {
@@ -707,7 +707,7 @@
   if (IsGDIEnabled())
     pPlatformData->m_GdiplusExt.Load();
   m_pPlatformData = pPlatformData;
-  m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault(nullptr));
+  m_pFontMgr->SetSystemFontInfo(SystemFontInfoIface::CreateDefault(nullptr));
 }
 
 void CFX_GEModule::DestroyPlatform() {
@@ -1350,7 +1350,7 @@
 CFX_WindowsRenderDevice::~CFX_WindowsRenderDevice() {}
 
 // static
-IFX_RenderDeviceDriver* CFX_WindowsRenderDevice::CreateDriver(HDC hDC) {
+RenderDeviceDriverIface* CFX_WindowsRenderDevice::CreateDriver(HDC hDC) {
   int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
   int obj_type = ::GetObjectType(hDC);
   bool use_printer = device_type == DT_RASPRINTER ||
diff --git a/core/fxge/win32/win32_int.h b/core/fxge/win32/win32_int.h
index f27a420..34d307c 100644
--- a/core/fxge/win32/win32_int.h
+++ b/core/fxge/win32/win32_int.h
@@ -14,7 +14,7 @@
 
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/cfx_pathdata.h"
-#include "core/fxge/ifx_renderdevicedriver.h"
+#include "core/fxge/renderdevicedriver_iface.h"
 #include "core/fxge/win32/cfx_psrenderer.h"
 #include "core/fxge/win32/cpsoutput.h"
 #include "core/fxge/win32/dwrite_int.h"
@@ -129,12 +129,12 @@
   CDWriteExt m_DWriteExt;
 };
 
-class CGdiDeviceDriver : public IFX_RenderDeviceDriver {
+class CGdiDeviceDriver : public RenderDeviceDriverIface {
  protected:
   CGdiDeviceDriver(HDC hDC, int device_class);
   ~CGdiDeviceDriver() override;
 
-  // IFX_RenderDeviceDriver
+  // RenderDeviceDriverIface
   int GetDeviceCaps(int caps_id) const override;
   void SaveState() override;
   void RestoreState(bool bKeepSaved) override;
@@ -270,13 +270,13 @@
   const int m_VertSize;
 };
 
-class CPSPrinterDriver : public IFX_RenderDeviceDriver {
+class CPSPrinterDriver : public RenderDeviceDriverIface {
  public:
   CPSPrinterDriver(HDC hDC, int ps_level, bool bCmykOutput);
   ~CPSPrinterDriver() override;
 
  protected:
-  // IFX_RenderDeviceDriver
+  // RenderDeviceDriverIface
   int GetDeviceCaps(int caps_id) const override;
   bool StartRendering() override;
   void EndRendering() override;
@@ -335,13 +335,13 @@
   CFX_PSRenderer m_PSRenderer;
 };
 
-class CTextOnlyPrinterDriver : public IFX_RenderDeviceDriver {
+class CTextOnlyPrinterDriver : public RenderDeviceDriverIface {
  public:
   explicit CTextOnlyPrinterDriver(HDC hDC);
   ~CTextOnlyPrinterDriver() override;
 
  protected:
-  // IFX_RenderDeviceDriver
+  // RenderDeviceDriverIface
   int GetDeviceCaps(int caps_id) const override;
   void SaveState() override{};
   void RestoreState(bool bKeepSaved) override{};
diff --git a/fpdfsdk/fpdf_sysfontinfo.cpp b/fpdfsdk/fpdf_sysfontinfo.cpp
index 97d02e8..81a749a 100644
--- a/fpdfsdk/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/fpdf_sysfontinfo.cpp
@@ -13,7 +13,7 @@
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/fx_font.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "fpdfsdk/fsdk_define.h"
 #include "fpdfsdk/pwl/cpwl_font_map.h"
 #include "third_party/base/ptr_util.h"
@@ -31,7 +31,7 @@
 static_assert(FXFONT_CHINESEBIG5_CHARSET == FX_CHARSET_ChineseTraditional,
               "Charset must match");
 
-class CFX_ExternalFontInfo final : public IFX_SystemFontInfo {
+class CFX_ExternalFontInfo final : public SystemFontInfoIface {
  public:
   explicit CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {}
   ~CFX_ExternalFontInfo() override {
@@ -126,7 +126,7 @@
 }
 
 struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO {
-  UnownedPtr<IFX_SystemFontInfo> m_pFontInfo;
+  UnownedPtr<SystemFontInfoIface> m_pFontInfo;
 };
 
 static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) {
@@ -195,8 +195,8 @@
 }
 
 FPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo() {
-  std::unique_ptr<IFX_SystemFontInfo> pFontInfo =
-      IFX_SystemFontInfo::CreateDefault(nullptr);
+  std::unique_ptr<SystemFontInfoIface> pFontInfo =
+      SystemFontInfoIface::CreateDefault(nullptr);
   if (!pFontInfo)
     return nullptr;
 
diff --git a/testing/unit_test_main.cpp b/testing/unit_test_main.cpp
index 88855c8..8d8755e 100644
--- a/testing/unit_test_main.cpp
+++ b/testing/unit_test_main.cpp
@@ -32,7 +32,7 @@
     // TODO(dsinclair): This font loading is slow. We should make a test font
     // loader which loads up a single font we use in all tests.
     CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo(
-        IFX_SystemFontInfo::CreateDefault(nullptr));
+        SystemFontInfoIface::CreateDefault(nullptr));
 
     font_mgr_ = pdfium::MakeUnique<CFGAS_FontMgr>();
     if (!font_mgr_->EnumFonts())
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 8102a0d..b4e6bdc 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -17,7 +17,7 @@
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/fx_font.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
@@ -527,7 +527,7 @@
   if (!pFontMapper)
     return false;
 
-  IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
+  SystemFontInfoIface* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
   if (!pSystemFontInfo)
     return false;
 
@@ -593,7 +593,7 @@
   if (!pFontMapper)
     return nullptr;
 
-  IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
+  SystemFontInfoIface* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
   if (!pSystemFontInfo)
     return nullptr;
 
@@ -661,7 +661,7 @@
 
 RetainPtr<IFX_SeekableReadStream> CFGAS_FontMgr::CreateFontStream(
     CFX_FontMapper* pFontMapper,
-    IFX_SystemFontInfo* pSystemFontInfo,
+    SystemFontInfoIface* pSystemFontInfo,
     uint32_t index) {
   void* hFont = pSystemFontInfo->MapFont(
       0, 0, FX_CHARSET_Default, 0, pFontMapper->GetFaceName(index).c_str());
@@ -685,7 +685,7 @@
   if (!pFontMapper)
     return nullptr;
 
-  IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
+  SystemFontInfoIface* pSystemFontInfo = pFontMapper->GetSystemFontInfo();
   if (!pSystemFontInfo)
     return nullptr;
 
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index 210b564..6b98fbe 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -19,7 +19,7 @@
 #include "core/fxcrt/observable.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/fx_freetype.h"
-#include "core/fxge/ifx_systemfontinfo.h"
+#include "core/fxge/systemfontinfo_iface.h"
 #include "xfa/fgas/font/cfgas_pdffontmgr.h"
 
 class CFGAS_GEFont;
@@ -179,7 +179,7 @@
                      int32_t iFaceIndex);
   RetainPtr<IFX_SeekableReadStream> CreateFontStream(
       CFX_FontMapper* pFontMapper,
-      IFX_SystemFontInfo* pSystemFontInfo,
+      SystemFontInfoIface* pSystemFontInfo,
       uint32_t index);
   RetainPtr<IFX_SeekableReadStream> CreateFontStream(
       const ByteString& bsFaceName);
