diff --git a/BUILD.gn b/BUILD.gn
index 4132266..250dcfe 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -345,6 +345,7 @@
     "core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp",
     "core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.h",
     "core/fpdfapi/fpdf_parser/cpdf_stream.cpp",
+    "core/fpdfapi/fpdf_parser/cpdf_stream_acc.cpp",
     "core/fpdfapi/fpdf_parser/cpdf_string.cpp",
     "core/fpdfapi/fpdf_parser/cpdf_syntax_parser.cpp",
     "core/fpdfapi/fpdf_parser/cpdf_syntax_parser.h",
@@ -372,6 +373,7 @@
     "core/include/fpdfapi/cpdf_reference.h",
     "core/include/fpdfapi/cpdf_simple_parser.h",
     "core/include/fpdfapi/cpdf_stream.h",
+    "core/include/fpdfapi/cpdf_stream_acc.h",
     "core/include/fpdfapi/cpdf_string.h",
     "core/include/fpdfapi/fpdf_module.h",
     "core/include/fpdfapi/fpdf_page.h",
diff --git a/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp b/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
index 012b152..1dc015f 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
@@ -10,6 +10,7 @@
 #include "core/include/fpdfapi/cpdf_array.h"
 #include "core/include/fpdfapi/cpdf_dictionary.h"
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "core/include/fxcrt/fx_safe_types.h"
 
 namespace {
diff --git a/core/fpdfapi/fpdf_parser/cpdf_parser.cpp b/core/fpdfapi/fpdf_parser/cpdf_parser.cpp
index a39dbc0..b57405f 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_parser.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_parser.cpp
@@ -17,6 +17,7 @@
 #include "core/include/fpdfapi/cpdf_number.h"
 #include "core/include/fpdfapi/cpdf_reference.h"
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "core/include/fpdfapi/ipdf_crypto_handler.h"
 #include "core/include/fxcrt/fx_ext.h"
 #include "core/include/fxcrt/fx_safe_types.h"
diff --git a/core/fpdfapi/fpdf_parser/cpdf_stream.cpp b/core/fpdfapi/fpdf_parser/cpdf_stream.cpp
index 45c946a..7faf9dd 100644
--- a/core/fpdfapi/fpdf_parser/cpdf_stream.cpp
+++ b/core/fpdfapi/fpdf_parser/cpdf_stream.cpp
@@ -7,6 +7,7 @@
 #include "core/include/fpdfapi/cpdf_stream.h"
 
 #include "core/include/fpdfapi/cpdf_dictionary.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "core/include/fpdfapi/fpdf_parser_decode.h"
 
 CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
@@ -134,99 +135,3 @@
   return PDF_DecodeText(stream.GetData(), stream.GetSize());
 }
 
