blob: 588432e4d3ffa4ce80a7d07ddf57d05222fcdea6 [file] [log] [blame]
// Copyright 2020 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 "chromecast/mojo/interface_bundle.h"
#include <utility>
namespace chromecast {
InterfaceBundle::InterfaceBundle() = default;
InterfaceBundle::~InterfaceBundle() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
void InterfaceBundle::Close() {
client_receivers_.Clear();
}
mojo::PendingRemote<mojom::RemoteInterfaces> InterfaceBundle::CreateRemote() {
mojo::PendingRemote<mojom::RemoteInterfaces> pending_remote;
AddClient(pending_remote.InitWithNewPipeAndPassReceiver());
return pending_remote;
}
void InterfaceBundle::BindInterface(const std::string& interface_name,
mojo::ScopedMessagePipeHandle handle) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (local_interfaces_.HasInterface(interface_name)) {
local_interfaces_.Bind(interface_name, std::move(handle));
return;
}
LOG(WARNING) << "Interface '" << interface_name << "' is not exposed by this "
<< "bundle, but a consumer tried to bind it.";
}
void InterfaceBundle::AddClient(
mojo::PendingReceiver<mojom::RemoteInterfaces> receiver) {
client_receivers_.Add(this, std::move(receiver));
}
} // namespace chromecast