diff --git a/core/fpdfapi/page/cpdf_allstates.cpp b/core/fpdfapi/page/cpdf_allstates.cpp
index 8174af4..af85453 100644
--- a/core/fpdfapi/page/cpdf_allstates.cpp
+++ b/core/fpdfapi/page/cpdf_allstates.cpp
@@ -35,8 +35,8 @@
   m_TextHorzScale = src.m_TextHorzScale;
 }
 
-void CPDF_AllStates::DefaultStates() {
-  m_GraphicStates.DefaultStates();
+void CPDF_AllStates::SetDefaultStates() {
+  m_GraphicStates.SetDefaultStates();
 }
 
 void CPDF_AllStates::SetLineDash(const CPDF_Array* pArray,
diff --git a/core/fpdfapi/page/cpdf_allstates.h b/core/fpdfapi/page/cpdf_allstates.h
index 3c0f0f6..e4a338e 100644
--- a/core/fpdfapi/page/cpdf_allstates.h
+++ b/core/fpdfapi/page/cpdf_allstates.h
@@ -20,7 +20,7 @@
   ~CPDF_AllStates();
 
   void Copy(const CPDF_AllStates& src);
-  void DefaultStates();
+  void SetDefaultStates();
 
   void ProcessExtGS(const CPDF_Dictionary* pGS,
                     CPDF_StreamContentParser* pParser);
diff --git a/core/fpdfapi/page/cpdf_graphicstates.cpp b/core/fpdfapi/page/cpdf_graphicstates.cpp
index 8f19a2d..f144fe8 100644
--- a/core/fpdfapi/page/cpdf_graphicstates.cpp
+++ b/core/fpdfapi/page/cpdf_graphicstates.cpp
@@ -10,7 +10,7 @@
 
 CPDF_GraphicStates::~CPDF_GraphicStates() = default;
 
-void CPDF_GraphicStates::DefaultStates() {
+void CPDF_GraphicStates::SetDefaultStates() {
   m_ColorState.Emplace();
   m_ColorState.SetDefault();
 }
diff --git a/core/fpdfapi/page/cpdf_graphicstates.h b/core/fpdfapi/page/cpdf_graphicstates.h
index 1072b47..a06a21f 100644
--- a/core/fpdfapi/page/cpdf_graphicstates.h
+++ b/core/fpdfapi/page/cpdf_graphicstates.h
@@ -19,7 +19,7 @@
   ~CPDF_GraphicStates();
 
   void CopyStates(const CPDF_GraphicStates& src);
-  void DefaultStates();
+  void SetDefaultStates();
 
   const CPDF_ClipPath& clip_path() const { return m_ClipPath; }
   CPDF_ClipPath& mutable_clip_path() { return m_ClipPath; }
diff --git a/core/fpdfapi/page/cpdf_pageobject.cpp b/core/fpdfapi/page/cpdf_pageobject.cpp
index 0782d18..0655d20 100644
--- a/core/fpdfapi/page/cpdf_pageobject.cpp
+++ b/core/fpdfapi/page/cpdf_pageobject.cpp
@@ -80,8 +80,8 @@
   return general_state().GetGraphicsResourceNames();
 }
 
-void CPDF_PageObject::DefaultStates() {
-  m_GraphicStates.DefaultStates();
+void CPDF_PageObject::SetDefaultStates() {
+  m_GraphicStates.SetDefaultStates();
 }
 
 void CPDF_PageObject::CopyData(const CPDF_PageObject* pSrc) {
diff --git a/core/fpdfapi/page/cpdf_pageobject.h b/core/fpdfapi/page/cpdf_pageobject.h
index e2f15be..29ffd2e 100644
--- a/core/fpdfapi/page/cpdf_pageobject.h
+++ b/core/fpdfapi/page/cpdf_pageobject.h
@@ -132,7 +132,7 @@
 
   const CPDF_GraphicStates& graphic_states() const { return m_GraphicStates; }
 
-  void DefaultStates();
+  void SetDefaultStates();
 
  protected:
   void CopyData(const CPDF_PageObject* pSrcObject);
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 282ed31..631539f 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -194,7 +194,7 @@
       }
     }
   } else {
-    m_InitialStates.DefaultStates();
+    m_InitialStates.SetDefaultStates();
   }
 }
 
diff --git a/fpdfsdk/fpdf_editpath.cpp b/fpdfsdk/fpdf_editpath.cpp
index c0b8db3..4c07d1c 100644
--- a/fpdfsdk/fpdf_editpath.cpp
+++ b/fpdfsdk/fpdf_editpath.cpp
@@ -58,7 +58,7 @@
                                                                     float y) {
   auto pPathObj = std::make_unique<CPDF_PathObject>();
   pPathObj->path().AppendPoint(CFX_PointF(x, y), CFX_Path::Point::Type::kMove);
-  pPathObj->DefaultStates();
+  pPathObj->SetDefaultStates();
 
   // Caller takes ownership.
   return FPDFPageObjectFromCPDFPageObject(pPathObj.release());
@@ -70,7 +70,7 @@
                                                                     float h) {
   auto pPathObj = std::make_unique<CPDF_PathObject>();
   pPathObj->path().AppendRect(x, y, x + w, y + h);
-  pPathObj->DefaultStates();
+  pPathObj->SetDefaultStates();
 
   // Caller takes ownership.
   return FPDFPageObjectFromCPDFPageObject(pPathObj.release());
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index c09880b..aef2de8 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -493,7 +493,7 @@
   auto pTextObj = std::make_unique<CPDF_TextObject>();
   pTextObj->mutable_text_state().SetFont(std::move(pFont));
   pTextObj->mutable_text_state().SetFontSize(font_size);
-  pTextObj->DefaultStates();
+  pTextObj->SetDefaultStates();
 
   // Caller takes ownership.
   return FPDFPageObjectFromCPDFPageObject(pTextObj.release());
@@ -686,7 +686,7 @@
       CPDF_DocPageData::FromDocument(pDoc)->GetFont(
           pFont->GetMutableFontDict()));
   pTextObj->mutable_text_state().SetFontSize(font_size);
-  pTextObj->DefaultStates();
+  pTextObj->SetDefaultStates();
   return FPDFPageObjectFromCPDFPageObject(pTextObj.release());
 }
 
