blob: 4e3524948496e35b7aa57cfd69074ea47a182317 [file] [log] [blame] [edit]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_ASSETS_NATIVE_ASSETS_H_
#define FLUTTER_ASSETS_NATIVE_ASSETS_H_
#include <memory>
#include <vector>
#include "flutter/assets/asset_manager.h"
namespace flutter {
// Parses the `NativeAssetsManifest.json` and provides a way to look up assets
// and the available assets for the callbacks that are registered to the Dart VM
// via the dart_api.h.
//
// The engine eagerly populates a native assets manager on startup. This native
// assets manager is stored in the `IsolateGroupData` so it can be accessed on
// the native assets callbacks registered in `InitDartFFIForIsolateGroup`.
class NativeAssetsManager {
public:
NativeAssetsManager() = default;
~NativeAssetsManager() = default;
// Reads the `NativeAssetsManifest.json` bundled in the Flutter application.
void RegisterNativeAssets(const uint8_t* manifest, size_t manifest_size);
void RegisterNativeAssets(const std::shared_ptr<AssetManager>& asset_manager);
// Looks up the asset path for [asset_id].
//
// The asset path consists of a type, and an optional path. For example:
// `["system", "libsqlite3.so"]`.
std::vector<std::string> LookupNativeAsset(std::string_view asset_id);
// Lists the available asset ids.
//
// Used when a user tries to look up an asset with an ID that does not exist
// to report the list of available asset ids.
std::string AvailableNativeAssets();
private:
std::unordered_map<std::string, std::vector<std::string>> parsed_mapping_;
NativeAssetsManager(const NativeAssetsManager&) = delete;
NativeAssetsManager(NativeAssetsManager&&) = delete;
NativeAssetsManager& operator=(const NativeAssetsManager&) = delete;
NativeAssetsManager& operator=(NativeAssetsManager&&) = delete;
};
} // namespace flutter
#endif // FLUTTER_ASSETS_NATIVE_ASSETS_H_