Tweak CPDF_PageObjectHolder's methods for dirty streams.

Replace GetDirtyStreams() and ClearDirtyStreams() with
TakeDirtyStreams(), since that is most convenient for the primary caller
in CPDF_PageContentGenerator. Provide HasDirtyStreams(), since another
place checks for that.

Change-Id: I9dcea6c01f944d3a074ca7c20a482e12420e6ba0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56299
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index cdc8a57..0f1bc14 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -84,8 +84,7 @@
     if (pPageObj->IsDirty())
       all_dirty_streams.insert(pPageObj->GetContentStream());
   }
-  const std::set<int32_t>& marked_dirty_streams =
-      m_pObjHolder->GetDirtyStreams();
+  std::set<int32_t> marked_dirty_streams = m_pObjHolder->TakeDirtyStreams();
   all_dirty_streams.insert(marked_dirty_streams.begin(),
                            marked_dirty_streams.end());
 
@@ -140,9 +139,6 @@
     }
   }
 
-  // Clear dirty streams in m_pObjHolder
-  m_pObjHolder->ClearDirtyStreams();
-
   return streams;
 }
 
diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index 87e27ca..35a8acd 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -106,7 +106,7 @@
   // updated.
   // Since this is only called by CPDF_PageContentGenerator::GenerateContent(),
   // which cleans up the dirty streams first, this should always be true.
-  ASSERT(obj_holder_->GetDirtyStreams().empty());
+  ASSERT(!obj_holder_->HasDirtyStreams());
 
   if (contents_stream_) {
     // Only stream that can be removed is 0.
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
index 51499b0..73c3495 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
@@ -100,6 +100,12 @@
   return CFX_FloatRect(left, bottom, right, top);
 }
 
+std::set<int32_t> CPDF_PageObjectHolder::TakeDirtyStreams() {
+  auto dirty_streams = std::move(m_DirtyStreams);
+  m_DirtyStreams.clear();
+  return dirty_streams;
+}
+
 void CPDF_PageObjectHolder::LoadTransInfo() {
   if (!m_pDict)
     return;
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 9194224..fbeaf88 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -98,8 +98,8 @@
   void AddImageMaskBoundingBox(const CFX_FloatRect& box);
   void Transform(const CFX_Matrix& matrix);
   CFX_FloatRect CalcBoundingBox() const;
-  const std::set<int32_t>& GetDirtyStreams() const { return m_DirtyStreams; }
-  void ClearDirtyStreams() { m_DirtyStreams.clear(); }
+  bool HasDirtyStreams() const { return !m_DirtyStreams.empty(); }
+  std::set<int32_t> TakeDirtyStreams();
 
   RetainPtr<CPDF_Dictionary> m_pPageResources;
   RetainPtr<CPDF_Dictionary> m_pResources;