-CPDF_StreamAcc::CPDF_StreamAcc()
-    : m_pData(nullptr),
-      m_dwSize(0),
-      m_bNewBuf(FALSE),
-      m_pImageParam(nullptr),
-      m_pStream(nullptr),
-      m_pSrcData(nullptr) {}
-
-void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream,
-                                 FX_BOOL bRawAccess,
-                                 FX_DWORD estimated_size,
-                                 FX_BOOL bImageAcc) {
-  if (!pStream)
-    return;
-
-  m_pStream = pStream;
-  if (pStream->IsMemoryBased() &&
-      (!pStream->GetDict()->KeyExist("Filter") || bRawAccess)) {
-    m_dwSize = pStream->GetRawSize();
-    m_pData = pStream->GetRawData();
-    return;
-  }
-  uint8_t* pSrcData;
-  FX_DWORD dwSrcSize = pStream->GetRawSize();
-  if (dwSrcSize == 0)
-    return;
-
-  if (!pStream->IsMemoryBased()) {
-    pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize);
-    if (!pStream->ReadRawData(0, pSrcData, dwSrcSize))
-      return;
-  } else {
-    pSrcData = pStream->GetRawData();
-  }
-  uint8_t* pDecryptedData = pSrcData;
-  FX_DWORD dwDecryptedSize = dwSrcSize;
-  if (!pStream->GetDict()->KeyExist("Filter") || bRawAccess) {
-    m_pData = pDecryptedData;
-    m_dwSize = dwDecryptedSize;
-  } else {
-    FX_BOOL bRet = PDF_DataDecode(
-        pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData,
-        m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc);
-    if (!bRet) {
-      m_pData = pDecryptedData;
-      m_dwSize = dwDecryptedSize;
-    }
-  }
-  if (pSrcData != pStream->GetRawData() && pSrcData != m_pData) {
-    FX_Free(pSrcData);
-  }
-  if (pDecryptedData != pSrcData && pDecryptedData != m_pData) {
-    FX_Free(pDecryptedData);
-  }
-  m_pSrcData = nullptr;
-  m_bNewBuf = m_pData != pStream->GetRawData();
-}
-
-CPDF_StreamAcc::~CPDF_StreamAcc() {
-  if (m_bNewBuf) {
-    FX_Free(m_pData);
-  }
-  FX_Free(m_pSrcData);
-}
-
-const uint8_t* CPDF_StreamAcc::GetData() const {
-  if (m_bNewBuf) {
-    return m_pData;
-  }
-  if (!m_pStream) {
-    return nullptr;
-  }
-  return m_pStream->GetRawData();
-}
-
-FX_DWORD CPDF_StreamAcc::GetSize() const {
-  if (m_bNewBuf) {
-    return m_dwSize;
-  }
-  if (!m_pStream) {
-    return 0;
-  }
-  return m_pStream->GetRawSize();
-}
-
-uint8_t* CPDF_StreamAcc::DetachData() {
-  if (m_bNewBuf) {
-    uint8_t* p = m_pData;
-    m_pData = nullptr;
-    m_dwSize = 0;
-    return p;
-  }
-  uint8_t* p = FX_Alloc(uint8_t, m_dwSize);
-  FXSYS_memcpy(p, m_pData, m_dwSize);
-  return p;
-}
diff --git a/core/fpdfapi/fpdf_parser/cpdf_stream_acc.cpp b/core/fpdfapi/fpdf_parser/cpdf_stream_acc.cpp
new file mode 100644
index 0000000..51ab1c0
--- /dev/null
+++ b/core/fpdfapi/fpdf_parser/cpdf_stream_acc.cpp
@@ -0,0 +1,107 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
+
+#include "core/include/fpdfapi/cpdf_dictionary.h"
+#include "core/include/fpdfapi/fpdf_parser_decode.h"
+
+CPDF_StreamAcc::CPDF_StreamAcc()
+    : m_pData(nullptr),
+      m_dwSize(0),
+      m_bNewBuf(FALSE),
+      m_pImageParam(nullptr),
+      m_pStream(nullptr),
+      m_pSrcData(nullptr) {}
+
+void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream,
+                                 FX_BOOL bRawAccess,
+                                 FX_DWORD estimated_size,
+                                 FX_BOOL bImageAcc) {
+  if (!pStream)
+    return;
+
+  m_pStream = pStream;
+  if (pStream->IsMemoryBased() &&
+      (!pStream->GetDict()->KeyExist("Filter") || bRawAccess)) {
+    m_dwSize = pStream->GetRawSize();
+    m_pData = pStream->GetRawData();
+    return;
+  }
+  uint8_t* pSrcData;
+  FX_DWORD dwSrcSize = pStream->GetRawSize();
+  if (dwSrcSize == 0)
+    return;
+
+  if (!pStream->IsMemoryBased()) {
+    pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize);
+    if (!pStream->ReadRawData(0, pSrcData, dwSrcSize))
+      return;
+  } else {
+    pSrcData = pStream->GetRawData();
+  }
+  uint8_t* pDecryptedData = pSrcData;
+  FX_DWORD dwDecryptedSize = dwSrcSize;
+  if (!pStream->GetDict()->KeyExist("Filter") || bRawAccess) {
+    m_pData = pDecryptedData;
+    m_dwSize = dwDecryptedSize;
+  } else {
+    FX_BOOL bRet = PDF_DataDecode(
+        pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData,
+        m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc);
+    if (!bRet) {
+      m_pData = pDecryptedData;
+      m_dwSize = dwDecryptedSize;
+    }
+  }
+  if (pSrcData != pStream->GetRawData() && pSrcData != m_pData) {
+    FX_Free(pSrcData);
+  }
+  if (pDecryptedData != pSrcData && pDecryptedData != m_pData) {
+    FX_Free(pDecryptedData);
+  }
+  m_pSrcData = nullptr;
+  m_bNewBuf = m_pData != pStream->GetRawData();
+}
+
+CPDF_StreamAcc::~CPDF_StreamAcc() {
+  if (m_bNewBuf) {
+    FX_Free(m_pData);
+  }
+  FX_Free(m_pSrcData);
+}
+
+const uint8_t* CPDF_StreamAcc::GetData() const {
+  if (m_bNewBuf) {
+    return m_pData;
+  }
+  if (!m_pStream) {
+    return nullptr;
+  }
+  return m_pStream->GetRawData();
+}
+
+FX_DWORD CPDF_StreamAcc::GetSize() const {
+  if (m_bNewBuf) {
+    return m_dwSize;
+  }
+  if (!m_pStream) {
+    return 0;
+  }
+  return m_pStream->GetRawSize();
+}
+
+uint8_t* CPDF_StreamAcc::DetachData() {
+  if (m_bNewBuf) {
+    uint8_t* p = m_pData;
+    m_pData = nullptr;
+    m_dwSize = 0;
+    return p;
+  }
+  uint8_t* p = FX_Alloc(uint8_t, m_dwSize);
+  FXSYS_memcpy(p, m_pData, m_dwSize);
+  return p;
+}
diff --git a/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
index 1f0ab5f..3df220b 100644
--- a/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
@@ -11,6 +11,7 @@
 #include "core/include/fpdfapi/cpdf_number.h"
 #include "core/include/fpdfapi/cpdf_reference.h"
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "core/include/fpdfapi/cpdf_string.h"
 #include "core/include/fpdfapi/fpdf_parser_decode.h"
 #include "core/include/fxcrt/fx_ext.h"
