blob: e8430396e7f907768602e30a0a336265d2b5b92d [file] [log] [blame]
// Copyright 2016 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.
#include "peridot/bin/sessionmgr/agent_launcher.h"
#include <lib/fxl/logging.h>
namespace modular {
namespace {
constexpr char kEnvironmentLabel[] = "agent";
} // namespace
component::Services AgentLauncher::StartAgent(
const std::string& url,
std::unique_ptr<maxwell::MaxwellServiceProviderBridge> bridge) {
bridge_ = std::move(bridge);
fuchsia::sys::ServiceListPtr service_list(new fuchsia::sys::ServiceList);
service_list->names = bridge_->service_names();
service_list->host_directory = bridge_->OpenAsDirectory();
fuchsia::sys::EnvironmentPtr agent_env;
environment_->CreateNestedEnvironment(
agent_env.NewRequest(), /*controller=*/nullptr, kEnvironmentLabel,
std::move(service_list), {});
fuchsia::sys::LauncherPtr agent_launcher;
agent_env->GetLauncher(agent_launcher.NewRequest());
fuchsia::sys::LaunchInfo launch_info;
launch_info.url = url;
component::Services services;
launch_info.directory_request = services.NewRequest();
FXL_LOG(INFO) << "Starting modular agent " << url;
agent_launcher->CreateComponent(std::move(launch_info), nullptr);
return services;
}
} // namespace modular