| // 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 LIB_TONIC_FILE_LOADER_FILE_LOADER_H_ |
| #define LIB_TONIC_FILE_LOADER_FILE_LOADER_H_ |
| |
| #include <memory> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include "third_party/dart/runtime/include/dart_api.h" |
| #include "tonic/common/macros.h" |
| #include "tonic/parsers/packages_map.h" |
| |
| namespace tonic { |
| |
| class FileLoader { |
| public: |
| FileLoader(int dirfd = -1); |
| ~FileLoader(); |
| |
| bool LoadPackagesMap(const std::string& packages); |
| |
| // The path to the `.packages` file the packages map was loaded from. |
| const std::string& packages() const { return packages_; } |
| |
| Dart_Handle HandleLibraryTag(Dart_LibraryTag tag, |
| Dart_Handle library, |
| Dart_Handle url); |
| |
| Dart_Handle CanonicalizeURL(Dart_Handle library, Dart_Handle url); |
| Dart_Handle Import(Dart_Handle url); |
| Dart_Handle Kernel(Dart_Handle url); |
| void SetPackagesUrl(Dart_Handle url); |
| |
| Dart_Handle FetchBytes(const std::string& url, |
| uint8_t*& buffer, |
| intptr_t& buffer_size); |
| |
| static const char kFileURLPrefix[]; |
| static const size_t kFileURLPrefixLength; |
| static const std::string kPathSeparator; |
| |
| private: |
| static std::string SanitizeURIEscapedCharacters(const std::string& str); |
| static std::string SanitizePath(const std::string& path); |
| static std::string CanonicalizeFileURL(const std::string& url); |
| |
| std::string GetFilePathForURL(std::string url); |
| std::string GetFilePathForPackageURL(std::string url); |
| std::string GetFilePathForFileURL(std::string url); |
| |
| std::string GetFileURLForPath(const std::string& path); |
| |
| bool ReadFileToString(const std::string& path, std::string* result); |
| std::pair<uint8_t*, intptr_t> ReadFileToBytes(const std::string& path); |
| |
| int dirfd_; |
| std::string packages_; |
| std::unique_ptr<PackagesMap> packages_map_; |
| std::vector<uint8_t*> kernel_buffers_; |
| |
| TONIC_DISALLOW_COPY_AND_ASSIGN(FileLoader); |
| }; |
| |
| } // namespace tonic |
| |
| #endif // LIB_TONIC_FILE_LOADER_FILE_LOADER_H_ |