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