blob: 60ce52e42c9e3fd5478d98b8f9b50e420fc17f88 [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/root_loader.h"
#include "garnet/bin/appmgr/util.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<fidl::StringPtr> 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<fidl::StringPtr> sysmgr_args_;
RestartBackOff sysmgr_backoff_;
bool sysmgr_permanently_failed_;
FXL_DISALLOW_COPY_AND_ASSIGN(Appmgr);
};
} // namespace component
#endif // GARNET_BIN_APPMGR_APPMGR_H_