diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index be87afa..586162c 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -609,7 +609,7 @@
     }
     m_pDocument->AddIndirectObject(gsDict);
     name = RealizeResource(std::move(gsDict), "ExtGState");
-    pPageObj->SetGraphicsResourceNames({name});
+    pPageObj->m_GeneralState.SetGraphicsResourceNames({name});
     m_pObjHolder->GraphicsMapInsert(graphD, name);
   }
   *buf << "/" << PDF_NameEncode(name) << " gs ";
diff --git a/core/fpdfapi/page/cpdf_allstates.cpp b/core/fpdfapi/page/cpdf_allstates.cpp
index 996b3f79..e26c931 100644
--- a/core/fpdfapi/page/cpdf_allstates.cpp
+++ b/core/fpdfapi/page/cpdf_allstates.cpp
@@ -25,7 +25,6 @@
 
 void CPDF_AllStates::Copy(const CPDF_AllStates& src) {
   CopyStates(src);
-  m_GraphicsResourceNames = src.m_GraphicsResourceNames;
   m_TextMatrix = src.m_TextMatrix;
   m_ParentMatrix = src.m_ParentMatrix;
   m_CTM = src.m_CTM;
diff --git a/core/fpdfapi/page/cpdf_allstates.h b/core/fpdfapi/page/cpdf_allstates.h
index 3d4d9a3..d7bbf29 100644
--- a/core/fpdfapi/page/cpdf_allstates.h
+++ b/core/fpdfapi/page/cpdf_allstates.h
@@ -7,10 +7,7 @@
 #ifndef CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_
 #define CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_
 
-#include <vector>
-
 #include "core/fpdfapi/page/cpdf_graphicstates.h"
-#include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/fx_coordinates.h"
 
 class CPDF_Array;
@@ -27,7 +24,7 @@
                     CPDF_StreamContentParser* pParser);
   void SetLineDash(const CPDF_Array* pArray, float phase, float scale);
 
-  std::vector<ByteString> m_GraphicsResourceNames;
+
   CFX_Matrix m_TextMatrix;
   CFX_Matrix m_CTM;
   CFX_Matrix m_ParentMatrix;
diff --git a/core/fpdfapi/page/cpdf_generalstate.cpp b/core/fpdfapi/page/cpdf_generalstate.cpp
index 8ebefa3..10e4c43 100644
--- a/core/fpdfapi/page/cpdf_generalstate.cpp
+++ b/core/fpdfapi/page/cpdf_generalstate.cpp
@@ -263,6 +263,24 @@
   return &m_Ref.GetPrivateCopy()->m_Matrix;
 }
 
+void CPDF_GeneralState::SetGraphicsResourceNames(
+  std::vector<ByteString> names) {
+  m_Ref.GetPrivateCopy()->m_GraphicsResourceNames = std::move(names);
+}
+
+void CPDF_GeneralState::AppendGraphicsResourceName(ByteString name) {
+  m_Ref.GetPrivateCopy()->m_GraphicsResourceNames.push_back(std::move(name));
+}
+
+pdfium::span<const ByteString> CPDF_GeneralState::GetGraphicsResourceNames()
+  const {
+  const StateData* data = m_Ref.GetObject();
+  if (!data) {
+    return {};
+  }
+  return data->m_GraphicsResourceNames;
+}
+
 CPDF_GeneralState::StateData::StateData() = default;
 
 CPDF_GeneralState::StateData::StateData(const StateData& that)
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index 2fb2285..a04a0af 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -7,12 +7,15 @@
 #ifndef CORE_FPDFAPI_PAGE_CPDF_GENERALSTATE_H_
 #define CORE_FPDFAPI_PAGE_CPDF_GENERALSTATE_H_
 
+#include <vector>
+
 #include "constants/transparency.h"
 #include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/shared_copy_on_write.h"
 #include "core/fxge/dib/fx_dib.h"
+#include "third_party/base/containers/span.h"
 
 class CPDF_Dictionary;
 class CPDF_Object;
@@ -79,6 +82,10 @@
   void SetMatrix(const CFX_Matrix& matrix);
   CFX_Matrix* GetMutableMatrix();
 
