Merge changes from topic "webp_contentResolver" am: 1b6354f7ec am: 538289b2ca am: b19ae6922b

Original change: https://android-review.googlesource.com/c/platform/external/skia/+/1426989

Change-Id: I2be8a6963af344baffe0ee8c0c2c8f0e7253606a
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
index 5be39e4..ef395f2 100644
--- a/include/core/SkStream.h
+++ b/include/core/SkStream.h
@@ -313,6 +313,13 @@
      */
     explicit SkFILEStream(FILE* file);
 
+    /** Initialize the stream with an existing C FILE stream.
+     *  The current position of the C FILE stream will be considered the
+     *  beginning of the SkFILEStream and size bytes later will be the end.
+     *  The C FILE stream will be closed in the destructor.
+     */
+    explicit SkFILEStream(FILE* file, size_t size);
+
     ~SkFILEStream() override;
 
     static std::unique_ptr<SkFILEStream> Make(const char path[]) {
@@ -345,6 +352,7 @@
     size_t getLength() const override;
 
 private:
+    explicit SkFILEStream(FILE*, size_t size, size_t start);
     explicit SkFILEStream(std::shared_ptr<FILE>, size_t end, size_t start);
     explicit SkFILEStream(std::shared_ptr<FILE>, size_t end, size_t start, size_t current);
 
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index efd8a71..2705f6f 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -165,6 +165,14 @@
     : SkFILEStream(std::move(file), end, start, start)
 { }
 
+SkFILEStream::SkFILEStream(FILE* file, size_t size, size_t start)
+    : SkFILEStream(std::shared_ptr<FILE>(file, sk_fclose), SkSafeMath::Add(start, size), start)
+{ }
+
+SkFILEStream::SkFILEStream(FILE* file, size_t size)
+    : SkFILEStream(file, size, file ? sk_ftell(file) : 0)
+{ }
+
 SkFILEStream::SkFILEStream(FILE* file)
     : SkFILEStream(std::shared_ptr<FILE>(file, sk_fclose),
                    file ? sk_fgetsize(file) : 0,