• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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