To clarify, a mojo::Remote is considered connected as soon it is bound (e.g. with BindNewPipeAndPassReceiver), *even if* the pending_receiver hasn't been sent anywhere yet, e.g.:
mojo::Remote<mojom::SomeInterface> new_remote;
mojo::PendingReceiver<mojom::SomeInterface> pending_receiver =
new_remote.BindNewPipeAndPassReceiver();
// always true
DCHECK(new_remote.is_connected());
Even if pending_receiver is goes out of scope and is never bound, is_connected() will not synchronously become false, e.g. if the snippet above were followed by:
pending_receiver.reset();
// Still true, the mojo::Remote is notified asynchronously when the other end of
// the pipe is closed.
DCHECK(new_remote.is_connected());
Daniel