diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 8b17295..2c80028 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -322,15 +322,15 @@
   void render(const Scanline& sl);
 
  private:
-  typedef void (CFX_Renderer::*CompositeSpanFunc)(uint8_t*,
-                                                  int,
-                                                  int,
-                                                  int,
-                                                  uint8_t*,
-                                                  int,
-                                                  int,
-                                                  uint8_t*,
-                                                  uint8_t*);
+  using CompositeSpanFunc = void (CFX_Renderer::*)(uint8_t*,
+                                                   int,
+                                                   int,
+                                                   int,
+                                                   uint8_t*,
+                                                   int,
+                                                   int,
+                                                   uint8_t*,
+                                                   uint8_t*);
 
   void CompositeSpan(uint8_t* dest_scan,
                      uint8_t* backdrop_scan,
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 3b46650..4034f1d 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -32,10 +32,10 @@
 class CXFA_Node;
 class CXFA_Object;
 
-typedef CJS_Result (*CJX_MethodCall)(
-    CJX_Object* obj,
-    CFX_V8* runtime,
-    const std::vector<v8::Local<v8::Value>>& params);
+using CJX_MethodCall =
+    CJS_Result (*)(CJX_Object* obj,
+                   CFX_V8* runtime,
+                   const std::vector<v8::Local<v8::Value>>& params);
 
 struct CJX_MethodSpec {
   const char* pName;
diff --git a/fxjs/xfa/fxjse.h b/fxjs/xfa/fxjse.h
index 9007d63..e5f6262 100644
--- a/fxjs/xfa/fxjse.h
+++ b/fxjs/xfa/fxjse.h
@@ -50,24 +50,24 @@
   CFXJSE_HostObject();
 };
 
-typedef CJS_Result (*FXJSE_MethodCallback)(
-    const v8::FunctionCallbackInfo<v8::Value>& info,
-    const WideString& functionName);
-typedef void (*FXJSE_FuncCallback)(
-    CFXJSE_HostObject* pThis,
-    const v8::FunctionCallbackInfo<v8::Value>& info);
-typedef v8::Local<v8::Value> (*FXJSE_PropGetter)(v8::Isolate* pIsolate,
-                                                 v8::Local<v8::Object> pObject,
-                                                 ByteStringView szPropName);
-typedef void (*FXJSE_PropSetter)(v8::Isolate* pIsolate,
-                                 v8::Local<v8::Object> pObject,
-                                 ByteStringView szPropName,
-                                 v8::Local<v8::Value> pValue);
-typedef FXJSE_ClassPropType (*FXJSE_PropTypeGetter)(
-    v8::Isolate* pIsolate,
-    v8::Local<v8::Object> pObject,
-    ByteStringView szPropName,
-    bool bQueryIn);
+using FXJSE_MethodCallback =
+    CJS_Result (*)(const v8::FunctionCallbackInfo<v8::Value>& info,
+                   const WideString& functionName);
+using FXJSE_FuncCallback =
+    void (*)(CFXJSE_HostObject* pThis,
+             const v8::FunctionCallbackInfo<v8::Value>& info);
+using FXJSE_PropGetter = v8::Local<v8::Value> (*)(v8::Isolate* pIsolate,
+                                                  v8::Local<v8::Object> pObject,
+                                                  ByteStringView szPropName);
+using FXJSE_PropSetter = void (*)(v8::Isolate* pIsolate,
+                                  v8::Local<v8::Object> pObject,
+                                  ByteStringView szPropName,
+                                  v8::Local<v8::Value> pValue);
+using FXJSE_PropTypeGetter =
+    FXJSE_ClassPropType (*)(v8::Isolate* pIsolate,
+                            v8::Local<v8::Object> pObject,
+                            ByteStringView szPropName,
+                            bool bQueryIn);
 
 struct FXJSE_FUNCTION_DESCRIPTOR {
   const char* tag;  // `pdfium::fxjse::kFuncTag` always.
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 656df93..9605b82 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -14,11 +14,11 @@
 #include "third_party/base/optional.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
-typedef void (*XFA_ATTRIBUTE_CALLBACK)(v8::Isolate* pIsolate,
-                                       CJX_Object* pNode,
-                                       v8::Local<v8::Value>* pValue,
-                                       bool bSetting,
-                                       XFA_Attribute eAttribute);
+using XFA_ATTRIBUTE_CALLBACK = void (*)(v8::Isolate* pIsolate,
+                                        CJX_Object* pNode,
+                                        v8::Local<v8::Value>* pValue,
+                                        bool bSetting,
+                                        XFA_Attribute eAttribute);
 
 enum class XFA_PacketMatch : uint8_t {
   kCompleteMatch = 1,
