| // 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 |