+  void SetGraphicsResourceNames(std::vector<ByteString> names);
+  void AppendGraphicsResourceName(ByteString name);
+  pdfium::span<const ByteString> GetGraphicsResourceNames() const;
+
  private:
   class StateData final : public Retainable {
    public:
@@ -107,6 +114,8 @@
     RetainPtr<const CPDF_Object> m_pHT;
     float m_Flatness = 1.0f;
     float m_Smoothness = 0.0f;
+    // The resource names of the graphics states that apply to this object.
+    std::vector<ByteString> m_GraphicsResourceNames;
 
    private:
     StateData();
diff --git a/core/fpdfapi/page/cpdf_pageobject.cpp b/core/fpdfapi/page/cpdf_pageobject.cpp
index a7b2156..03c20d1 100644
--- a/core/fpdfapi/page/cpdf_pageobject.cpp
+++ b/core/fpdfapi/page/cpdf_pageobject.cpp
@@ -75,9 +75,9 @@
   return nullptr;
 }
 
-void CPDF_PageObject::SetGraphicsResourceNames(
-    std::vector<ByteString> resource_names) {
-  m_GraphicsResourceNames = std::move(resource_names);
+pdfium::span<const ByteString> CPDF_PageObject::GetGraphicsResourceNames()
+  const {
+  return m_GeneralState.GetGraphicsResourceNames();
 }
 
 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 ccdbbaf..7eaaf41 100644
--- a/core/fpdfapi/page/cpdf_pageobject.h
+++ b/core/fpdfapi/page/cpdf_pageobject.h
@@ -9,12 +9,12 @@
 
 #include <stdint.h>
 
-#include <vector>
 
 #include "core/fpdfapi/page/cpdf_contentmarks.h"
 #include "core/fpdfapi/page/cpdf_graphicstates.h"
 #include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/fx_coordinates.h"
+#include "third_party/base/containers/span.h"
 
 class CPDF_FormObject;
 class CPDF_ImageObject;
@@ -96,10 +96,7 @@
     m_ResourceName = resource_name;
   }
 
-  const std::vector<ByteString>& GetGraphicsResourceNames() const {
-    return m_GraphicsResourceNames;
-  }
-  void SetGraphicsResourceNames(std::vector<ByteString> resource_names);
+  pdfium::span<const ByteString> GetGraphicsResourceNames() const;
 
  protected:
   void CopyData(const CPDF_PageObject* pSrcObject);
@@ -112,9 +109,6 @@
   int32_t m_ContentStream;
   // The resource name for this object.
   ByteString m_ResourceName;
-  // Like `m_ResourceName` but for graphics. Though unlike the resource name,
-  // multiple graphics states can apply at once.
-  std::vector<ByteString> m_GraphicsResourceNames;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_PAGEOBJECT_H_
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index cae9d72..6c559af 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -429,7 +429,6 @@
   if (bText) {
     pObj->m_TextState = m_pCurStates->m_TextState;
   }
-  pObj->SetGraphicsResourceNames(m_pCurStates->m_GraphicsResourceNames);
 }
 
 // static
@@ -790,7 +789,6 @@
   auto pFormObj = std::make_unique<CPDF_FormObject>(GetCurrentStreamIndex(),
                                                     std::move(form), matrix);
   pFormObj->SetResourceName(name);
-  pFormObj->SetGraphicsResourceNames(m_pCurStates->m_GraphicsResourceNames);
   if (!m_pObjectHolder->BackgroundAlphaNeeded() &&
       pFormObj->form()->BackgroundAlphaNeeded()) {
     m_pObjectHolder->SetBackgroundAlphaNeeded(true);
@@ -916,7 +914,7 @@
     return;
 
   CHECK(!name.IsEmpty());
-  m_pCurStates->m_GraphicsResourceNames.push_back(std::move(name));
+  m_pCurStates->m_GeneralState.AppendGraphicsResourceName(std::move(name));
   m_pCurStates->ProcessExtGS(pGS.Get(), this);
 }
 
