| Index: mojo/public/cpp/bindings/synchronous_interface_ptr.h
|
| diff --git a/mojo/public/cpp/bindings/synchronous_interface_ptr.h b/mojo/public/cpp/bindings/synchronous_interface_ptr.h
|
| deleted file mode 100644
|
| index 11965c4f371f27125f471a3f077af8fff75f8c2f..0000000000000000000000000000000000000000
|
| --- a/mojo/public/cpp/bindings/synchronous_interface_ptr.h
|
| +++ /dev/null
|
| @@ -1,150 +0,0 @@
|
| -// Copyright 2016 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_CPP_BINDINGS_SYNCHRONOUS_INTERFACE_PTR_H_
|
| -#define MOJO_PUBLIC_CPP_BINDINGS_SYNCHRONOUS_INTERFACE_PTR_H_
|
| -
|
| -#include <cstddef>
|
| -#include <memory>
|
| -#include <utility>
|
| -
|
| -#include "mojo/public/cpp/bindings/interface_handle.h"
|
| -#include "mojo/public/cpp/bindings/lib/message_header_validator.h"
|
| -#include "mojo/public/cpp/bindings/lib/synchronous_connector.h"
|
| -#include "mojo/public/cpp/bindings/message_validator.h"
|
| -#include "mojo/public/cpp/environment/logging.h"
|
| -#include "mojo/public/cpp/system/macros.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -// A synchronous version of InterfacePtr. Interface message calls using a
|
| -// SynchronousInterfacePtr will block if a response message is expected. This
|
| -// class uses the generated synchronous versions of the mojo interfaces.
|
| -//
|
| -// To make a SynchronousInterfacePtr, use the |Create()| factory method and
|
| -// supply the InterfaceHandle to it. Use |PassInterfaceHandle()| to extract the
|
| -// InterfaceHandle.
|
| -//
|
| -// SynchronousInterfacePtr is thread-compatible (but not thread-safe).
|
| -//
|
| -// TODO(vardhan): Add support for InterfaceControlMessage methods.
|
| -// TODO(vardhan): Message calls invoked on this class will return |false| if
|
| -// there are any message pipe errors. Should there be a better way to expose
|
| -// underlying message pipe errors?
|
| -template <typename Interface>
|
| -class SynchronousInterfacePtr {
|
| - public:
|
| - // Constructs an unbound SynchronousInterfacePtr.
|
| - SynchronousInterfacePtr() : version_(0) {}
|
| - SynchronousInterfacePtr(std::nullptr_t) : SynchronousInterfacePtr() {}
|
| -
|
| - // Takes over the binding of another SynchronousInterfacePtr, and closes any
|
| - // message pipe already bound to this pointer.
|
| - SynchronousInterfacePtr(SynchronousInterfacePtr&& other) = default;
|
| -
|
| - // Takes over the binding of another SynchronousInterfacePtr, and closes any
|
| - // message pipe already bound to this pointer.
|
| - SynchronousInterfacePtr& operator=(SynchronousInterfacePtr&& other) = default;
|
| -
|
| - static SynchronousInterfacePtr<Interface> Create(
|
| - InterfaceHandle<Interface> handle) {
|
| - return SynchronousInterfacePtr<Interface>(std::move(handle));
|
| - }
|
| -
|
| - // Closes the bound message pipe (if any).
|
| - void reset() { *this = SynchronousInterfacePtr<Interface>(); }
|
| -
|
| - // Returns a raw pointer to the local proxy. Caller does not take ownership.
|
| - // Note that the local proxy is thread hostile, as stated above.
|
| - typename Interface::Synchronous_* get() { return proxy_.get(); }
|
| -
|
| - typename Interface::Synchronous_* operator->() {
|
| - MOJO_DCHECK(connector_);
|
| - MOJO_DCHECK(proxy_);
|
| - return proxy_.get();
|
| - }
|
| - typename Interface::Synchronous_& operator*() { return *operator->(); }
|
| -
|
| - // Returns whether or not this SynchronousInterfacePtr is bound to a message
|
| - // pipe.
|
| - bool is_bound() const { return connector_ && connector_->is_valid(); }
|
| - explicit operator bool() const { return is_bound(); }
|
| -
|
| - uint32_t version() const { return version_; }
|
| -
|
| - // Unbinds the SynchronousInterfacePtr and returns the underlying
|
| - // InterfaceHandle for the interface.
|
| - InterfaceHandle<Interface> PassInterfaceHandle() {
|
| - InterfaceHandle<Interface> handle(connector_->PassHandle(), version_);
|
| - reset();
|
| - return handle;
|
| - }
|
| -
|
| - private:
|
| - // We save the version_ here before we pass the underlying message pipe handle
|
| - // to |connector_|.
|
| - uint32_t version_;
|
| -
|
| - // A simple I/O interface we supply to the generated |proxy_| so it doesn't
|
| - // have to know how to write mojo message.
|
| - std::unique_ptr<internal::SynchronousConnector> connector_;
|
| - // |proxy_| must outlive |connector_|, so make sure it is declared in this
|
| - // order.
|
| - std::unique_ptr<typename Interface::Synchronous_::Proxy_> proxy_;
|
| -
|
| - SynchronousInterfacePtr(InterfaceHandle<Interface> handle)
|
| - : version_(handle.version()) {
|
| - connector_.reset(new internal::SynchronousConnector(handle.PassHandle()));
|
| -
|
| - mojo::internal::MessageValidatorList validators;
|
| - validators.push_back(std::unique_ptr<mojo::internal::MessageValidator>(
|
| - new mojo::internal::MessageHeaderValidator));
|
| - validators.push_back(std::unique_ptr<mojo::internal::MessageValidator>(
|
| - new typename Interface::ResponseValidator_));
|
| -
|
| - proxy_.reset(new typename Interface::Synchronous_::Proxy_(
|
| - connector_.get(), std::move(validators)));
|
| - }
|
| -
|
| - MOJO_MOVE_ONLY_TYPE(SynchronousInterfacePtr);
|
| -};
|
| -
|
| -// Creates a new message pipe over which Interface is to be served. Binds the
|
| -// specified SynchronousInterfacePtr to one end of the message pipe, and returns
|
| -// an InterfaceRequest bound to the other. The SynchronousInterfacePtr should be
|
| -// passed to the client, and the InterfaceRequest should be passed to whatever
|
| -// will provide the implementation. Unlike InterfacePtr<>, invocations on
|
| -// SynchronousInterfacePtr<> will block until a response is received, so the
|
| -// user must pass off InterfaceRequest<> to an implementation before issuing any
|
| -// calls.
|
| -//
|
| -// Example:
|
| -// ========
|
| -// Given the following interface
|
| -// interface Echo {
|
| -// EchoString(string str) => (string value);
|
| -// }
|
| -//
|
| -// The client would have code similar to the following:
|
| -//
|
| -// SynchronousInterfacePtr<Echo> client;
|
| -// InterfaceRequest<Echo> impl = GetSynchronousProxy(&client);
|
| -// // .. pass |impl| off to an implementation.
|
| -// mojo::String out;
|
| -// client->EchoString("hello!", &out);
|
| -//
|
| -// TODO(vardhan): Consider renaming this function, along with her sister
|
| -// |GetProxy()| functions. Maybe `MakeSyncProxy()`?
|
| -template <typename Interface>
|
| -InterfaceRequest<Interface> GetSynchronousProxy(
|
| - SynchronousInterfacePtr<Interface>* ptr) {
|
| - InterfaceHandle<Interface> iface_handle;
|
| - auto retval = GetProxy(&iface_handle);
|
| - *ptr = SynchronousInterfacePtr<Interface>::Create(std::move(iface_handle));
|
| - return retval;
|
| -}
|
| -
|
| -} // namespace mojo
|
| -
|
| -#endif // MOJO_PUBLIC_CPP_BINDINGS_SYNCHRONOUS_INTERFACE_PTR_H_
|
|
|