blob: 6875f129ffcef9b231c7be7924aa57ab1f436e62 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOPAZ_RUNTIME_FLUTTER_RUNNER_RUNNER_CONTEXT_H_
#define TOPAZ_RUNTIME_FLUTTER_RUNNER_RUNNER_CONTEXT_H_
#include <memory>
#include <unordered_map>
#include <fuchsia/sys/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/vfs/cpp/pseudo_dir.h>
#include <lib/vfs/cpp/service.h>
#include <zircon/process.h>
#include <zircon/processargs.h>
#include "flutter/fml/macros.h"
namespace flutter_runner {
class RunnerContext {
public:
RunnerContext(std::shared_ptr<sys::ServiceDirectory> svc,
zx::channel directory_request);
~RunnerContext();
static std::unique_ptr<RunnerContext> CreateFromStartupInfo();
const std::shared_ptr<sys::ServiceDirectory>& svc() const { return svc_; }
const std::shared_ptr<vfs::PseudoDir>& root_dir() const { return root_dir_; }
const std::shared_ptr<vfs::PseudoDir>& public_dir() const { return public_dir_; }
const std::shared_ptr<vfs::PseudoDir>& debug_dir() const { return debug_dir_; }
const std::shared_ptr<vfs::PseudoDir>& ctrl_dir() const { return ctrl_dir_; }
template <typename Interface>
zx_status_t AddPublicService(
fidl::InterfaceRequestHandler<Interface> handler,
std::string service_name = Interface::Name_) const {
return AddPublicService(std::make_unique<vfs::Service>(std::move(handler)),
std::move(service_name));
}
zx_status_t AddPublicService(std::unique_ptr<vfs::Service> service,
std::string service_name) const;
template <typename Interface>
zx_status_t RemovePublicService(
const std::string& name = Interface::Name_) const {
return public_dir_->RemoveEntry(name);
}
private:
std::shared_ptr<sys::ServiceDirectory> svc_;
std::shared_ptr<vfs::PseudoDir> root_dir_;
std::shared_ptr<vfs::PseudoDir> public_dir_;
std::shared_ptr<vfs::PseudoDir> debug_dir_;
std::shared_ptr<vfs::PseudoDir> ctrl_dir_;
FML_DISALLOW_COPY_AND_ASSIGN(RunnerContext);
};
} // namespace flutter_runner
#endif // TOPAZ_RUNTIME_FLUTTER_RUNNER_RUNNER_CONTEXT_H_