// Copyright 2019 The Chromium 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 "fuchsia/base/agent_manager.h" #include #include "base/fuchsia/fuchsia_logging.h" #include "base/logging.h" namespace cr_fuchsia { AgentManager::AgentManager(const sys::ServiceDirectory* incoming) : component_context_( incoming->Connect()) {} AgentManager::~AgentManager() = default; void AgentManager::ConnectToAgentServiceUnsafe(base::StringPiece agent, base::StringPiece interface, zx::channel request) { auto it = agents_.find(agent); if (it == agents_.end()) { it = agents_.emplace(agent.as_string(), AgentConnection()).first; component_context_->DeprecatedConnectToAgent( agent.as_string(), it->second.services.NewRequest(), it->second.controller.NewRequest()); it->second.services.set_error_handler( [this, agent = agent.as_string()](zx_status_t status) { ZX_LOG(WARNING, status) << "Agent disconnected: " << agent; agents_.erase(agent); }); } it->second.services->ConnectToService(interface.as_string(), std::move(request)); } AgentManager::AgentConnection::AgentConnection() = default; AgentManager::AgentConnection::AgentConnection(AgentConnection&& other) = default; AgentManager::AgentConnection& AgentManager::AgentConnection::operator=( AgentConnection&& other) = default; AgentManager::AgentConnection::~AgentConnection() = default; } // namespace cr_fuchsia