• 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 #ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_RUNNER_CONTEXT_H_
6 #define FLUTTER_SHELL_PLATFORM_FUCHSIA_RUNNER_CONTEXT_H_
7 
8 #include <memory>
9 #include <unordered_map>
10 
11 #include <fuchsia/sys/cpp/fidl.h>
12 #include <lib/async-loop/cpp/loop.h>
13 #include <lib/sys/cpp/component_context.h>
14 #include <lib/vfs/cpp/pseudo_dir.h>
15 #include <lib/vfs/cpp/service.h>
16 #include <zircon/process.h>
17 #include <zircon/processargs.h>
18 
19 #include "flutter/fml/macros.h"
20 
21 namespace flutter_runner {
22 
23 class RunnerContext {
24  public:
25   RunnerContext(std::shared_ptr<sys::ServiceDirectory> svc,
26                 zx::channel directory_request);
27   ~RunnerContext();
28 
29   static std::unique_ptr<RunnerContext> CreateFromStartupInfo();
30 
svc()31   const std::shared_ptr<sys::ServiceDirectory>& svc() const { return svc_; }
root_dir()32   const std::shared_ptr<vfs::PseudoDir>& root_dir() const { return root_dir_; }
public_dir()33   const std::shared_ptr<vfs::PseudoDir>& public_dir() const {
34     return public_dir_;
35   }
debug_dir()36   const std::shared_ptr<vfs::PseudoDir>& debug_dir() const {
37     return debug_dir_;
38   }
ctrl_dir()39   const std::shared_ptr<vfs::PseudoDir>& ctrl_dir() const { return ctrl_dir_; }
40 
41   template <typename Interface>
42   zx_status_t AddPublicService(
43       fidl::InterfaceRequestHandler<Interface> handler,
44       std::string service_name = Interface::Name_) const {
45     return AddPublicService(std::make_unique<vfs::Service>(std::move(handler)),
46                             std::move(service_name));
47   }
48 
49   zx_status_t AddPublicService(std::unique_ptr<vfs::Service> service,
50                                std::string service_name) const;
51 
52   template <typename Interface>
53   zx_status_t RemovePublicService(
54       const std::string& name = Interface::Name_) const {
55     return public_dir_->RemoveEntry(name);
56   }
57 
58  private:
59   std::shared_ptr<sys::ServiceDirectory> svc_;
60   std::shared_ptr<vfs::PseudoDir> root_dir_;
61   std::shared_ptr<vfs::PseudoDir> public_dir_;
62   std::shared_ptr<vfs::PseudoDir> debug_dir_;
63   std::shared_ptr<vfs::PseudoDir> ctrl_dir_;
64 
65   FML_DISALLOW_COPY_AND_ASSIGN(RunnerContext);
66 };
67 
68 }  // namespace flutter_runner
69 
70 #endif  // FLUTTER_SHELL_PLATFORM_FUCHSIA_RUNNER_CONTEXT_H_
71