blob: a3b1e947a19015cb80b16aa10de5830f0857ea14 [file] [log] [blame]
// Copyright 2018 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 GARNET_BIN_APPMGR_APPMGR_H_
#define GARNET_BIN_APPMGR_APPMGR_H_
#include <fs/pseudo-dir.h>
#include <fs/service.h>
#include <fs/synchronous-vfs.h>
#include "garnet/bin/appmgr/realm.h"
#include "garnet/bin/appmgr/util.h"
#include "garnet/lib/loader/package_loader.h"
#include "lib/fxl/macros.h"
#include "lib/svc/cpp/services.h"
namespace component {
struct AppmgrArgs {
zx_handle_t pa_directory_request;
const std::shared_ptr<component::Services> environment_services;
std::string sysmgr_url;
fidl::VectorPtr<std::string> sysmgr_args;
bool run_virtual_console;
bool retry_sysmgr_crash;
};
class Appmgr {
public:
Appmgr(async_dispatcher_t* dispatcher, AppmgrArgs args);
~Appmgr();
private:
std::unique_ptr<Realm> root_realm_;
fs::SynchronousVfs publish_vfs_;
fbl::RefPtr<fs::PseudoDir> publish_dir_;
fuchsia::sys::ComponentControllerPtr sysmgr_;
std::string sysmgr_url_;
fidl::VectorPtr<std::string> sysmgr_args_;
RestartBackOff sysmgr_backoff_;
bool sysmgr_permanently_failed_;
FXL_DISALLOW_COPY_AND_ASSIGN(Appmgr);
};
} // namespace component
#endif // GARNET_BIN_APPMGR_APPMGR_H_