Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: mojo/public/cpp/bindings/synchronous_interface_ptr.h

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/cpp/bindings/struct_ptr.h ('k') | mojo/public/cpp/bindings/tests/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « mojo/public/cpp/bindings/struct_ptr.h ('k') | mojo/public/cpp/bindings/tests/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698