| Index: mojo/public/bindings/remote_ptr.h
|
| diff --git a/mojo/public/bindings/remote_ptr.h b/mojo/public/bindings/remote_ptr.h
|
| deleted file mode 100644
|
| index 4e1ef257c7baf2b1aeec41011c0b05b2e9fc04d1..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/remote_ptr.h
|
| +++ /dev/null
|
| @@ -1,156 +0,0 @@
|
| -// Copyright 2013 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.
|
| -
|
| -#ifndef MOJO_PUBLIC_BINDINGS_REMOTE_PTR_H_
|
| -#define MOJO_PUBLIC_BINDINGS_REMOTE_PTR_H_
|
| -
|
| -#include <assert.h>
|
| -
|
| -#include "mojo/public/bindings/interface.h"
|
| -#include "mojo/public/bindings/lib/router.h"
|
| -#include "mojo/public/cpp/system/macros.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -// A RemotePtr is a smart-pointer for managing the connection of a message pipe
|
| -// to an interface proxy.
|
| -//
|
| -// EXAMPLE:
|
| -//
|
| -// Given foo.mojom containing the following interfaces:
|
| -//
|
| -// [Peer=FooClient]
|
| -// interface Foo {
|
| -// void Ping();
|
| -// };
|
| -//
|
| -// [Peer=Foo]
|
| -// interface FooClient {
|
| -// void Pong();
|
| -// };
|
| -//
|
| -// On the client side of a service, RemotePtr might be used like so:
|
| -//
|
| -// class FooClientImpl : public FooClient {
|
| -// public:
|
| -// explicit FooClientImpl(ScopedFooHandle handle)
|
| -// : foo_(handle.Pass(), this) {
|
| -// foo_.Ping();
|
| -// }
|
| -// virtual void Pong() {
|
| -// ...
|
| -// }
|
| -// private:
|
| -// mojo::RemotePtr<Foo> foo_;
|
| -// };
|
| -//
|
| -// On the implementation side of a service, RemotePtr might be used like so:
|
| -//
|
| -// class FooImpl : public Foo {
|
| -// public:
|
| -// explicit FooImpl(ScopedFooClientHandle handle)
|
| -// : client_(handle.Pass(), this) {
|
| -// }
|
| -// virtual void Ping() {
|
| -// client_->Pong();
|
| -// }
|
| -// private:
|
| -// 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;
|
| - MOJO_MOVE_ONLY_TYPE_FOR_CPP_03(RemotePtr, RValue)
|
| -
|
| - public:
|
| - RemotePtr() : state_(NULL) {}
|
| - explicit RemotePtr(typename Interface<S>::ScopedHandle interface_handle,
|
| - typename S::_Peer* peer,
|
| - ErrorHandler* error_handler = NULL,
|
| - MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter())
|
| - : state_(new State(ScopedMessagePipeHandle(interface_handle.Pass()), peer,
|
| - error_handler, waiter)) {
|
| - }
|
| -
|
| - // Move-only constructor and operator=.
|
| - RemotePtr(RValue other) : state_(other.object->release()) {}
|
| - RemotePtr& operator=(RValue other) {
|
| - state_ = other.object->release();
|
| - return *this;
|
| - }
|
| -
|
| - ~RemotePtr() {
|
| - delete state_;
|
| - }
|
| -
|
| - bool is_null() const {
|
| - return !state_;
|
| - }
|
| -
|
| - S* get() {
|
| - assert(state_);
|
| - return &state_->proxy;
|
| - }
|
| -
|
| - S* operator->() {
|
| - return get();
|
| - }
|
| -
|
| - void reset() {
|
| - delete state_;
|
| - state_ = NULL;
|
| - }
|
| -
|
| - void reset(typename Interface<S>::ScopedHandle interface_handle,
|
| - typename S::_Peer* peer,
|
| - ErrorHandler* error_handler = NULL,
|
| - MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter()) {
|
| - delete state_;
|
| - state_ = new State(ScopedMessagePipeHandle(interface_handle.Pass()), peer,
|
| - error_handler, waiter);
|
| - }
|
| -
|
| - bool encountered_error() const {
|
| - assert(state_);
|
| - return state_->router.encountered_error();
|
| - }
|
| -
|
| - private:
|
| - struct State {
|
| - State(ScopedMessagePipeHandle message_pipe, typename S::_Peer* peer,
|
| - ErrorHandler* error_handler, MojoAsyncWaiter* waiter)
|
| - : router(message_pipe.Pass(), waiter),
|
| - proxy(&router),
|
| - stub(peer) {
|
| - router.set_error_handler(error_handler);
|
| - if (peer)
|
| - router.set_incoming_receiver(&stub);
|
| - }
|
| - internal::Router router;
|
| - typename S::_Proxy proxy;
|
| - typename S::_Peer::_Stub stub;
|
| - };
|
| -
|
| - State* release() {
|
| - State* state = state_;
|
| - state_ = NULL;
|
| - return state;
|
| - }
|
| -
|
| - State* state_;
|
| -};
|
| -
|
| -} // namespace mojo
|
| -
|
| -#endif // MOJO_PUBLIC_BINDINGS_REMOTE_PTR_H_
|
|
|