// Copyright 2019 The Chromium Authors // 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_ASSOCIATED_REMOTE_H_ #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_REMOTE_H_ #include <cstdint> #include <tuple> #include <utility> #include "base/check.h" #include "base/functional/callback_forward.h" #include "base/memory/scoped_refptr.h" #include "base/task/sequenced_task_runner.h" #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/runtime_features.h" #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" namespace mojo { // An AssociatedRemote is similar to a Remote (see remote.h): it is used to // issue mojom interface method calls that will be sent over a message pipe to // be handled by the entangled AssociatedReceiver. // // An AssociatedRemote is needed when it is important to preserve the relative // ordering of calls with another mojom interface. This is implemented by // sharing the underlying message pipe between the mojom interfaces where // ordering must be preserved. // // Because of this, an AssociatedRemote cannot be used to issue mojom interface // method calls until one of its endpoints (either the AssociatedRemote itself // or its entangled AssociatedReceiver) is sent over a Remote/Receiver pair // or an already-established AssociatedRemote/AssociatedReceiver pair. template <typename Interface> class AssociatedRemote { … }; } // namespace mojo #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_REMOTE_H_