blob: 7c26832a20e1936d6aae52f2e652e6d78332a220 [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/maxwell/agent_launcher.h"
#include <lib/fxl/logging.h>
namespace maxwell {
namespace {
constexpr char kEnvironmentLabel[] = "agent";
} // namespace
component::Services AgentLauncher::StartAgent(
const std::string& url,
std::unique_ptr<MaxwellServiceProviderBridge> bridge) {
bridge_ = std::move(bridge);
fuchsia::sys::ServiceListPtr service_list(new fuchsia::sys::ServiceList);
service_list->names = bridge_->service_names().Clone();
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 Maxwell agent " << url;
agent_launcher->CreateComponent(std::move(launch_info), nullptr);
return services;
}
} // namespace maxwell