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 "runner_context.h"
6
7 namespace flutter_runner {
8
RunnerContext(std::shared_ptr<sys::ServiceDirectory> svc,zx::channel directory_request)9 RunnerContext::RunnerContext(std::shared_ptr<sys::ServiceDirectory> svc,
10 zx::channel directory_request)
11 : svc_(std::move(svc)),
12 root_dir_(std::make_shared<vfs::PseudoDir>()),
13 public_dir_(std::make_shared<vfs::PseudoDir>()),
14 debug_dir_(std::make_shared<vfs::PseudoDir>()),
15 ctrl_dir_(std::make_shared<vfs::PseudoDir>()) {
16 root_dir_->AddSharedEntry("svc", public_dir_);
17 root_dir_->AddSharedEntry("debug", debug_dir_);
18 root_dir_->AddSharedEntry("ctrl", ctrl_dir_);
19
20 root_dir_->Serve(
21 fuchsia::io::OPEN_RIGHT_READABLE | fuchsia::io::OPEN_RIGHT_WRITABLE,
22 std::move(directory_request));
23 }
24
25 RunnerContext::~RunnerContext() = default;
26
CreateFromStartupInfo()27 std::unique_ptr<RunnerContext> RunnerContext::CreateFromStartupInfo() {
28 zx_handle_t directory_request = zx_take_startup_handle(PA_DIRECTORY_REQUEST);
29 return std::make_unique<RunnerContext>(
30 sys::ServiceDirectory::CreateFromNamespace(),
31 zx::channel(directory_request));
32 }
33
AddPublicService(std::unique_ptr<vfs::Service> service,std::string service_name) const34 zx_status_t RunnerContext::AddPublicService(
35 std::unique_ptr<vfs::Service> service,
36 std::string service_name) const {
37 return public_dir_->AddEntry(std::move(service_name), std::move(service));
38 }
39
40 } // namespace flutter_runner
41