blob: 5f625b3c3c613d406fff03667bfcccb2cfa5b0ee [file] [log] [blame]
// 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 "mojo/public/cpp/bindings/generic_pending_receiver.h"
#include <string_view>
#include "base/trace_event/trace_event.h"
namespace mojo {
GenericPendingReceiver::GenericPendingReceiver() = default;
GenericPendingReceiver::GenericPendingReceiver(
std::string_view interface_name,
mojo::ScopedMessagePipeHandle receiving_pipe)
: interface_name_(std::string(interface_name)),
pipe_(std::move(receiving_pipe)) {}
GenericPendingReceiver::GenericPendingReceiver(GenericPendingReceiver&&) =
default;
GenericPendingReceiver::~GenericPendingReceiver() = default;
GenericPendingReceiver& GenericPendingReceiver::operator=(
GenericPendingReceiver&&) = default;
void GenericPendingReceiver::reset() {
interface_name_.reset();
pipe_.reset();
}
mojo::ScopedMessagePipeHandle GenericPendingReceiver::PassPipe() {
DCHECK(is_valid());
interface_name_.reset();
return std::move(pipe_);
}
mojo::ScopedMessagePipeHandle GenericPendingReceiver::PassPipeIfNameIs(
const char* interface_name) {
DCHECK(is_valid());
if (interface_name_ == interface_name)
return PassPipe();
return mojo::ScopedMessagePipeHandle();
}
void GenericPendingReceiver::WriteIntoTrace(perfetto::TracedValue ctx) const {
auto dict = std::move(ctx).WriteDictionary();
dict.Add("interface_name", interface_name_);
}
} // namespace mojo