diff --git a/core/fxcodec/jbig2/JBig2_BitStream.cpp b/core/fxcodec/jbig2/JBig2_BitStream.cpp
index 87451c2..3e042bc 100644
--- a/core/fxcodec/jbig2/JBig2_BitStream.cpp
+++ b/core/fxcodec/jbig2/JBig2_BitStream.cpp
@@ -9,6 +9,7 @@
 #include <algorithm>
 
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 
 CJBig2_BitStream::CJBig2_BitStream(CPDF_StreamAcc* pSrcStream)
     : m_pBuf(pSrcStream->GetData()),
diff --git a/core/fxcodec/jbig2/JBig2_Context.cpp b/core/fxcodec/jbig2/JBig2_Context.cpp
index 0a17fff..d5eeda0 100644
--- a/core/fxcodec/jbig2/JBig2_Context.cpp
+++ b/core/fxcodec/jbig2/JBig2_Context.cpp
@@ -21,6 +21,7 @@
 #include "core/fxcodec/jbig2/JBig2_SddProc.h"
 #include "core/fxcodec/jbig2/JBig2_TrdProc.h"
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "third_party/base/stl_util.h"
 
 namespace {
diff --git a/core/include/fpdfapi/cpdf_object.h b/core/include/fpdfapi/cpdf_object.h
index 2add552..97499d1 100644
--- a/core/include/fpdfapi/cpdf_object.h
+++ b/core/include/fpdfapi/cpdf_object.h
@@ -150,4 +150,12 @@
   return obj ? obj->AsReference() : nullptr;
 }
 
+inline CPDF_Stream* ToStream(CPDF_Object* obj) {
+  return obj ? obj->AsStream() : nullptr;
+}
+
+inline const CPDF_Stream* ToStream(const CPDF_Object* obj) {
+  return obj ? obj->AsStream() : nullptr;
+}
+
 #endif  // CORE_INCLUDE_FPDFAPI_CPDF_OBJECT_H_
diff --git a/core/include/fpdfapi/cpdf_stream.h b/core/include/fpdfapi/cpdf_stream.h
index fd3b8c0..579a3a9 100644
--- a/core/include/fpdfapi/cpdf_stream.h
+++ b/core/include/fpdfapi/cpdf_stream.h
@@ -7,6 +7,7 @@
 #ifndef CORE_INCLUDE_FPDFAPI_CPDF_STREAM_H_
 #define CORE_INCLUDE_FPDFAPI_CPDF_STREAM_H_
 
+#include "core/include/fpdfapi/cpdf_dictionary.h"
 #include "core/include/fpdfapi/cpdf_object.h"
 #include "core/include/fxcrt/fx_stream.h"
 
@@ -57,43 +58,4 @@
   };
 };
 
-inline CPDF_Stream* ToStream(CPDF_Object* obj) {
-  return obj ? obj->AsStream() : nullptr;
-}
-
-inline const CPDF_Stream* ToStream(const CPDF_Object* obj) {
-  return obj ? obj->AsStream() : nullptr;
-}
-
-class CPDF_StreamAcc {
- public:
-  CPDF_StreamAcc();
-  ~CPDF_StreamAcc();
-
-  void LoadAllData(const CPDF_Stream* pStream,
-                   FX_BOOL bRawAccess = FALSE,
-                   FX_DWORD estimated_size = 0,
-                   FX_BOOL bImageAcc = FALSE);
-
-  const CPDF_Stream* GetStream() const { return m_pStream; }
-  CPDF_Dictionary* GetDict() const {
-    return m_pStream ? m_pStream->GetDict() : nullptr;
-  }
-  const uint8_t* GetData() const;
-  FX_DWORD GetSize() const;
-  const CFX_ByteString& GetImageDecoder() const { return m_ImageDecoder; }
-  const CPDF_Dictionary* GetImageParam() const { return m_pImageParam; }
-
-  uint8_t* DetachData();
-
- protected:
-  uint8_t* m_pData;
-  FX_DWORD m_dwSize;
-  FX_BOOL m_bNewBuf;
-  CFX_ByteString m_ImageDecoder;
-  CPDF_Dictionary* m_pImageParam;
-  const CPDF_Stream* m_pStream;
-  uint8_t* m_pSrcData;
-};
-
 #endif  // CORE_INCLUDE_FPDFAPI_CPDF_STREAM_H_
