| Index: mojo/public/bindings/remote_ptr.h
|
| diff --git a/mojo/public/bindings/remote_ptr.h b/mojo/public/bindings/remote_ptr.h
|
| index 7acd971b6897265cf53c113ac1993afea4b383c4..bbf36f95b91f865913572b746558c0663122fc78 100644
|
| --- a/mojo/public/bindings/remote_ptr.h
|
| +++ b/mojo/public/bindings/remote_ptr.h
|
| @@ -15,7 +15,7 @@ namespace mojo {
|
| // A RemotePtr is a smart-pointer for managing the connection of a message pipe
|
| // to an interface proxy.
|
| //
|
| -// EXAMPLE
|
| +// EXAMPLE:
|
| //
|
| // On the client side of a service, RemotePtr might be used like so:
|
| //
|
| @@ -46,6 +46,15 @@ namespace mojo {
|
| // mojo::RemotePtr<FooClient> client_;
|
| // };
|
| //
|
| +// NOTE:
|
| +//
|
| +// 1- It is valid to pass NULL for the peer if you are not interested in
|
| +// receiving incoming messages. Those messages will still be consumed.
|
| +//
|
| +// 2- You may optionally register an ErrorHandler on the RemotePtr to be
|
| +// notified if the peer has gone away. Alternatively, you may poll the
|
| +// |encountered_error()| method to check if the peer has gone away.
|
| +//
|
| template <typename S>
|
| class RemotePtr {
|
| struct State;
|
| @@ -55,8 +64,9 @@ class RemotePtr {
|
| RemotePtr() : state_(NULL) {}
|
| explicit RemotePtr(ScopedMessagePipeHandle message_pipe,
|
| typename S::_Peer* peer = NULL,
|
| + ErrorHandler* error_handler = NULL,
|
| MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter())
|
| - : state_(new State(message_pipe.Pass(), peer, waiter)) {
|
| + : state_(new State(message_pipe.Pass(), peer, error_handler, waiter)) {
|
| }
|
|
|
| // Move-only constructor and operator=.
|
| @@ -90,9 +100,10 @@ class RemotePtr {
|
|
|
| void reset(ScopedMessagePipeHandle message_pipe,
|
| typename S::_Peer* peer = NULL,
|
| + ErrorHandler* error_handler = NULL,
|
| MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter()) {
|
| delete state_;
|
| - state_ = new State(message_pipe.Pass(), peer, waiter);
|
| + state_ = new State(message_pipe.Pass(), peer, error_handler, waiter);
|
| }
|
|
|
| bool encountered_error() const {
|
| @@ -103,12 +114,13 @@ class RemotePtr {
|
| private:
|
| struct State {
|
| State(ScopedMessagePipeHandle message_pipe, typename S::_Peer* peer,
|
| - MojoAsyncWaiter* waiter)
|
| + ErrorHandler* error_handler, MojoAsyncWaiter* waiter)
|
| : connector(message_pipe.Pass(), waiter),
|
| proxy(&connector),
|
| stub(peer) {
|
| + connector.set_error_handler(error_handler);
|
| if (peer)
|
| - connector.SetIncomingReceiver(&stub);
|
| + connector.set_incoming_receiver(&stub);
|
| }
|
| internal::Connector connector;
|
| typename S::_Proxy proxy;
|
|
|