提交 76fce732 编写于 作者: A Adam Barth 提交者: GitHub

Add support for assets on Fuchsia (#3162)

上级 f07c32d2
......@@ -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",
......
......@@ -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<blink::SemanticsNode> update) {}
void RuntimeHolder::HandlePlatformMessage(
ftl::RefPtr<blink::PlatformMessage> 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<char> bundle) {
root_bundle_data_ = std::move(bundle);
asset_store_ = ftl::MakeRefCounted<blink::ZipAssetStore>(
GetUnzipperProviderForRootBundle(), blink::Threads::IO());
new blink::ZipAssetBundle(mojo::GetProxy(&root_bundle_), asset_store_);
}
void RuntimeHolder::HandleAssetPlatformMessage(
ftl::RefPtr<blink::PlatformMessage> message) {
ftl::RefPtr<blink::PlatformMessageResponse> response = message->response();
if (!response)
return;
const auto& data = message->data();
std::string asset_name(reinterpret_cast<const char*>(data.data()),
data.size());
std::vector<uint8_t> 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() {
......
......@@ -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<char> bundle);
blink::UnzipperProvider GetUnzipperProviderForRootBundle();
void HandleAssetPlatformMessage(ftl::RefPtr<blink::PlatformMessage> message);
void BeginFrame();
void OnFrameComplete();
......@@ -63,7 +63,6 @@ class RuntimeHolder : public blink::RuntimeDelegate,
std::vector<char> root_bundle_data_;
ftl::RefPtr<blink::ZipAssetStore> asset_store_;
mojo::asset_bundle::AssetBundlePtr root_bundle_;
std::unique_ptr<Rasterizer> rasterizer_;
std::unique_ptr<blink::RuntimeController> runtime_;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册