Handle getMemoryBase returning NULL in WriteTask.

DM::WriteTask::fData was changed from a data to a stream in
"SkData to SkStreamAsset to avoid unneeded copying"
https://skia.googlesource.com/skia/+/a4c6094177ebde18c706cbcfbd2013d0a088e0ee
However, DM::WriteTask::draw was not updated to handle this,
resulting in segfaults when trying to write out PDF files.

Review URL: https://codereview.chromium.org/627473002
diff --git a/dm/DMWriteTask.cpp b/dm/DMWriteTask.cpp
index 08feb98..7d0df94 100644
--- a/dm/DMWriteTask.cpp
+++ b/dm/DMWriteTask.cpp
@@ -64,11 +64,9 @@
     }
 }
 
-static SkString get_md5(const void* ptr, size_t len) {
-    SkMD5 hasher;
-    hasher.write(ptr, len);
+static SkString get_md5_string(SkMD5* hasher) {
     SkMD5::Digest digest;
-    hasher.finish(digest);
+    hasher->finish(digest);
 
     SkString md5;
     for (int i = 0; i < 16; i++) {
@@ -77,6 +75,18 @@
     return md5;
 }
 
+static SkString get_md5(const void* ptr, size_t len) {
+    SkMD5 hasher;
+    hasher.write(ptr, len);
+    return get_md5_string(&hasher);
+}
+
+static SkString get_md5(SkStreamAsset* stream) {
+    SkMD5 hasher;
+    hasher.writeStream(stream, stream->getLength());
+    return get_md5_string(&hasher);
+}
+
 struct JsonData {
     SkString name;            // E.g. "ninepatch-stretch", "desk-gws_skp"
     SkString config;          //      "gpu", "8888"
@@ -91,7 +101,7 @@
     SkString md5;
     {
         SkAutoLockPixels lock(fBitmap);
-        md5 = fData ? get_md5(fData->getMemoryBase(), fData->getLength())
+        md5 = fData ? get_md5(fData)
                     : get_md5(fBitmap.getPixels(), fBitmap.getSize());
     }