[skottie] Make the resource provider factory argument optional

Most of the existing clients don't care about nested resources.

Change-Id: Ie7991dd25ebbd679b5b49e5624772c7e19e7ec79
Reviewed-on: https://skia-review.googlesource.com/131141
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/modules/skottie/fuzz/FuzzSkottieJSON.cpp b/modules/skottie/fuzz/FuzzSkottieJSON.cpp
index 35135f1..23c77ce 100644
--- a/modules/skottie/fuzz/FuzzSkottieJSON.cpp
+++ b/modules/skottie/fuzz/FuzzSkottieJSON.cpp
@@ -10,16 +10,8 @@
 #include "SkStream.h"
 
 void FuzzSkottieJSON(sk_sp<SkData> bytes) {
-    // Always returns nullptr to any resource
-    class EmptyResourceProvider final : public skottie::ResourceProvider {
-    public:
-        std::unique_ptr<SkStream> openStream(const char resource[]) const override {
-            return nullptr;
-        }
-    };
     SkMemoryStream stream(bytes);
-    EmptyResourceProvider erp;
-    auto animation = skottie::Animation::Make(&stream, erp);
+    auto animation = skottie::Animation::Make(&stream);
     if (!animation) {
         return;
     }
diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h
index 906ea82..5114ae4 100644
--- a/modules/skottie/include/Skottie.h
+++ b/modules/skottie/include/Skottie.h
@@ -42,7 +42,7 @@
                fAnimatorCount;
     };
 
-    static sk_sp<Animation> Make(SkStream*, const ResourceProvider&, Stats* = nullptr);
+    static sk_sp<Animation> Make(SkStream*, const ResourceProvider* = nullptr, Stats* = nullptr);
     static sk_sp<Animation> MakeFromFile(const char path[], const ResourceProvider* = nullptr,
                                          Stats* = nullptr);
 
diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp
index ddea1be..250aa2e 100644
--- a/modules/skottie/src/Skottie.cpp
+++ b/modules/skottie/src/Skottie.cpp
@@ -747,7 +747,7 @@
         return nullptr;
     }
 
-    auto animation = Animation::Make(resStream.get(), ctx->fResources);
+    auto animation = Animation::Make(resStream.get(), &ctx->fResources);
     if (!animation) {
         LOG("!! Could not load nested animation: %s\n", path);
         return nullptr;
@@ -1191,7 +1191,7 @@
 
 } // namespace
 
-sk_sp<Animation> Animation::Make(SkStream* stream, const ResourceProvider& res, Stats* stats) {
+sk_sp<Animation> Animation::Make(SkStream* stream, const ResourceProvider* provider, Stats* stats) {
     Stats stats_storage;
     if (!stats)
         stats = &stats_storage;
@@ -1225,8 +1225,13 @@
         return nullptr;
     }
 
-    const auto anim =
-        sk_sp<Animation>(new Animation(res, std::move(version), size, fps, json, stats));
+    class NullResourceProvider final : public ResourceProvider {
+        std::unique_ptr<SkStream> openStream(const char[]) const { return nullptr; }
+    };
+
+    const NullResourceProvider null_provider;
+    const auto anim = sk_sp<Animation>(new Animation(provider ? *provider : null_provider,
+                                                     std::move(version), size, fps, json, stats));
     const auto t2 = SkTime::GetMSecs();
     stats->fSceneParseTimeMS = t2 - t1;
     stats->fTotalLoadTimeMS  = t2 - t0;
@@ -1258,7 +1263,7 @@
         defaultProvider = skstd::make_unique<DirectoryResourceProvider>(SkOSPath::Dirname(path));
     }
 
-    return Make(jsonStream.get(), res ? *res : *defaultProvider, stats);
+    return Make(jsonStream.get(), res ? res : defaultProvider.get(), stats);
 }
 
 Animation::Animation(const ResourceProvider& resources,