aboutsummaryrefslogtreecommitdiff
path: root/mojo/public/cpp/bindings/interface_request.h
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/public/cpp/bindings/interface_request.h')
-rw-r--r--mojo/public/cpp/bindings/interface_request.h178
1 files changed, 0 insertions, 178 deletions
diff --git a/mojo/public/cpp/bindings/interface_request.h b/mojo/public/cpp/bindings/interface_request.h
deleted file mode 100644
index 29d8836..0000000
--- a/mojo/public/cpp/bindings/interface_request.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2014 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_INTERFACE_REQUEST_H_
-#define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_REQUEST_H_
-
-#include <string>
-#include <utility>
-
-#include "base/macros.h"
-#include "base/optional.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "mojo/public/cpp/bindings/disconnect_reason.h"
-#include "mojo/public/cpp/bindings/interface_ptr.h"
-#include "mojo/public/cpp/bindings/pipe_control_message_proxy.h"
-#include "mojo/public/cpp/system/message_pipe.h"
-
-namespace mojo {
-
-// Represents a request from a remote client for an implementation of Interface
-// over a specified message pipe. The implementor of the interface should
-// remove the message pipe by calling PassMessagePipe() and bind it to the
-// implementation. If this is not done, the InterfaceRequest will automatically
-// close the pipe on destruction. Can also represent the absence of a request
-// if the client did not provide a message pipe.
-template <typename Interface>
-class InterfaceRequest {
- public:
- // Constructs an empty InterfaceRequest, representing that the client is not
- // requesting an implementation of Interface.
- InterfaceRequest() {}
- InterfaceRequest(decltype(nullptr)) {}
-
- // Creates a new message pipe over which Interface is to be served, binding
- // the specified InterfacePtr to one end of the message pipe and this
- // InterfaceRequest to the other. For example usage, see comments on
- // MakeRequest(InterfacePtr*) below.
- explicit InterfaceRequest(InterfacePtr<Interface>* ptr,
- scoped_refptr<base::SingleThreadTaskRunner> runner =
- base::ThreadTaskRunnerHandle::Get()) {
- MessagePipe pipe;
- ptr->Bind(InterfacePtrInfo<Interface>(std::move(pipe.handle0), 0u),
- std::move(runner));
- Bind(std::move(pipe.handle1));
- }
-
- // Takes the message pipe from another InterfaceRequest.
- InterfaceRequest(InterfaceRequest&& other) {
- handle_ = std::move(other.handle_);
- }
- InterfaceRequest& operator=(InterfaceRequest&& other) {
- handle_ = std::move(other.handle_);
- return *this;
- }
-
- // Assigning to nullptr resets the InterfaceRequest to an empty state,
- // closing the message pipe currently bound to it (if any).
- InterfaceRequest& operator=(decltype(nullptr)) {
- handle_.reset();
- return *this;
- }
-
- // Binds the request to a message pipe over which Interface is to be
- // requested. If the request is already bound to a message pipe, the current
- // message pipe will be closed.
- void Bind(ScopedMessagePipeHandle handle) { handle_ = std::move(handle); }
-
- // Indicates whether the request currently contains a valid message pipe.
- bool is_pending() const { return handle_.is_valid(); }
-
- // Removes the message pipe from the request and returns it.
- ScopedMessagePipeHandle PassMessagePipe() { return std::move(handle_); }
-
- bool Equals(const InterfaceRequest& other) const {
- if (this == &other)
- return true;
-
- // Now that the two refer to different objects, they are equivalent if
- // and only if they are both invalid.
- return !is_pending() && !other.is_pending();
- }
-
- void ResetWithReason(uint32_t custom_reason, const std::string& description) {
- if (!handle_.is_valid())
- return;
-
- Message message =
- PipeControlMessageProxy::ConstructPeerEndpointClosedMessage(
- kMasterInterfaceId, DisconnectReason(custom_reason, description));
- MojoResult result = WriteMessageNew(
- handle_.get(), message.TakeMojoMessage(), MOJO_WRITE_MESSAGE_FLAG_NONE);
- DCHECK_EQ(MOJO_RESULT_OK, result);
-
- handle_.reset();
- }
-
- private:
- ScopedMessagePipeHandle handle_;
-
- DISALLOW_COPY_AND_ASSIGN(InterfaceRequest);
-};
-
-// Makes an InterfaceRequest bound to the specified message pipe. If |handle|
-// is empty or invalid, the resulting InterfaceRequest will represent the
-// absence of a request.
-template <typename Interface>
-InterfaceRequest<Interface> MakeRequest(ScopedMessagePipeHandle handle) {
- InterfaceRequest<Interface> request;
- request.Bind(std::move(handle));
- return std::move(request);
-}
-
-// Creates a new message pipe over which Interface is to be served. Binds the
-// specified InterfacePtr to one end of the message pipe, and returns an
-// InterfaceRequest bound to the other. The InterfacePtr should be passed to
-// the client, and the InterfaceRequest should be passed to whatever will
-// provide the implementation. The implementation should typically be bound to
-// the InterfaceRequest using the Binding or StrongBinding classes. The client
-// may begin to issue calls even before an implementation has been bound, since
-// messages sent over the pipe will just queue up until they are consumed by
-// the implementation.
-//
-// Example #1: Requesting a remote implementation of an interface.
-// ===============================================================
-//
-// Given the following interface:
-//
-// interface Database {
-// OpenTable(Table& table);
-// }
-//
-// The client would have code similar to the following:
-//
-// DatabasePtr database = ...; // Connect to database.
-// TablePtr table;
-// database->OpenTable(MakeRequest(&table));
-//
-// Upon return from MakeRequest, |table| is ready to have methods called on it.
-//
-// Example #2: Registering a local implementation with a remote service.
-// =====================================================================
-//
-// Given the following interface
-// interface Collector {
-// RegisterSource(Source source);
-// }
-//
-// The client would have code similar to the following:
-//
-// CollectorPtr collector = ...; // Connect to Collector.
-// SourcePtr source;
-// InterfaceRequest<Source> source_request(&source);
-// collector->RegisterSource(std::move(source));
-// CreateSource(std::move(source_request)); // Create implementation locally.
-//
-template <typename Interface>
-InterfaceRequest<Interface> MakeRequest(
- InterfacePtr<Interface>* ptr,
- scoped_refptr<base::SingleThreadTaskRunner> runner =
- base::ThreadTaskRunnerHandle::Get()) {
- return InterfaceRequest<Interface>(ptr, runner);
-}
-
-// Fuses an InterfaceRequest<T> endpoint with an InterfacePtrInfo<T> endpoint.
-// Returns |true| on success or |false| on failure.
-template <typename Interface>
-bool FuseInterface(InterfaceRequest<Interface> request,
- InterfacePtrInfo<Interface> proxy_info) {
- MojoResult result = FuseMessagePipes(request.PassMessagePipe(),
- proxy_info.PassHandle());
- return result == MOJO_RESULT_OK;
-}
-
-} // namespace mojo
-
-#endif // MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_REQUEST_H_