From 76fce732071f4a982f05b4f8c23dc12e7e56a395 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Fri, 21 Oct 2016 13:03:16 -0700 Subject: [PATCH] Add support for assets on Fuchsia (#3162) --- content_handler/BUILD.gn | 1 - content_handler/runtime_holder.cc | 22 +++++++++++++++++++++- content_handler/runtime_holder.h | 3 +-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/content_handler/BUILD.gn b/content_handler/BUILD.gn index d3bfd8efe..8f5891f99 100644 --- a/content_handler/BUILD.gn +++ b/content_handler/BUILD.gn @@ -43,7 +43,6 @@ executable("content_handler") { "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", "//mojo/public/interfaces/application", - "//mojo/services/asset_bundle/interfaces", "//mojo/services/content_handler/interfaces", "//mojo/services/framebuffer/interfaces", "//mojo/system", diff --git a/content_handler/runtime_holder.cc b/content_handler/runtime_holder.cc index 343656614..25bab9c58 100644 --- a/content_handler/runtime_holder.cc +++ b/content_handler/runtime_holder.cc @@ -24,6 +24,7 @@ namespace flutter_content_handler { namespace { constexpr char kSnapshotKey[] = "snapshot_blob.bin"; +constexpr char kAssetPluginChannel[] = "flutter/assets"; // Maximum number of frames in flight. constexpr int kMaxPipelineDepth = 3; @@ -148,6 +149,10 @@ void RuntimeHolder::UpdateSemantics(std::vector update) {} void RuntimeHolder::HandlePlatformMessage( ftl::RefPtr message) { + if (message->channel() == kAssetPluginChannel) { + HandleAssetPlatformMessage(std::move(message)); + return; + } if (auto response = message->response()) response->CompleteWithError(); } @@ -161,7 +166,22 @@ void RuntimeHolder::InitRootBundle(std::vector bundle) { root_bundle_data_ = std::move(bundle); asset_store_ = ftl::MakeRefCounted( GetUnzipperProviderForRootBundle(), blink::Threads::IO()); - new blink::ZipAssetBundle(mojo::GetProxy(&root_bundle_), asset_store_); +} + +void RuntimeHolder::HandleAssetPlatformMessage( + ftl::RefPtr message) { + ftl::RefPtr response = message->response(); + if (!response) + return; + const auto& data = message->data(); + std::string asset_name(reinterpret_cast(data.data()), + data.size()); + std::vector asset_data; + if (asset_store_ && asset_store_->GetAsBuffer(asset_name, &asset_data)) { + response->Complete(std::move(asset_data)); + } else { + response->CompleteWithError(); + } } blink::UnzipperProvider RuntimeHolder::GetUnzipperProviderForRootBundle() { diff --git a/content_handler/runtime_holder.h b/content_handler/runtime_holder.h index e752e4ca5..e6e52dc87 100644 --- a/content_handler/runtime_holder.h +++ b/content_handler/runtime_holder.h @@ -18,7 +18,6 @@ #include "lib/ftl/memory/weak_ptr.h" #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/interfaces/application/application_connector.mojom.h" -#include "mojo/services/asset_bundle/interfaces/asset_bundle.mojom.h" namespace flutter_content_handler { class Rasterizer; @@ -56,6 +55,7 @@ class RuntimeHolder : public blink::RuntimeDelegate, void InitRootBundle(std::vector bundle); blink::UnzipperProvider GetUnzipperProviderForRootBundle(); + void HandleAssetPlatformMessage(ftl::RefPtr message); void BeginFrame(); void OnFrameComplete(); @@ -63,7 +63,6 @@ class RuntimeHolder : public blink::RuntimeDelegate, std::vector root_bundle_data_; ftl::RefPtr asset_store_; - mojo::asset_bundle::AssetBundlePtr root_bundle_; std::unique_ptr rasterizer_; std::unique_ptr runtime_; -- GitLab