Index: ipc/ipc_channel_proxy.h |
diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h |
index 0c9323304098c2fc18c75f247479a749b1d3f27b..c28ba2f0940045362f905a9665bf84f7a86ecc0e 100644 |
--- a/ipc/ipc_channel_proxy.h |
+++ b/ipc/ipc_channel_proxy.h |
@@ -123,10 +123,24 @@ class IPC_EXPORT ChannelProxy : public Endpoint, public base::NonThreadSafe { |
// with / allow for this possibility. |
void Close(); |
- // Send a message asynchronously. The message is routed to the background |
- // thread where it is passed to the IPC::Channel's Send method. |
+ // DEPRECATED: Please use either SendNow or SendOnIPCThread to make ordering |
+ // expectations explicit. |
+ // |
+ // This is an alias for for SendOnIPCThread. |
bool Send(Message* message) override; |
+ // Send a message as soon as possible. This method may send the message |
+ // immediately, or it may defer and send on the IPC thread. Use this when you |
+ // you don't care about strict ordering of the send operation with respect to |
+ // tasks on the IPC thread. This is most commonly what you want. |
+ virtual bool SendNow(std::unique_ptr<Message> message); |
+ |
+ // Send a message from the IPC thread. This immediately posts a task to the |
+ // IPC thread task runner to send the message. Use this when you're posting |
+ // other related tasks to the IPC thread and you need to guarantee that the |
+ // send operation is ordered with respect to those tasks. |
+ virtual bool SendOnIPCThread(std::unique_ptr<Message> message); |
+ |
// Used to intercept messages as they are received on the background thread. |
// |
// Ordinarily, messages sent to the ChannelProxy are routed to the matching |
@@ -181,7 +195,7 @@ class IPC_EXPORT ChannelProxy : public Endpoint, public base::NonThreadSafe { |
void OnDispatchMessage(const Message& message); |
// Sends |message| from appropriate thread. |
- void Send(Message* message); |
+ bool Send(std::unique_ptr<Message> message, bool force_io_thread); |
// Indicates if the underlying channel's Send is thread-safe. |
bool IsChannelSendThreadSafe() const; |
@@ -235,7 +249,6 @@ class IPC_EXPORT ChannelProxy : public Endpoint, public base::NonThreadSafe { |
void OnDispatchError(); |
void OnDispatchBadMessage(const Message& message); |
- void SendFromThisThread(Message* message); |
void ClearChannel(); |
scoped_refptr<base::SingleThreadTaskRunner> listener_task_runner_; |
@@ -296,6 +309,8 @@ class IPC_EXPORT ChannelProxy : public Endpoint, public base::NonThreadSafe { |
// Always called once immediately after Init. |
virtual void OnChannelInit(); |
+ bool SendImpl(std::unique_ptr<Message> message, bool force_io_thread); |
+ |
// By maintaining this indirection (ref-counted) to our internal state, we |
// can safely be destroyed while the background thread continues to do stuff |
// that involves this data. |