// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cast/api_bindings/manager.h"
#include <string_view>
#include <utility>
#include "base/logging.h"
namespace cast_api_bindings {
Manager::Manager() = default;
Manager::~Manager() {
DCHECK(port_handlers_.empty());
}
void Manager::RegisterPortHandler(std::string_view port_name,
MessagePortConnectedHandler handler) {
auto result = port_handlers_.try_emplace(port_name, std::move(handler));
DCHECK(result.second);
}
void Manager::UnregisterPortHandler(std::string_view port_name) {
size_t deleted = port_handlers_.erase(port_name);
DCHECK_EQ(deleted, 1u);
}
bool Manager::OnPortConnected(
std::string_view port_name,
std::unique_ptr<cast_api_bindings::MessagePort> port) {
if (!port)
return false;
auto handler = port_handlers_.find(port_name);
if (handler == port_handlers_.end()) {
LOG(ERROR) << "No handler found for port " << port_name << ".";
return false;
}
handler->second.Run(std::move(port));
return true;
}
} // namespace cast_api_bindings