Mark modified content streams as dirty in CPDF_PageObjectHolder.

Bug: pdfium:1051
Change-Id: Ib3376eea32336437d148f8f9c0017d6b8f9fb556
Reviewed-on: https://pdfium-review.googlesource.com/33770
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
index cca7565..3eb88ec 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
@@ -119,6 +119,11 @@
 
   it->release();
   m_PageObjectList.erase(it);
+
+  int32_t content_stream = pPageObj->GetContentStream();
+  if (content_stream >= 0)
+    m_DirtyStreams.insert(content_stream);
+
   return true;
 }
 
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 1c42791..d18f400 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -9,6 +9,7 @@
 
 #include <map>
 #include <memory>
+#include <set>
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_pageobjectlist.h"
@@ -84,6 +85,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(); }
 
   UnownedPtr<CPDF_Dictionary> m_pPageResources;
   UnownedPtr<CPDF_Dictionary> m_pResources;
@@ -105,6 +108,9 @@
   std::unique_ptr<CPDF_ContentParser> m_pParser;
   CPDF_PageObjectList m_PageObjectList;
   CFX_Matrix m_LastCTM;
+
+  // The indexes of Content streams that are dirty and need to be regenerated.
+  std::set<int32_t> m_DirtyStreams;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_PAGEOBJECTHOLDER_H_