diff --git a/core/include/fpdfapi/cpdf_stream_acc.h b/core/include/fpdfapi/cpdf_stream_acc.h
new file mode 100644
index 0000000..77ad272
--- /dev/null
+++ b/core/include/fpdfapi/cpdf_stream_acc.h
@@ -0,0 +1,46 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_INCLUDE_FPDFAPI_CPDF_STREAM_ACC_H_
+#define CORE_INCLUDE_FPDFAPI_CPDF_STREAM_ACC_H_
+
+#include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_dictionary.h"
+#include "core/include/fxcrt/fx_string.h"
+#include "core/include/fxcrt/fx_system.h"
+
+class CPDF_StreamAcc {
+ public:
+  CPDF_StreamAcc();
+  ~CPDF_StreamAcc();
+
+  void LoadAllData(const CPDF_Stream* pStream,
+                   FX_BOOL bRawAccess = FALSE,
+                   FX_DWORD estimated_size = 0,
+                   FX_BOOL bImageAcc = FALSE);
+
+  const CPDF_Stream* GetStream() const { return m_pStream; }
+  CPDF_Dictionary* GetDict() const {
+    return m_pStream ? m_pStream->GetDict() : nullptr;
+  }
+
+  const uint8_t* GetData() const;
+  FX_DWORD GetSize() const;
+  const CFX_ByteString& GetImageDecoder() const { return m_ImageDecoder; }
+  const CPDF_Dictionary* GetImageParam() const { return m_pImageParam; }
+  uint8_t* DetachData();
+
+ protected:
+  uint8_t* m_pData;
+  FX_DWORD m_dwSize;
+  FX_BOOL m_bNewBuf;
+  CFX_ByteString m_ImageDecoder;
+  CPDF_Dictionary* m_pImageParam;
+  const CPDF_Stream* m_pStream;
+  uint8_t* m_pSrcData;
+};
+
+#endif  // CORE_INCLUDE_FPDFAPI_CPDF_STREAM_ACC_H_
diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h
index 06b1245..7c19dd5 100644
--- a/core/include/fpdfapi/fpdf_resource.h
+++ b/core/include/fpdfapi/fpdf_resource.h
@@ -10,6 +10,7 @@
 #include <map>
 
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "core/include/fxcrt/fx_system.h"
 #include "core/include/fxge/fx_font.h"
 
diff --git a/pdfium.gyp b/pdfium.gyp
index acd17f3..ab2d4ca 100644
--- a/pdfium.gyp
+++ b/pdfium.gyp
@@ -265,6 +265,7 @@
         'core/include/fpdfapi/cpdf_reference.h',
         'core/include/fpdfapi/cpdf_simple_parser.h',
         'core/include/fpdfapi/cpdf_stream.h',
+        'core/include/fpdfapi/cpdf_stream_acc.h',
         'core/include/fpdfapi/cpdf_string.h',
         'core/include/fpdfapi/fpdf_module.h',
         'core/include/fpdfapi/fpdf_page.h',
@@ -384,6 +385,7 @@
         'core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.cpp',
         'core/fpdfapi/fpdf_parser/cpdf_standard_security_handler.h',
         'core/fpdfapi/fpdf_parser/cpdf_stream.cpp',
+        'core/fpdfapi/fpdf_parser/cpdf_stream_acc.cpp',
         'core/fpdfapi/fpdf_parser/cpdf_string.cpp',
         'core/fpdfapi/fpdf_parser/cpdf_syntax_parser.cpp',
         'core/fpdfapi/fpdf_parser/cpdf_syntax_parser.h',
diff --git a/xfa/fxfa/app/xfa_ffapp.h b/xfa/fxfa/app/xfa_ffapp.h
index 0374d4a..675c6ba 100644
--- a/xfa/fxfa/app/xfa_ffapp.h
+++ b/xfa/fxfa/app/xfa_ffapp.h
@@ -8,6 +8,7 @@
 #define XFA_FXFA_APP_XFA_FFAPP_H_
 
 #include "core/include/fpdfapi/cpdf_stream.h"
+#include "core/include/fpdfapi/cpdf_stream_acc.h"
 #include "xfa/fgas/font/fgas_font.h"
 #include "xfa/include/fwl/adapter/fwl_adapternative.h"
 #include "xfa/include/fwl/adapter/fwl_sdadapterimp.h"
