summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-09-04 12:39:42 +0100
committerTorne (Richard Coles) <torne@google.com>2013-09-04 12:39:42 +0100
commit51577a0a14ce598d26ab5f43997dedd8673da2db (patch)
tree8816d336a8224c24fba97fced4841774d7119b6f
parent18b139835ef816a2d6354b8989b60205d1eb7544 (diff)
parent754def2f35d1fb9b3b4000fb71399a9b64f7f336 (diff)
downloadsrc-51577a0a14ce598d26ab5f43997dedd8673da2db.tar.gz
Merge from Chromium at DEPS revision 30.0.1599.30
This commit was generated by merge_to_master.py. Change-Id: I4ff13265959fb580a773611eb188a106a8ae1031
-rw-r--r--pdf/SkPDFStream.cpp19
-rw-r--r--pdf/SkPDFStream.h2
2 files changed, 13 insertions, 8 deletions
diff --git a/pdf/SkPDFStream.cpp b/pdf/SkPDFStream.cpp
index 4ae1f39d..e5709764 100644
--- a/pdf/SkPDFStream.cpp
+++ b/pdf/SkPDFStream.cpp
@@ -18,10 +18,8 @@ static bool skip_compression(SkPDFCatalog* catalog) {
SkPDFDocument::kFavorSpeedOverSize_Flags);
}
-SkPDFStream::SkPDFStream(SkStream* stream)
- : fState(kUnused_State),
- fData(stream) {
- SkSafeRef(stream);
+SkPDFStream::SkPDFStream(SkStream* stream) : fState(kUnused_State) {
+ setData(stream);
}
SkPDFStream::SkPDFStream(SkData* data) : fState(kUnused_State) {
@@ -30,9 +28,8 @@ SkPDFStream::SkPDFStream(SkData* data) : fState(kUnused_State) {
SkPDFStream::SkPDFStream(const SkPDFStream& pdfStream)
: SkPDFDict(),
- fState(kUnused_State),
- fData(pdfStream.fData.get()) {
- fData.get()->ref();
+ fState(kUnused_State) {
+ setData(pdfStream.fData.get());
bool removeLength = true;
// Don't uncompress an already compressed stream, but we could.
if (pdfStream.fState == kCompressed_State) {
@@ -64,7 +61,8 @@ void SkPDFStream::emitObject(SkWStream* stream, SkPDFCatalog* catalog,
this->INHERITED::emitObject(stream, catalog, false);
stream->writeText(" stream\n");
- stream->write(fData->getMemoryBase(), fData->getLength());
+ stream->writeStream(fData.get(), fData->getLength());
+ fData->rewind();
stream->writeText("\nendstream");
}
@@ -89,6 +87,11 @@ void SkPDFStream::setData(SkData* data) {
}
void SkPDFStream::setData(SkStream* stream) {
+ // Code assumes that the stream starts at the beginning and is rewindable.
+ if (stream) {
+ SkASSERT(stream->getPosition() == 0);
+ SkASSERT(stream->rewind());
+ }
fData.reset(stream);
SkSafeRef(stream);
}
diff --git a/pdf/SkPDFStream.h b/pdf/SkPDFStream.h
index ed18510c..d7ff115b 100644
--- a/pdf/SkPDFStream.h
+++ b/pdf/SkPDFStream.h
@@ -21,6 +21,8 @@ class SkPDFCatalog;
A stream object in a PDF. Note, all streams must be indirect objects (via
SkObjRef).
+ TODO(vandebo): SkStream should be replaced by SkStreamRewindable when that
+ is feasible.
*/
class SkPDFStream : public SkPDFDict {
public: