1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "flutter/shell/common/run_configuration.h"
6
7 #include <sstream>
8
9 #include "flutter/assets/directory_asset_bundle.h"
10 #include "flutter/fml/file.h"
11 #include "flutter/fml/unique_fd.h"
12 #include "flutter/runtime/dart_vm.h"
13
14 namespace flutter {
15
InferFromSettings(const Settings & settings,fml::RefPtr<fml::TaskRunner> io_worker)16 RunConfiguration RunConfiguration::InferFromSettings(
17 const Settings& settings,
18 fml::RefPtr<fml::TaskRunner> io_worker) {
19 auto asset_manager = std::make_shared<AssetManager>();
20
21 if (fml::UniqueFD::traits_type::IsValid(settings.assets_dir)) {
22 asset_manager->PushBack(std::make_unique<DirectoryAssetBundle>(
23 fml::Duplicate(settings.assets_dir)));
24 }
25
26 asset_manager->PushBack(
27 std::make_unique<DirectoryAssetBundle>(fml::OpenDirectory(
28 settings.assets_path.c_str(), false, fml::FilePermission::kRead)));
29
30 return {IsolateConfiguration::InferFromSettings(settings, asset_manager,
31 io_worker),
32 asset_manager};
33 }
34
RunConfiguration(std::unique_ptr<IsolateConfiguration> configuration)35 RunConfiguration::RunConfiguration(
36 std::unique_ptr<IsolateConfiguration> configuration)
37 : RunConfiguration(std::move(configuration),
38 std::make_shared<AssetManager>()) {}
39
RunConfiguration(std::unique_ptr<IsolateConfiguration> configuration,std::shared_ptr<AssetManager> asset_manager)40 RunConfiguration::RunConfiguration(
41 std::unique_ptr<IsolateConfiguration> configuration,
42 std::shared_ptr<AssetManager> asset_manager)
43 : isolate_configuration_(std::move(configuration)),
44 asset_manager_(std::move(asset_manager)) {}
45
46 RunConfiguration::RunConfiguration(RunConfiguration&&) = default;
47
48 RunConfiguration::~RunConfiguration() = default;
49
IsValid() const50 bool RunConfiguration::IsValid() const {
51 return asset_manager_ && isolate_configuration_;
52 }
53
AddAssetResolver(std::unique_ptr<AssetResolver> resolver)54 bool RunConfiguration::AddAssetResolver(
55 std::unique_ptr<AssetResolver> resolver) {
56 if (!resolver || !resolver->IsValid()) {
57 return false;
58 }
59
60 asset_manager_->PushBack(std::move(resolver));
61 return true;
62 }
63
SetEntrypoint(std::string entrypoint)64 void RunConfiguration::SetEntrypoint(std::string entrypoint) {
65 entrypoint_ = std::move(entrypoint);
66 }
67
SetEntrypointAndLibrary(std::string entrypoint,std::string library)68 void RunConfiguration::SetEntrypointAndLibrary(std::string entrypoint,
69 std::string library) {
70 SetEntrypoint(entrypoint);
71 entrypoint_library_ = std::move(library);
72 }
73
GetAssetManager() const74 std::shared_ptr<AssetManager> RunConfiguration::GetAssetManager() const {
75 return asset_manager_;
76 }
77
GetEntrypoint() const78 const std::string& RunConfiguration::GetEntrypoint() const {
79 return entrypoint_;
80 }
81
GetEntrypointLibrary() const82 const std::string& RunConfiguration::GetEntrypointLibrary() const {
83 return entrypoint_library_;
84 }
85
86 std::unique_ptr<IsolateConfiguration>
TakeIsolateConfiguration()87 RunConfiguration::TakeIsolateConfiguration() {
88 return std::move(isolate_configuration_);
89 }
90
91 } // namespace flutter
92