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

Unified Diff: ipc/ipc_channel_proxy.h

Issue 2668153003: Mojo C++ Bindings: Eliminate unbound ThreadSafeInterfacePtr (Closed)
Patch Set: format and rebase... Created 3 years, 10 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 | « ipc/ipc_channel_mojo.cc ('k') | ipc/ipc_channel_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_channel_proxy.h
diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h
index bda83bb18854299b58c977b6a5a349e76cf4e15b..cde6a89620b38fb695e1a3de40ba0c800eca39d5 100644
--- a/ipc/ipc_channel_proxy.h
+++ b/ipc/ipc_channel_proxy.h
@@ -22,8 +22,10 @@
#include "ipc/ipc_listener.h"
#include "ipc/ipc_sender.h"
#include "mojo/public/cpp/bindings/associated_group.h"
+#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h"
+#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
namespace base {
class SingleThreadTaskRunner;
@@ -209,17 +211,22 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
}
#endif
+ // Creates a ThreadSafeAssociatedInterfacePtr for |Interface|. This object
+ // may be used to send messages on the interface from any thread and those
+ // messages will remain ordered with respect to other messages sent on the
+ // same thread over other ThreadSafeAssociatedInterfacePtrs associated with
+ // the same Channel.
template <typename Interface>
- using AssociatedInterfaceRetrievedCallback =
- base::Callback<void(mojo::AssociatedInterfacePtr<Interface>)>;
- // Creates an AssociatedInterfacePtr to |Interface| on the IO thread and
- // passes it to |callback|, also invoked on the IO thread.
- template <typename Interface>
- void RetrieveAssociatedInterfaceOnIOThread(
- const AssociatedInterfaceRetrievedCallback<Interface>& callback) {
- context_->ipc_task_runner()->PostTask(
- FROM_HERE, base::Bind(&Context::RetrieveAssociatedInterface<Interface>,
- context_, callback));
+ void GetThreadSafeRemoteAssociatedInterface(
+ scoped_refptr<mojo::ThreadSafeAssociatedInterfacePtr<Interface>>*
+ out_ptr) {
+ mojo::AssociatedInterfacePtrInfo<Interface> ptr_info;
+ mojo::AssociatedInterfaceRequest<Interface> request;
+ GetAssociatedGroup()->CreateAssociatedInterface(
+ mojo::AssociatedGroup::WILL_PASS_REQUEST, &ptr_info, &request);
+ GetGenericRemoteAssociatedInterface(Interface::Name_, request.PassHandle());
+ *out_ptr = mojo::ThreadSafeAssociatedInterfacePtr<Interface>::Create(
+ std::move(ptr_info), ipc_task_runner());
}
base::SingleThreadTaskRunner* ipc_task_runner() const {
@@ -251,11 +258,6 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
// Sends |message| from appropriate thread.
void Send(Message* message);
- // Requests a remote associated interface on the IPC thread.
- void GetRemoteAssociatedInterface(
- const std::string& name,
- mojo::ScopedInterfaceEndpointHandle handle);
-
protected:
friend class base::RefCountedThreadSafe<Context>;
~Context() override;
@@ -299,14 +301,6 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
void OnSendMessage(std::unique_ptr<Message> message_ptr);
void OnAddFilter();
void OnRemoveFilter(MessageFilter* filter);
- template <typename Interface>
- void RetrieveAssociatedInterface(
- const AssociatedInterfaceRetrievedCallback<Interface>& callback) {
- mojo::AssociatedInterfacePtr<Interface> interface_ptr;
- channel_->GetAssociatedInterfaceSupport()->GetRemoteAssociatedInterface(
- &interface_ptr);
- callback.Run(std::move(interface_ptr));
- }
// Methods called on the listener thread.
void AddFilter(MessageFilter* filter);
@@ -320,6 +314,9 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
void ClearChannel();
mojo::AssociatedGroup* associated_group() { return &associated_group_; }
+ mojom::Channel& thread_safe_channel() {
+ return thread_safe_channel_->proxy();
+ }
void AddGenericAssociatedInterfaceForIOThread(
const std::string& name,
@@ -360,6 +357,11 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
mojo::AssociatedGroup associated_group_;
+ // A thread-safe mojom::Channel interface we use to make remote interface
+ // requests from the proxy thread.
+ std::unique_ptr<mojo::ThreadSafeForwarder<mojom::Channel>>
+ thread_safe_channel_;
+
// Holds associated interface binders added by
// AddGenericAssociatedInterfaceForIOThread until the underlying channel has
// been initialized.
« no previous file with comments | « ipc/ipc_channel_mojo.cc ('k') | ipc/ipc_channel_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698