#include "mojo/public/cpp/system/scope_to_message_pipe.h"
namespace mojo {
namespace internal {
namespace {
void OnWatcherSignaled(std::unique_ptr<MessagePipeScoperBase> scoper,
MojoResult result,
const HandleSignalsState& state) {
DCHECK(scoper);
DCHECK_EQ(result, MOJO_RESULT_OK);
DCHECK(state.peer_closed());
}
}
MessagePipeScoperBase::MessagePipeScoperBase(ScopedMessagePipeHandle pipe)
: pipe_(std::move(pipe)),
pipe_watcher_(FROM_HERE, SimpleWatcher::ArmingPolicy::AUTOMATIC) {}
MessagePipeScoperBase::~MessagePipeScoperBase() = default;
void MessagePipeScoperBase::StartWatchingPipe(
std::unique_ptr<MessagePipeScoperBase> scoper) {
auto* unowned_scoper = scoper.get();
unowned_scoper->pipe_watcher_.Watch(
unowned_scoper->pipe_.get(), MOJO_HANDLE_SIGNAL_PEER_CLOSED,
MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED,
base::BindRepeating(&OnWatcherSignaled, base::Passed(&scoper)));
}
}
}